내 데이터의 하위 집합에서만 lm ()을 실행하려고하는데 문제가 발생합니다.
dt = data.table(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), x3 = as.factor(c(rep('men',50), rep('women',50)))) # sample data
lm( y ~ ., dt) # Use all x: Works
lm( y ~ ., dt[x3 == 'men']) # Use all x, limit to men: doesn't work (as expected)
데이터 세트에 남성 만 있기 때문에 위의 방법은 작동하지 않으므로 성별 변수 x3을 모델에 포함시킬 수 없습니다. 그러나...
lm( y ~ . -x3, dt[x3 == 'men']) # Exclude x3, limit to men: STILL doesn't work
lm( y ~ x1 + x2, dt[x3 == 'men']) # Exclude x3, with different notation: works great
이것은 수식에서 "빼기 기호"표기법에 문제가 있습니까? 조언을 부탁드립니다. 참고 : 물론 다른 방법으로 할 수 있습니다. 예를 들어, 변수를 lm ()에 넣기 전에 변수를 제외시킬 수 있습니다. 그러나 나는이 물건에 대해 수업을 가르치고 있으며, 학생들에게 혼동하고 싶지는 않습니다. 이미 학생들에게 수식에서 빼기 기호를 사용하여 변수를 제외 할 수 있다고 말했습니다.
나는이 "확장"을 시도했다
—
MrFlick
.
있는 간단한 공식을 얻을 수 terms(y ~ . -x3, data=dt, simplify=TRUE)
있지만, 이상하게도 여전히 유지 x3
까지 여행 변수 속성에lm
@MrFlick-구현되지 않은 R
—
thelatemail
neg.out=
옵션과 관련이있는 것 같습니다 . 의 S 도움말 파일에서 terms
어디 neg.out=
: 구현 "-"기호 입력하는 용어의 처리를 제어하는 플래그. 참이면 용어가 취소되었는지 확인하고 그렇지 않으면 무시합니다. FALSE이면 부정적인 용어가 유지됩니다 (음의 순서로).
@MauritsEvers : 수정 된 버전의 데이터를
—
Artem Sokolov
lm
호출 model.matrix
합니다. 맨 처음에 lm
다음 표현식을 작성하고 평가하십시오 mf <- stats::model.frame( y ~ . -x3, dt[x3=="men"], drop.unused.levels=TRUE )
. 이것은 x3
단일 레벨 요소가됩니다. model.matrix()
그런 다음 mf
원래 데이터가 아닌 에 호출되어 관찰중인 오류가 발생합니다.
model.matrix(y ~ . - x3, data = dt[x3 == "men"])
와model.matrix(y ~ x1 + x2, data = dt[x3 == "men"])
(작업lm
호출model.matrix
내부적으로). 두 모델 행렬의 유일한 차이점은"contrasts"
속성 (여전히 포함x3
)이며 나중에lm
루틴 내에서 선택되어 오류가 발생할 수 있습니다. 따라서 제 문제는model.matrix
용어를 제거 할 때 디자인 매트릭스를 작성하고 저장하는 방법과 관련이 있다는 것입니다 .