2016-07-08 7 views
1

適合モデルから値をブートストラップしようとしています(カーブの最大勾配)。私が考えているコードはもっと効率的だと思うが、一般的にはうまくいくと思うが(より効率的にする方法も歓迎されるだろう)私が持っている問題は、私が最終的なサンプル値を持っているときに最後にあります。Infがセルの1つにあり、信頼区間が得られません。私はこれがブートストラップの問題であるのか、それとも私がそれをコード化したのか単純なのかどうかはわかりません。サンプルコード:ブートストラップ信頼区間と最終推定値の "Inf" - boot/dplyrパッケージ

library(boot) 
library(dplyr) 
df <- data.frame (id=rep(1:10,each=10), 
         time1=rep(1:10,10), 
         ff=runif(100, 100, 150), 
         gg=runif(100, 120, 170)) 



    set.seed(10) 

#function 
    maxx<-function(formula, data,varr,indices) { 
     data <- data[indices,] # allows boot to select sample 
     fit <- lm(formula, data=data) 
     data$fit<-fit$fitted.values 
     data<-filter(data,time1>5) 
     data1<-data %>% group_by_(varr) %>% mutate(derivative = c(NA,diff(fit)/diff(time1))) %>% 
     group_by(id) %>% 
     slice(which.max(derivative)) %>% 
     ungroup() %>% 
     as.data.frame() 
     return(mean(data1$derivative,na.rm = TRUE)) 
    } 

res <- boot(data=df, statistic=maxx, 
        R=10, formula=ff~gg,varr="id") 

が、これは動作しますが、細胞の一つに起因するInfにSEを取得することはできません

R>res 

ORDINARY NONPARAMETRIC BOOTSTRAP 


Call: 
boot(data = df, statistic = maxx, R = 10, formula = ff ~ gg, 
    varr = "id") 


Bootstrap Statistics : 
    original bias std. error 
t1* 0.1726803  Inf   NaN 
     res 
     res$t 

我々は、さらにそれを探索することで、これを見ることができます:たぶん

R>res$t 
      [,1] 
[1,] 0.50399242 
[2,] 0.52171509 
[3,] 0.04568459 
[4,] 1.41317481 
[5,] 0.39741115 
[6,] 0.10703703 
[7,] 0.52206909 
[8,] 0.91624253 
[9,]  Inf 
[10,] 0.05076168 


R>boot.ci(res, type="normal") 
Error in ci.out[[4L]] : subscript out of bounds 

をI何かを逃したが、return(mean(data1$derivative,na.rm = TRUE))NAの問題を解決すると思った。誰にも何か提案はありますか?私はこれが小さな修正だと推測しています。ブートストラップを実行しているのはこれが初めてのことです。提示された単純なモデルではなく、大きなランダム効果モデルを実行しているときに、コード全体をより効率的にする方法が分かっていれば、おかげ

答えて

1

交換とbootリサンプリングは、あなたが与えられた試料内の指定されたIDため時間1の値を繰り返されるかもしれませんので。この場合、微分計算diff(fit)/diff(time)は0/0と評価され、NaNが返されます。 maxx関数のNaN値は本質的に問題ではないはずですが(私はあなたがしようとしていることについては完全にはっきりしていませんが)浮動小数点の不正確さのためdiff(fit)が時々割ってゼロ以外の値を返しますInfまたは-Infを生成するためにゼロを返します。 which.maxmean関数はInfを無視しないため、maxx関数はInfを返します。

関連する問題