2016-07-08 4 views
1

적합 모델에서 값을 부트 스트랩하려고합니다 (최대 곡선 기울기). 생각보다 효율적 일 수 있다고 생각하지만, 일반적으로 효과가 있다고 생각합니다 (효율성을 높이는 방법에 대한 제안도 환영 할 것입니다). 내가 가지고있는 문제는 최종 샘플 값이있을 때입니다. Inf은 신뢰 구간을 얻지 못하게하는 셀 중 하나에 있습니다. 이것이 부트 스트랩 문제인지 아니면 코드화 된 방식인지 간단하지 않습니다. 샘플 코드 :최종 예상치에서 "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이 반환됩니다. NaN 값은 나머지 maxx 함수에 대해 본질적으로 문제가되어서는 안됩니다 (하지만 내가하려는 일에 대해서는 명확하지 않습니다). 부동 소수점 부정확으로 인해 diff(fit)이 0이 아닌 값을 반환하는 경우가 있습니다. Inf 또는 -Inf를 생성하기위한 제로. which.maxmean 함수는 Inf를 무시하지 않으므로 maxx 함수가 Inf를 반환하는 경우가 있습니다.