2014-10-03 1 views
0

나는 내 변수의 일부 조합을 포함하는 벡터 a 있습니다. 가능한 가장 좋은 모델 (최소 BIC)을 얻으려면 glm 함수를 루프 할 수 있기를 바랬습니다.glm 테스트 다른 모델을 반복하는 방법

위해
glm(death ~ a, data=de.dat, family="binomial") 

행 :

de.dat <- data.frame(death=c(0,0,0,1,0), ac=c(1, 2, 2, 3, 2), fv=c(1,0,0,0,1), vs=c(0,0,0,0,0), v2=c(0,0,1,1,1), ms=c(0,0,0,0,0), yv=c(0,0,1,0,1)) 

vars <- c("ac", "fv", "vs", "v2", "ms", "yv") 
a <- apply(data.frame(t(combn(vars, 5))), 1, paste, collapse="+") 

모델은 a의 각 요소의 종속 변수 death 그리고 독립 변수로, 다음과 같이 표시한다 :

데이터는 다음과 같이 보인다 최고의 모델을 얻으려면 모든 모델의 BIC를 추출한 다음 BIC가 어떤 모델에 속하는지 식별 할 수 있어야합니다. 미리 감사드립니다.

+2

로지스틱 회귀에 대한 모델 선택을위한 또 다른 접근법은 L1 정규화를 사용하는 것입니다. 이것은 중요하지 않은 공변량의 계수를 0으로 줄입니다. 튜토리얼은 http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html –

+0

에 있습니다. 입력 해 주셔서 감사합니다. 나는 주말에 그것을 볼 것이다. 내 초기 시도는 조금 순진한 것 같아 ... – Thomas

답변

2

이 것이 도움이 될 것입니다. 그런 다음

a <- apply(cbind(paste(names(de.dat)[1],"~"),data.frame(t(combn(vars, 5)))), 1, paste, collapse="+") 

, 당신은 구성 목록을 만들 수 있습니다 lapply 기능을 사용 : 당신은 내 전체 식 (뿐만 아니라 오른쪽)와 문자 벡터를 생성해야

de.dat <- data.frame(death=c(0,0,0,1,0), ac=c(1, 2, 2, 3, 2), fv=c(1,0,0,0,1), vs=c(0,0,0,0,0), v2=c(0,0,1,1,1), ms=c(0,0,0,0,0), yv=c(0,0,1,0,1)) 
vars <- c("ac", "fv", "vs", "v2", "ms", "yv") 

: 다음은 데이터입니다 당신의 6 가지 모델 모두의 모델 :

models <- lapply(a,FUN = function(X) glm(X, data=de.dat, family="binomial")) 
관련 문제