如何使用survival :: survreg(带有删失数据的区间回归)回归潜在的时间间隔?

时间:2017-12-09 05:19:20

标签: r regression intervals survival-analysis

我尝试在R中进行区间回归,其中包含依赖值的删失数据为 y 或包含 z ] >ÿ。

在搜索之后,我找到了一些推荐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()并假设它被审查,我正在创建&#34;生存对象&#34;如下。

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()失败并显示错误:

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)

Surv()我为选项event=type=尝试了多个值,其中大多数都没有用,我对如何指定正确的设置感到困惑(即我不知道我错了或功能是什么,见下面的注释)。

注意: survreg()似乎在几个版本之前就有a bug,但现在应该解决(我不确定)。

有谁知道发生了什么以及如何解决这个问题?此外,目前我猜这似乎是在R中计算这种类型的区间回归的唯一有希望的方法,但也许有更好的选择。谢谢。

1 个答案:

答案 0 :(得分:0)

tiny comment on this question终于给了我解决方案。诀窍是设置type = "interval2",我们可以删除mode=选项。

(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 

与普通OLS相比,回归结果似乎是准确的:

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