2012-10-26 3 views
3

여러 변수에 대해 cox 회귀 모델을 실행해야하므로이를 실현하는 루프를 작성해야합니다. 하지만 어쨌든 작동하지 않습니다. 아래 내 코드는 내가여러 예측 변수에 대한 반복 Cox 회귀 모델

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

중 하나가 어떻게 코드를 작성하는 방법이 문제 또는를 해결하는 방법에 대한 아이디어를 가지고 같은 오류 정보를 가지고

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") 
}) 

사용됩니까?

답변

5

모델은 재미있는 방법으로 자신의 공식을 평가하기 때문에, 당신은 Is there a better alternative than string manipulation to programmatically build formulas? 보다는 substitute 같이 reformulate를 사용하여 수식 에 캐릭터를 생성하고 돌려 더 낫다. (이것은 통사 정확성에 대한 입력을 테스트하지만,이 경우는 반응 변수를 미치게 때문에 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

(나는 내 ​​코드에서 하나의 버그를 찾았습니다. 여전히 더 많은 정보를 제공해야합니다!) –