r 에서 여러개의 모델을 간단한 코딩으로 돌리고 싶어서 질문 드립니다.
예를들어서
변수가 "y1","y2","y3","var1","var2","var3"순서로 있는 데이터 테이블에서
y1=var1+var2+var3
y2=var1+var2+var3
y3=var1+var2+var3
이 세가지 모델을 for문을 이용해서
x=c(1:3)
for(i in 1:length(x)){
model_x[i] = glm(data[,x[i]] ~ var1+var2+var3 ,data =data, family = "binomial")
}
이렇게 해서 3가지모델을 한거번에 해보려고 했는데 for문으로 원래 안되는건지...방법이 잘못된건지 궁금해서 질문드립니다.
또, 설명변수 부분도 데이터 테이블상의 위치나 이런걸 이용해서 할수 있을까요?
Comment 5
-
cardiomoon
2017.01.23 00:21
-
chamchi
2017.01.23 00:54
모델은 그 세가지 모델입니다.
for문에 나오는 x 제가 잘못적은 부분이 있습니다...
x=("y1","y2","y3") 이렇게 3가지 모델의 각 반응변수의 이름을 지정하고
for문을 이용해서 i=1일때 x[1]으로 x에서 y1을 선택하고, 반응변수로 data 에서 y1변수를 선택해서 실행해서 model_y1저장하는 식으로 세번 반복하려고 합니다.
( x[1]=y1 이고, data[,x[1]] 은 data[,"y1"] 이되서 data에서 y1에 해당하는 열과 모든 행을 불러 올 수 있다고 생각했습니다.)
-
cardiomoon
2017.01.23 23:49
문자열을 language로 사용하실 수는 없습니다. 문자열을 language로 사용하시려면 문자열을 parsing하셔야 합니다. 다음을 참조하세요
> fit=lm(mpg~hp*wt,data=mtcars)
> fit
Call:
lm(formula = mpg ~ hp * wt, data = mtcars)
Coefficients:
(Intercept) hp wt hp:wt
49.80842 -0.12010 -8.21662 0.02785
> var<-"mpg"
> dataname="mtcars"
> temp<-paste0("lm(",var,"~hp*wt,data=",dataname,")")
> temp
[1] "lm(mpg~hp*wt,data=mtcars)"
> fit1=eval(parse(text=temp))
> fit1
Call:
lm(formula = mpg ~ hp * wt, data = mtcars)
Coefficients:
(Intercept) hp wt hp:wt
49.80842 -0.12010 -8.21662 0.02785
-
chamchi
2017.01.24 20:57
답변해 주셔서 정말 감사합니다.
알려주신 자료로 문제를 잘 해결 했습니다.
-
cardiomoon
2017.01.25 14:32
힌트를 조금 드렸는데 해결하셨다니 다행입니다^^
세가지 모델은
y1~var1+var2+var3
y2~var1+var2+var3
y3~var1+var2+var3
이런 모델을 말씀하시나요?
아래의 for문은 갑자기 x가 나오는데요