Bir spline terimine dayanan zamana bağlı katsayıya sahip bir coxph
modelinde tahmin edilen tehlike oranını zamanın bir fonksiyonu olarak çizmek istiyorum.Coxph nesnesinden tahmini HR'yi zamana bağlı katsayı ve splinelarla çizme
# Fit a time transform model using current age
cox = coxph(Surv(time, status) ~ ph.ecog + tt(age), data=lung,
tt=function(x,t,...) pspline(x + t/365.25))
survfit
bir tt
dönem (as described in 2011 by Terry Therneau) olan modeller anlamıyor hatayla survfit(cox)
sonuçları çağrılması: Ben ?coxph
düz geliyor bu örneğe benzer işlevi tt
kullanılarak zamana bağlı katsayısı yarattı.
Doğrusal yordayıcıyı cox$linear.predictors
kullanarak ayıklayabilirsiniz, ancak bir şekilde yaşları ve daha az önemsiz, her biriyle gitmek için zamanları ayıklamak gerekir. tt
, veri kümesini olay zamanlarına böldüğünden, giriş verileri çerçevesinin sütunlarını coxph
çıktısıyla eşleştiremiyorum. Ek olarak, gerçekten gözlenen veri noktalarının tahminlerini, değil sadece gözlenen veri noktaları için tahmin etmek istiyorum.
Burada spline içeren a related question var, ancak tt
'u içermiyor.
Düzenleme (7/7)
Hala bu üzerinde şaşırıp.
spline.obj = pspline(lung$age)
str(spline.obj)
# something that looks very useful, but I am not sure what it is
# cbase appears to be the cardinal knots
attr(spline.obj, "printfun")
function (coef, var, var2, df, history, cbase = c(43.3, 47.6,
51.9, 56.2, 60.5, 64.8, 69.1, 73.4, 77.7, 82, 86.3, 90.6))
{
test1 <- coxph.wtest(var, coef)$test
xmat <- cbind(1, cbase)
xsig <- coxph.wtest(var, xmat)$solve
cmat <- coxph.wtest(t(xmat) %*% xsig, t(xsig))$solve[2, ]
linear <- sum(cmat * coef)
lvar1 <- c(cmat %*% var %*% cmat)
lvar2 <- c(cmat %*% var2 %*% cmat)
test2 <- linear^2/lvar1
cmat <- rbind(c(linear, sqrt(lvar1), sqrt(lvar2), test2,
1, 1 - pchisq(test2, 1)), c(NA, NA, NA, test1 - test2,
df - 1, 1 - pchisq(test1 - test2, max(0.5, df - 1))))
dimnames(cmat) <- list(c("linear", "nonlin"), NULL)
nn <- nrow(history$thetas)
if (length(nn))
theta <- history$thetas[nn, 1]
else theta <- history$theta
list(coef = cmat, history = paste("Theta=", format(theta)))
}
Yani, düğüm vardır, ama yine de aslında işlevi çizmek amacıyla knot ile coxph
katsayılarını nasıl birleştirileceğini emin değilim: Ben bu nesneye derinlemesine bakıyordum. Herhangi bir yol çok takdir etti.
Bildiğim kadarıyla akciğer veri kümesi her hasta için sadece tek bir satır vardır söyleyebilirim. Veri kümesini, 't'-vektörlü çok sayıda veri satırı olacak şekilde genişletmeniz gerekir. –
Öyleyse temelde 'tt' başlık altında ne yapıyor yeniden yaratmalıyım? Uzun vadeli veri kümesini döndürmenin bir yolu olduğuna inanmıyorum ... –
Ayrıca, eğer bunu yaparsam, gözlemlenen veri noktası için sadece tahminleri çizmekle kaldım, değil mi? –