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


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 1 및 X 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.