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

R语言使用boot包执行线性回归时boot$t无返回值问题求助

R Bootstrap拟合线性回归返回空值问题解决方案

错误原因

  • 错误1:lm生成的回归对象没有$estimate属性,调用不存在的属性会返回空值,最终导致bout$t无数据。正确提取回归系数的方法是调用coef(lmout)或lmout$coefficients。
  • 错误2:自定义统计函数myfunc未使用传入的index参数,bootstrap的核心逻辑是每次按照index对原始数据集进行有放回重采样,跳过这一步会导致每次拟合都用全部原始数据,所有重采样结果完全相同。
  • 错误3:boot函数的data参数不接受公式输入,需要传入包含x、y的数据集对象。
  • 错误4:外层循环完全多余,boot函数的R参数本身就是指定bootstrap重采样的次数,每次循环都覆盖bout变量,最终只会保留最后一次运行的结果,不符合需求。

修正后代码

rm(list=ls())
# 构造数据框,保证x和y配对重采样
df <- data.frame(
  x = c(1,1.5,2,3,4,4.5,5,5.5,6,6.5,7,8,9,10,11,12,13,14,15),
  y = c(6.3,11.1,20,24,26.1,30,33.8,34.0,38.1,39.9,42,46.1,53.1,52,52.5,48,42.8,27.8,21.9)
)
library(boot)

myfunc <- function(data, index){
  # 按index重采样数据
  sample_data <- data[index, ]
  # 拟合回归
  lmout <- lm(y ~ x, data = sample_data)
  # 返回回归系数
  return(coef(lmout))
}

# 直接调用boot,R=10对应10次重采样,不需要循环
bout <- boot(data = df, statistic = myfunc, R = 10)
# 输出10次重采样的系数结果,第一列是截距,第二列是x的系数
print(bout$t)

补充说明

如果需求是10轮独立的bootstrap过程,每轮做10次重采样,只要把R参数改为对应值,或在循环里把每次的bout$t结果拼接存储即可,不要直接覆盖bout变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:05