我有以下矩阵(我们称之为df),由于加权分布很大,我想为每个列创建自举均值和95%置信区间。我希望将均值和CI作为新行添加到矩阵的底部。这是数据的一小部分,真实数据有> 600行,这将使自举更加有效。
row.names V183 V184 V185 V186 V187 V188 V189 V190 V191 V192 V193 V194 V195 V196 V197 V198 V199 V200 V201 V202 V203 V204 V205
1 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 NA NA
2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0.022 0 NA NA NA NA NA NA
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308 0.07692308
5 0 0 0 0 0.066 0.066 0.066 0.066 0.066 0.066 0.066 0.066 0.066 0.066 0 0 0 0 0 0 0 0 0
6 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0.077 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA
10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11 NA NA NA NA NA NA NA NA NA NA NA NA 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806 0.03225806
12 0 0 0 0 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA
13 0 0 0 0 0 0 0 0 0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
14 0 0 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0.033 0 0 0 0 0 0
我已成功为单个列创建自举值,但尚未成功创建一个for()循环,该循环将填充矩阵的整行自举值
以下是我的单行代码。
dfsub<-df[,1]
mean.boot <- function(dfsub, d) {
E=dfsub[d,]
return(mean(E, na.rm=T))}
b = boot(dfsub, mean.boot, R=1000)
b
有什么想法? for循环或应用fn会更好吗?
此外,引导值的输出给出了原始值和偏差,但是实际引导的平均值在哪里?
答案 0 :(得分:2)
这是一个有点令人困惑的问题,因为我不确定你是按行还是按列引导,还有一些代码不起作用,特别是E=dfsubd,]
。但是如果你想为每一列提供自举方法,那么一个简单的apply
应该可以正常工作,如下所示:
> myMeanFun <- function(d, i) {
d2 <- d[i]
return(mean(d2, na.rm=T))
}
> myBootFun <- function(d) {
boot(d, myMeanFun, R = 1000)
}
> lapply(df[,-1], function(x) myBootFun(x) )
$V183
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = d, statistic = myMeanFun, R = 1000)
Bootstrap Statistics :
original bias std. error
t1* 0.0186044 0.0004565272 0.008418108
$V184
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = d, statistic = myMeanFun, R = 1000)
Bootstrap Statistics :
original bias std. error
t1* 0.0186044 3.504457e-05 0.008293219
你可以使用这样的东西来访问特定的统计数据(这里是自助平均值):
> sapply(df[,-1], function(x) myBootFun(x)$t0 )
V183 V184 V185 V186 V187 V188 V189
0.01860440 0.01860440 0.02114286 0.02114286 0.02621978 0.02621978 0.02621978
V190 V191 V192 V193 V194 V195 V196
0.02621978 0.02664243 0.02886264 0.02886264 0.02291026 0.02362932 0.02559843
V197 V198 V199 V200 V201 V202 V203
0.02009843 0.02650869 0.02467535 0.02631042 0.02631042 0.01861042 0.01861042
V204 V205
0.01213124 0.01213124
另请参阅boot.ci
函数的置信区间,此外指南可能对您有用: