2012-05-12 4 views
1

수식에 상호 작용을 가지고 놀고 있습니다. 두 가지 더미 변수 중 하나에 대해 상호 작용을 통해 회귀를 할 수 있는지 궁금합니다. 이 함수는 lm() 함수를 사용하는 일반 선형 회귀에서 작동하지만 rms 패키지에서 ols() 함수를 사용하면 같은 수식이 실패합니다. 왜 그런지 알아?rms-package에서 상호 작용이있는 선형 회귀가 실패합니다.

은 여기 내 예를

data(mtcars) 

mtcars$gear <- factor(mtcars$gear) 
regular_lm <- lm(mpg ~ wt + cyl + gear + cyl:gear, data=mtcars) 
summary(regular_lm) 

regular_lm <- lm(mpg ~ wt + cyl + gear + cyl:I(gear == "4"), data=mtcars) 
summary(regular_lm) 

그리고 지금 실효 예입니다

library(rms) 

dd <- datadist(mtcars) 
options(datadist = "dd") 

regular_ols <- ols(mpg ~ wt + cyl + gear + cyl:gear, data=mtcars) 
regular_ols 

# Fails with: 
#  Error in if (!length(fname) || !any(fname == zname)) { : 
#   missing value where TRUE/FALSE needed 
regular_ols <- ols(mpg ~ wt + cyl + gear + cyl:I(gear == "4"), data=mtcars) 

는 추정이 크게 변화하지만 난 것으로 보인다으로이 실험은 할 수있는 현명한 통계하지 않을 수도 있습니다 ols()가 "작품에 사용 된 것과 동일한 피팅 루틴"을 수행해야하는 이유 때문에 약간 궁금하다.

답변

2

나는 exac 그러나 모델이 변환되면 적합성이 수행되는 방식보다는 공식이 평가되는 방식과 관련이 있습니다. traceback()을 사용하면 Design(eval.parent(m)) 내에 문제가 발생 함을 알 수 있습니다. options(error=recover)을 사용하면 즉

Browse[1]> fname 
[1] "wt" "cyl" "gear" 
Browse[1]> zname 
[1] NA 

znameDesign 기능이 매우 실린더 사이의 상호 작용을 정의 처리 할 수없는 권리 때문에 설정되어 있지 않은 일부 내부 변수를 것을 볼 수있는 지점에 당신을 얻는다 비행 (기어 == 4) 더미.

하지만 이것은 작동합니다

mtcars$cylgr <- with(mtcars,interaction(cyl,gear == "4")) 
regular_ols <- ols(mpg ~ wt + cyl + gear + cylgr, data=mtcars) 
+0

감사합니다. 상호 작용 변수를 만드는 것에 대해 생각해 봤지만 예측/대비 함수와 상호 작용한다는 점에 조금 겁 먹었습니다. –

관련 문제