2013-06-24 39 views
0

我正在使用軟件包coxme,並且我想從模型中提取AIC,以便選擇最好的一個。從coxme物體(R)提取AIC

1)我沒有找到如何直接做到這一點,我認爲這是不可能的,沒有改變函數coxme()的代碼,但我會很高興做錯了,讓我知道如果我是!

2)我看着功能與命令代碼:

coxme:::print.coxme 

爲了增加一個變量來庫存AIC,看到代碼,但如果我把它叫做「coxme2」爲例(我只加coxme2 < - 在開始時),並嘗試使用它(無任何其他附加),我得到一個錯誤:

錯誤colnames<-*tmp*,值= C( 「NULL」, 「綜合」, 「合身」 : 'dimnames'[2]的長度不等於數組範圍

概括起來,在coxme功能效果很好,但如果我探微複製和粘貼其代碼,它沒有。我該如何解決這個問題?

回答

2

的AIC可通過

extractAIC.coxme <- function(x){ 
    loglik <- x$loglik + c(0, 0, x$penalty) 
    chi1 <- 2*diff(loglik[1:2]) 
    chi2 <- 2*diff(loglik[c(1,3)]) 
    c(chi1 - 2*x$df[1], chi2 - 2*x$df[2]) 
} 

fit <- coxme(Surv(time, status) ~ age + sex + (1|ph.ecog), lung) 
extractAIC(fit) 

提取見print.coxme功能https://github.com/cran/coxme/blob/master/R/print.coxme.R

1

你試過getAnywhere(print.coxme)?它爲您提供了所有必要的代碼R.

複製和修改功能

編輯

只要寫

copyOfAIC <<- temp 

低於

dimnames(temp) <- list(c("Integrated loglik", " Penalized loglik"), 
          c("Chisq", "df", "p", "AIC", "BIC")) 

,你會得到一個您正在尋找的值的副本

+0

THX你的答案,但我認爲這個代碼是不太相關的是,一個我曾與print.coxme。或者,也許我不太瞭解它,但我不知道如何解決我的問題... – Vincent

+0

其實,這是完整的代碼,它允許您修改該功能。有了它,你可以創建一個新的函數'coxme2',但是這個函數你不會有任何錯誤,因爲它不使用隱藏的函數和對象來自coxme包 – eyanquenb

+0

對不起,我編輯了我的答案以便指出你的函數在哪裏尋找。但事實上,原則是一樣的 – eyanquenb