使用R语言boot函数计算自助法均值报错的原因及解决方法
问题原因及解决方法
错误原因
boot() 函数对传入的statistic参数有特定要求:这个统计量函数必须接受两个参数——第一个是原始数据集,第二个是自助抽样生成的索引向量(用来提取抽样后的子集)。
你直接传入mean函数时,boot()会把抽样索引当作mean()的第二个参数(即trim参数)传递,但索引是多元素向量,不符合trim需要单个数值的要求,因此触发'trim' must be numeric of length one错误。
另外你的数据框创建也有问题:用<-给列赋值会在全局环境生成多余变量,且数据框的列名会变成混乱的表达式字符串,应该用=来定义列。
解决方法
- 修正数据框创建:
df <- data.frame( v1 = c(0,159028,236220,9127,0,0), v2 = c(13, 42, 56, 9, 77, 34) )
- 自定义符合要求的统计量函数:
你需要写一个接受data和indices两个参数的函数,用索引提取抽样数据后计算均值:
# 方式1:定义命名函数 my_mean <- function(data, indices) { mean(data[indices]) } # 调用boot函数 boot_result <- boot(df$v1, statistic = my_mean, R = 100) # 方式2:用匿名函数更简洁 boot_result <- boot(df$v1, statistic = function(d, i) mean(d[i]), R = 100)
- 查看结果:
运行print(boot_result)或plot(boot_result)即可查看自助法的结果。
内容的提问来源于stack exchange,提问作者ML Zufelt
相关产品推荐
相关产品推荐

