회귀의 질적 변수 코딩은 "단일성"으로 이어집니다


17

"quality"라는 독립 변수가 있습니다. 이 변수에는 3 가지 반응 방식 (나쁜 품질, 중간 품질, 고품질)이 있습니다. 이 독립 변수를 여러 선형 회귀 분석에 도입하고 싶습니다. 이진 독립 변수 (더미 변수, 코딩 가능 0/ 1)가 있으면 다중 선형 회귀 모델에 쉽게 도입 할 수 있습니다.

그러나 3 가지 양식의 응답 으로이 변수를 다음과 같이 코딩하려고했습니다.

Bad quality      Medium quality      High quality

     0                1                  0
     1                0                  0
     0                0                  1
     0                1                  0

모달가 :하지만 난 내 다중 선형 회귀 분석을 수행하려고 할 문제가 Medium quality나에게주는이 NA:

Coefficients: (1 not defined because of singularities) 

이 변수 "품질"을 3 가지 양식으로 어떻게 코딩 할 수 있습니까? 변수를 인수 ( factorin R) 로 작성해야 하지만이 선형 계수를 여러 선형 회귀 분석에 도입 할 수 있습니까?


2
아마도 나는 그 질문을 오해하고 있지만, 완전한 공선 성으로 인해 모든 수준의 범주 형 변수를 선형 회귀에 포함시킬 수는 없습니다. 다른 그룹과 비교할 기본 그룹을 제공하기 위해 카테고리 중 하나가 삭제됩니다.
RickyB

1
여기에 특이 행렬을 구성하는 것에 대한 통계적 맥락에서 뛰어난 설명이 있습니다. 무엇 상관 관계가
gung-모니 티 복원

답변:


23

당신이 겪고있는 문제 (즉, "단일성")는 다중 공선 성의 사례로 생각할 수 있습니다 . 다중 공선 성은 종종 다음과 같이 정의됩니다.

하나 이상의 예측 변수는 다른 예측 변수의 선형 조합입니다.

사실 이것은 다소 엄격한 정의입니다. 그것은 완벽한 다중 공선 성이며, 변수가 다른 것의 완벽한 선형 조합 이 아니더라도 다중 공선성에 쉽게 문제가 발생할 수 있습니다 . 또한 완벽한 다중 공선 성이 거의 발생하지 않습니다. 그러나 사건이 발생할 수있는 상황을 우연히 발견했습니다. 우리는 우리가 할 수있는 방법을 참조하자 완벽하게 예측 medium quality다른 두 종류의 우리의 지식 (우리는 회귀 모델이 작업을 수행 할 것 medium quality입니다 , 및 & 있는 X 1X 2 , 각각) : Y = β 0 + β 1와이bad qualityhigh quality엑스1엑스2

와이=β0+β1엑스1+β2엑스2
이 오류를완벽하게 예측할 수 있기 때문에오류 항ε 이 지정되지 않았습니다. 이를 위해, 우리는 설정β0=1 ,β1=1 , 및β2=1 . 이제, 당신이있을 때bad quality, 다음X1=1 , 상쇄하는β0 (1+1×1 ),엑스2=0 이므로 항도 소거됩니다 (1×0 ). 따라서 우리는 Y ()에대해예측 값이 으로 남습니다. 정확하게 맞습니다. 다른 가능성을 해결하기 위해 당신에게 맡길 것입니다 (귀하의 경우 항상 작동합니다). 0와이medium quality

그럼 어떻게해야합니까? 범주 형 변수를 나타낼 때는 일반적으로 참조 셀 코딩 ( '더미 코딩'이라고 함)을 사용합니다. 이를 위해 범주 형 변수의 한 수준을 참조 수준으로 선택합니다. 해당 레벨은 자체 더미 코드를 얻지 않지만 다른 모든 레벨의 더미 코드에 모두 표시하여 표시됩니다 . 범주 형 변수의 다른 수준은 이미 수행 한 것처럼 더미 코드로 표시됩니다. (이에 대한 자세한 내용은 내 대답을 볼 수 있습니다 : 예를 들어 요일 기준 회귀 ). 를 사용하는 경우 a 및0RfactorR 이 모든 것이 당신을 위해 할 것입니다-그것은 올바르게 이루어지고 훨씬 편리합니다. 그럼에도 불구하고 이것이 '장면 뒤'에서 일어나고 있다는 것을 이해할 가치가 있습니다.


모든 의견 주셔서 감사합니다! 나는 R을 사용하고 있으므로 잘 이해하면 R이 모든 것을 할 것이므로 아무것도 할 필요가 없습니다! 완벽 해! 탱크 다시 한번!
varin sacha

lm수식 ( + 0) 에서 절편을 0으로 설정하면 작동합니까?
Firebug

1
@Firebug, 레벨 수단 코딩을 사용하는 경우 (즉, 모든 레벨에 대해 별도의 변수가있는 경우) 인터셉트를 0으로 설정하면 제대로 작동합니다. 가변 계수 및 가설 검정의 의미는 다르지만
gung-Monica Monica 복원

10

@ 궁은 이론을 명확하게 설명했다. 다음은 실례를 보여주는 예입니다.

set.seed(1)
pred1 <- factor(c("bad", "med", "high"), levels=c("bad", "med", "high"))
df1 <- data.frame(y=20*abs(runif(6)),
                  x=rnorm(6),
                  q=sample(pred1, 6, replace=TRUE)
                  )
l1 <- lm(y ~ x, data=df1)
### add variable q    
l2 <- lm(y ~ x + q, data=df1)
### look at dummy variables generated in creating model
model.matrix(l2)

0bad

  (Intercept)          x qmed qhigh
1           1  1.5952808    1     0
2           1  0.3295078    0     1
3           1 -0.8204684    0     1
4           1  0.4874291    0     0
5           1  0.7383247    1     0
6           1  0.5757814    0     0

이제 더미 변수를 직접 코딩하고 모든 변수를 사용하여 모델을 맞추려고 시도합니다.

df1 <- within(df1, {
       qbad <- ifelse(q=="bad", 1, 0)
       qmed <- ifelse(q=="med", 1, 0)
       qhigh <- ifelse(q=="high", 1, 0)
       })    
lm(y ~ x + qbad + qmed + qhigh, data=df1, singular.ok=FALSE)

예상되는 오류가 발생합니다. singular fit encountered


1
낙. 모두 명확 해지기를 바랍니다. factor일반적으로 더미 변수 코딩을 처리하지만 '언더 후드'에서 무슨 일이 일어나고 있는지 알고있는 것이 좋습니다.
dardisco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.