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

R语言参数函数迭代异常:无法生成50组MSE值求助

迭代失效问题排查与修正

你的代码能运行但无法生成50组MSE值,核心问题是未在循环中收集每次迭代的结果,仅保留了最后一次循环的MSE,同时还有几处细节错误,以下是问题分析和修正方案:

核心问题与细节错误

  • 迭代结果未收集:循环内每次计算的MSE都会被下一次循环覆盖,最终仅返回最后一次的结果
  • 噪声参数错误:rnorm的sd参数需要传入标准差,你写的sig^2是方差,会导致噪声强度异常
  • 真实系数匹配错误:生成数据的模型是yi=1+3*x1i-1.5*x2i*x3i+ei,但你回归的是yi~x1i+x2i+x3i,真实的x2i、x3i单独项系数应为0,而非你设置的-1.5和2
  • 变量作用域问题:函数外的write.table无法访问函数内部的MSE变量

修正后的代码

arguments <- function(r, n, sig) {
  # 初始化空数据框,用于存储所有迭代的MSE结果
  all_mse <- data.frame(MSE0 = numeric(), MSE1 = numeric(), MSE2 = numeric(), MSE3 = numeric())
  
  for (i in 1:r) {  
    # 生成自变量与噪声
    x1i <- runif(n)
    x2i <- runif(n)
    x3i <- runif(n)
    # 修正:sd传入标准差sig,而非方差sig^2
    ei <- rnorm(n, mean = 0, sd = sig)
    # 按给定模型生成因变量
    yi <- 1 + 3*x1i - 1.5*x2i*x3i + ei 
    
    data <- data.frame(x1i, x2i, x3i, yi)
    
    # 执行回归并提取系数
    regression <- lm(yi ~ x1i + x2i + x3i, data = data)
    my_estimates <- regression$coefficients
    
    # 匹配回归模型的真实系数:无单独x2i、x3i项,对应系数为0
    coefficients <- c(1, 3, 0, 0)
    names(coefficients) <- names(my_estimates)
    
    # 计算当前迭代的MSE
    MSE <- (my_estimates - coefficients)^2
    names(MSE) <- c('MSE0', 'MSE1', 'MSE2', 'MSE3')
    
    # 将当前MSE添加到结果集
    all_mse <- rbind(all_mse, as.data.frame(t(MSE)))
  }
  
  return(all_mse)
}

# 运行函数生成50组MSE
mse_results <- arguments(50, 50, 4)

# 保存结果到文件(保留列名方便查看)
write.table(mse_results, file="MSE.txt", sep=" ", row.names = FALSE, col.names = TRUE, quote=FALSE)

修正说明

  1. 结果收集:通过初始化all_mse数据框,每次循环将当前MSE转置为行并添加到结果集中,最终返回所有迭代的MSE
  2. 噪声参数修正:将rnorm的sd参数改为sig,符合标准差的参数要求
  3. 真实系数修正:根据生成数据的模型,匹配回归模型的真实系数,确保MSE计算准确
  4. 作用域修正:将函数返回的结果赋值给mse_results,再执行保存操作,避免变量访问问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:15:28