在引导期间观察长度不均匀

时间:2014-09-18 10:33:32

标签: r statistics-bootstrap

作为R的相对初学者,我遇到了困难。我的目标是引导各个变异系数并将其打印到新的数据帧以进行进一步的计算和分析,例如,根据数据中自身的变化为每个人提供1000个自举CV。这是我在遇到问题之前得到的距离,但是我没有解决。我试图在网上找到一个解决方案,包括在这里搜索,但我没有找到或理解我找到了解决方案,即使它很可能在某处。如果是这样,请指出我朝这个方向发展。

我有一个数据集,对几个人进行了重复观察,但它们的观察长度不同于下面的数据

Subject.id  Moderate
    1   943
    1   1132
    1   347
    1   1100
    1   1265
    2   1297
    2   888
    2   1005
    2   1211
    2   1338
    2   1238
    2   916
    2   541
    2   613
    2   692
    2   1538
    2   1071
    3   670
    3   864
    3   1189
    3   320

我正在尝试使用启动包来引导个别变异系数。我的启动功能如下所示:

    boot.f<-function(d, i){
  d2 <- d[i,]
  return(sqrt(var(d2$moderate))/mean(d2$moderate))
}

它运行得非常好:

boot1<-boot(df, boot.f, 1000)

然而,当我尝试使用这样的分层论证时:

boot1<-boot(df, boot.f, 1000, strata=subject.id)

我收到以下错误消息:

  

tapply错误(seq_len(n),as.numeric(strata)):参数必须   具有相同的长度另外:警告消息:在tapply(seq_len(n),   as.numeric(strata)):强制引入的NA

所以我的问题是我如何调整我的功能,以便我可以保留内部主题信息,最后得到一个输出看起来像我使用summaryBy函数,时间一千?     summaryBy(moderate~臣_id,data = df,FUN = CV)

   subject.id             moderate.CV
1        2001             0.3831299
2        2002             0.4972260
3        2003             0.5095434
4        2004             0.2730478
5        2005             0.3645640
6        2006             0.3727822
7        2007             0.3858968
8        2008             0.5833114
9        2009             0.5896946
10       2013             0.4247119
11       2014             0.3016552
12       2015             0.4670444
13       2016             0.3995908
14       2018             0.3908963
15       2019             0.3660683
16       2020             0.3373719
17       2022             0.5020418
18       2023             0.3848056
19       2024             0.6410266
20       2025             0.7070671
21       2026             0.3925212
22       2028             0.1879174
23       2029             0.2912984
24       2030             0.3534441
25       2031             0.2238960
26       2032             0.7491192
27       2033             0.5775261

1 个答案:

答案 0 :(得分:1)

运行以下内容时没有问题:

library(boot)
df<-read.table(path.to.your.data)
boot.f<-function(d, i){
  d2 <- d[i,]
  return(sqrt(var(d2$moderate))/mean(d2$moderate))
}
boot(df, boot.f, 1000)
boot(df, boot.f, 1000, strata=df$subject.id)

变量名称(因为您在大写和小写字母之间切换):

   head(df,3)
      subject.id moderate
    1          1      943
    2          1     1132
    3          1      347