2017-12-09 19 views
0

I 종속 값을 포함 검열 데이터 중 다수 Y 또는 간격으로 [0, Z는 ]Y를 함유하는 R의 간격 회귀를 시도하고있다.생존과 함께 잠복기를 회귀시키는 법 :: 생존 (간헐적 인 회귀와 검열 된 자료)?

검색 후 정확히 같은 문제를 다루지는 않지만 survival::survreg (예 : here)을 추천하는 몇 가지 출처를 발견했습니다. 그러나, 나는 그것이 내 데이터로 작동하도록 할 수 없으며 나는 특별한 경우가 있다고 가정한다.

나는 MWE를 줄 것이다. 우선 일부 데이터와 상기 잠상 간격을 작성 ​​:

# data 
set.seed(417699) 
df <- data.frame(ind = rbinom(10, 1, .75)) 
df <- transform(df, 
       value = ifelse(df$ind == 1, sample(1:1000), NA), 
       value1 = ifelse(df$ind == 0, sample(10:100) * 10, 0), 
       cv1 = rbinom(10, 2, .7) # 1st independent var. 
       cv2 = rbinom(10, 2, .25) # 2nd indep. var. 
       ) 

# intervals depending if 'ind' equals 0 
df$liv <- with(df, ifelse(ind == 1, value, 0)) 
df$uiv <- with(df, ifelse(ind == 0, value1, value)) 
df 

## ind value value1 cv1 liv uiv cv2 
## 1 1 616  1 2 616 616 0 
## 2 0 NA 450 2 0 450 0 
## 3 1 236  1 2 236 236 0 
## 4 1 130  1 1 130 130 1 
## 5 0 NA 350 1 0 350 1 
## 6 0 NA 250 2 0 250 0 
## 7 1 241  1 1 241 241 0 
## 8 1 950  1 2 950 950 1 
## 9 1 557  1 2 557 557 1 
## 10 1 453  1 2 453 453 1 

하나에서 볼 수 있듯이, 지금에 따라 간격 또는 포인트가 있는지 IND 1 또는 구체적으로 0, IND = 0 인 경우 값은 해당 간격의 어딘가에 있습니다.

이제 survival::Surv()으로, 그리고 그것이 검열 된 상태라고 가정하면 다음과 같이 "생존 개체"를 만듭니다.

library(survival) 
(Y <- with(df, Surv(liv, uiv, event = rep(2, nrow(df)), type = "interval"))) 
## [1] [837, 837] [ 0, 340] [694, 694] [ 74, 74] [ 0, 280] [ 0, 640] [177, 177] 
## [8] [650, 650] [368, 368] [179, 179] 

summary(Y) 
##  time1   time2   status 
## Min. : 0.0 Min. : 74.0 Min. :3 
## 1st Qu.: 18.5 1st Qu.:204.2 1st Qu.:3 
## Median :178.0 Median :354.0 Median :3 
## Mean :297.9 Mean :423.9 Mean :3 
## 3rd Qu.:579.5 3rd Qu.:647.5 3rd Qu.:3 
## Max. :837.0 Max. :837.0 Max. :3  

모든 미세하지만 마지막에 survreg() 오류와 함께 실패 Surv()에서 나는 옵션 event=type=에 대한 여러 값을 시도

survreg(Y ~ cv1 + cv2, data = df, dist = "gaussian") 
## Error in coxph.wtest(t(x) %*% (wt * x), c((wt * eta + weights * deriv$dg) %*% : 
## NA/NaN/Inf in foreign function call (arg 3) 

, 그들의 대부분은 작동하지 않았다 내가 ' 올바른 설정을 지정하는 방법이 혼란 스럽습니다 (즉, 내가 잘못했는지 또는 기능이 있는지 모르는 경우, 다음 참고 사항 참조).

참고 : survreg() 보인다 몇 버전 전에 a bug 있었다하기 만하는 지금 (내가 확실히 모르는) 해결해야한다.

누가 무슨 일이 벌어지고이 문제를 해결할 수 있는지 알고 있습니까? 또한,이 순간에 R에서 그런 종류의 간격 회귀를 계산하는 유일한 유망한 방법 인 것 같지만 더 나은 옵션이있을 수 있습니다. 고맙습니다.

답변

0

tiny comment on this question 마침내 해결책을 가져 왔습니다. 트릭은 type = "interval2"으로 설정하고 mode= 옵션을 삭제할 수 있습니다. 정상 OLS에 비해

(Y <- with(df, Surv(liv, uiv, type = "interval2"))) 
## [1] 616  [ 0, 450] 236  130  [ 0, 350] [ 0, 250] 241 
## [8] 950  557  453 

summary(Y) 
##  time1   time2   status 
## Min. : 0.0 Min. : 1.0 Min. :1.0 
## 1st Qu.: 32.5 1st Qu.: 1.0 1st Qu.:1.0 
## Median :238.5 Median : 1.0 Median :1.0 
## Mean :318.3 Mean :105.7 Mean :1.6 
## 3rd Qu.:531.0 3rd Qu.:187.8 3rd Qu.:2.5 
## Max. :950.0 Max. :450.0 Max. :3.0 

coef(intreg <- survreg(Y ~ cv1 + cv2, data = df, dist = "gaussian")) 
## (Intercept)   cv1   cv2 
## -282.0126 326.4428 216.9370 

은 회귀 분석 결과가 정확 같다 :

coef(reg <- lm(value ~ cv1 + cv2, data = df)) 
## (Intercept)   cv1   cv2 
## -242.5294 364.1176 127.8235