You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言模拟数据集进行模型选择的问题求助

排查R向后选择模拟代码的错误

我帮你仔细看了这段模拟代码,问题主要出在数据集生成逻辑和缺少循环遍历这两个核心点上,导致你只处理了第一个数据集,而且统计逻辑完全没跑起来。下面一步步给你拆解错误和修正方案:

一、代码里的核心错误

  • 变量未定义:你代码里的beta0、beta1、beta2、beta3没有赋值,运行时会直接报错,这是基础疏漏。
  • 数据集结构错误:replicate(100, rnorm(n=100))生成的是100×100的矩阵(每行是样本,每列是一个数据集),但你直接把Y赋值成矩阵后,data.full$y和data.full$x都是矩阵,后面调用data.full$y.1和data.full$x.1只取了第一列(第一个数据集),完全没用到剩下的99个数据集。
  • 缺少循环遍历逻辑:你没有写循环来逐个处理100个数据集,相当于只跑了一次单数据集测试,自然得不到100次模拟的统计结果。

二、修正后的完整代码

# 1. 定义真实模型的参数(3次多项式)
beta0 <- 1
beta1 <- 2
beta2 <- -1
beta3 <- 0.5
n_samples <- 100  # 每个数据集的样本量
n_sim <- 100      # 模拟总次数

# 2. 生成100个数据集的x和误差项(每行=样本,每列=一个数据集)
x_matrix <- replicate(n_sim, rnorm(n_samples))
epsilon_matrix <- replicate(n_sim, rnorm(n_samples))

# 3. 计算每个数据集的y(严格遵循3次多项式真实模型)
y_matrix <- beta0 + beta1 * x_matrix + beta2 * x_matrix^2 + beta3 * x_matrix^3 + epsilon_matrix

# 4. 初始化结果存储向量,记录每个指标选中的模型阶数
cp_selected <- integer(n_sim)
bic_selected <- integer(n_sim)
adjr2_selected <- integer(n_sim)

# 5. 循环遍历每个数据集,执行向后选择
for (i in 1:n_sim) {
  # 提取第i个数据集的x和y
  current_x <- x_matrix[, i]
  current_y <- y_matrix[, i]
  
  # 构建当前数据集的数据框
  data_i <- data.frame(y = current_y, x = current_x)
  
  # 向后选择:最多考虑10次多项式
  mod_bwd <- regsubsets(y ~ poly(x, 10, raw = TRUE), data = data_i, nvmax = 10, method = "backward")
  bwd_summary <- summary(mod_bwd)
  
  # 记录每个指标选中的阶数
  cp_selected[i] <- which.min(bwd_summary$cp)
  bic_selected[i] <- which.min(bwd_summary$bic)
  adjr2_selected[i] <- which.max(bwd_summary$adjr2)
}

# 6. 统计选中正确模型(3次多项式)的次数
cat("Cp选中3次多项式的次数:", sum(cp_selected == 3), "\n")
cat("BIC选中3次多项式的次数:", sum(bic_selected == 3), "\n")
cat("调整R²选中3次多项式的次数:", sum(adjr2_selected == 3), "\n")

三、代码改动说明

  • 参数补全:补上了真实模型的beta参数,确保生成的y严格符合3次多项式的设定。
  • 数据集结构优化:用矩阵统一存储所有模拟数据集,每列对应一个数据集,方便循环提取。
  • 循环逻辑添加:用for循环遍历100个数据集,逐个执行向后选择并记录结果。
  • 结果统计完善:最后统计三个指标选中真实阶数(3)的次数,这才是你需要的模拟结论。

四、之前结果不符合预期的原因

你之前的代码只处理了第一个数据集(y.1和x.1),得到的是单次测试的结果,而非100次模拟的统计值。再加上未定义beta参数,当时的Y计算本身就是错误的,所以得到的Cp选7次、BIC选4次等结果完全不具备参考性。

内容的提问来源于stack exchange,提问作者Shafa Haider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:11:48