Как исправить "закончились итерации и не сходятся или больше коэффициенты могут быть бесконечными" в функции coxph? - PullRequest
1 голос
/ 18 июня 2019

Я хочу написать код для расчета степени опасности, используя coxph для набора данных.Эти данные имеют 5 переменных, 2 из них используются в Surv (), а две из них используются в качестве ковариат.Теперь я могу написать функцию, которая может просто рассчитать уровень опасности для двух ковариат после входного имени.Тем не менее, когда я хочу вычислить коэффициент опасности, используя одну и ту же функцию для 3 ковариат, программа сказала: «закончились итерации и не сходятся или больше коэффициентов может быть бесконечным», и результат содержит все пять переменных в качестве ковариат (которых должно быть три),Вот мой код, кто-нибудь может его исправить?Спасибо!

library(KMsurv)
library(survival)
data(larynx)
larynx2 = larynx[,c(2,5,1,3,4)]
larynx2$stage = as.factor(larynx2$stage)
mod = function(dataname){
    fit = coxph(Surv(dataname[,1],dataname[,2]) ~ ., data = dataname, ties = "breslow")
    return(list(result = summary(fit)))
}
mod(larynx2)

1 Ответ

1 голос
/ 18 июня 2019

Как насчет этого? Поскольку имена столбцов в формуле работают, мы строим формулу динамически, используя имена столбцов:

mod = function(dataname) {
    form = as.formula(sprintf("Surv(%s, %s) ~ .", names(dataname)[1], names(dataname)[2]))
    fit = coxph(form, data = dataname, ties = "breslow")
    return(list(result = summary(fit)))
}

mod(larynx2)
# $result
# Call:
# coxph(formula = form, data = dataname, ties = "breslow")
# 
#   n= 90, number of events= 50 
# 
#            coef exp(coef) se(coef)      z Pr(>|z|)    
# stage2  0.15078   1.16275  0.46459  0.325   0.7455    
# stage3  0.64090   1.89820  0.35616  1.799   0.0719 .  
# stage4  1.72100   5.59012  0.43660  3.942 8.09e-05 ***
# age     0.01855   1.01872  0.01432  1.295   0.1954    
# diagyr -0.01923   0.98096  0.07655 -0.251   0.8017    
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
#        exp(coef) exp(-coef) lower .95 upper .95
# stage2     1.163     0.8600    0.4678     2.890
# stage3     1.898     0.5268    0.9444     3.815
# stage4     5.590     0.1789    2.3757    13.154
# age        1.019     0.9816    0.9905     1.048
# diagyr     0.981     1.0194    0.8443     1.140
# 
# Concordance= 0.676  (se = 0.039 )
# Rsquare= 0.182   (max possible= 0.988 )
# Likelihood ratio test= 18.13  on 5 df,   p=0.003
# Wald test            = 20.87  on 5 df,   p=9e-04
# Score (logrank) test = 24.4  on 5 df,   p=2e-04
...