2012-10-26 77 views
3

我需要爲幾個變量運行cox迴歸模型,所以我想寫一個循環來實現它。 但它不管用。 下面是用我的代碼多個預測變量的循環Cox迴歸模型

names(Gen) 
varlist <- names(hsb2)[8:11] ## get the variables i want to involve in loop 
models <- lapply(varlist, function(x) { 
    coxph(substitute(Surv(Time, Status) ~ i, list(i = as.name(x))), data = Gen, ties="efron") 
}) 

我得到了錯誤的信息,

errors in terms.default(formula, special, data = data) : 
    no terms component nor attribute 

任何一個對如何解決這個問題,或者如何編寫代碼的想法?

回答

5

由於車型有趣的方式評估自己的公式,你最好創建一個字符串,並把它變成使用reformulate公式Is there a better alternative than string manipulation to programmatically build formulas?而非substitute。 (reformulate通常是優選的,因爲它會檢測語法正確性的輸入,但在這種情況下,它軋液機的響應變量。)

創建此臨時功能:

tmpfun <- function(x) as.formula(paste("Surv(Time,Status)",x,sep="~")) 

的功能提供給lapply主體可能是:

coxph(tmpfun(x), data = Gen, ties="efron") 

(你沒有提供一個可重複的例子,但我認爲應該工作...)

對於額外的(但完全不必要的)冷靜,您可以嘗試用兩個單獨的lapply調用替換整個lapply調用,一個用於從變量名稱列表中製作公式列表,另一個用於從公式列表。

formlist <- lapply(varlist,tmpfun) 
models <- lapply(formlist,data=Gen,ties="efron") 
+0

我仍然不能使用您提供的代碼... – user1778033

+1

恐怕我不知道(並且無法猜測,沒有更多信息)您的代碼是什麼問題。我承認我沒有測試過,但如果你給出了一個可重複的例子(http://tinyurl.com/reproducible-000),我可以爲自己測試我的答案。我需要更多的時間來構建一個可重複的例子,它可能不是你想要的,所以現在你的負擔就在你身上... –

+0

(我自己在代碼中發現了一個錯誤,但是你仍然需要提供更多信息!) –