GLM에서 더미 (수동 또는 자동) 변수 생성 이해


13

요인 변수 (예 : M 및 F 수준의 성별)가 glm 공식에 사용되는 경우 더미 변수가 생성되며 관련 계수 (예 : genderM)와 함께 glm 모델 요약에서 찾을 수 있습니다

이러한 방식으로 인수를 분할하기 위해 R을 사용하는 대신 일련의 숫자 0/1 변수 (예 : genderM (M의 경우 1, F의 경우 F), genderF (1의 경우 F, 0의 경우) M) 그리고이 변수들은 glm 공식에서 숫자 변수로 사용됩니다. 계수 결과가 다를까요?

기본적으로 문제는 R이 요인 변수와 숫자 변수를 다룰 때 다른 계수 계산을 사용합니까?

후속 질문 (위에서 대답 할 수 있음) : R이 더미 변수를 만들 수있게하는 효율성 외에도 일련의 숫자 0.1 변수로 계수를 다시 코딩하고 모델의 변수를 대신 사용하는 데 문제가 있습니까?


2
계수는 동일합니다. 요인에 대한 R의 기본 코딩은 정확히 설명 된대로입니다 ( "더미"코딩이라고 함). 이 작업을 수동으로 수행하는 경우 "더미 변수 트랩"을 알고 있어야합니다. 생성 된 변수를 모두 포함 할 수는 없지만 만 포함 할 수 있습니다 (대체로 인터셉트 제외). 그렇지 않으면 모델이 과도하게 식별됩니다. 요인 변수를 인코딩하는 다른 방법도 있습니다. N - 1NN1
Affine

@Affine 내 추측은 genderM과 genderF를 모두 먹으면 계수 중 하나가 계수에 대해 NA를 반환한다는 것입니다 (단수 때문에 변수가 제외되었다는 메시지와 함께). 이것은이 경우 완벽하게 선형으로 관련되어 있기 때문에 의미가 있습니다. 그러나 당신은 내가 N을 모두 포함 할 수는 없다고 말합니다. 이는 genderF가 NA로 설정되어 있어도 genderM 계수에 차이 / 문제가 발생한다는 의미입니까? 또는 더 간단히 말해서, GLM / LM이 특이점으로 인해 변수를 제외하는 경우, 과다 식별 된 모델을 사용하는 것이 문제입니까? (나는 당신의 요점에 동의합니다-단지 실제적인 결과를 요구합니다)
Bryan

답변:


22

범주 형 변수 ( R에서 " 인자 " 라고 함 )는 다중 회귀 모델에서 숫자 코드로 표시되어야합니다. 숫자 코드를 적절하게 구성하는 방법은 여러 가지가 있습니다 ( UCLA 통계 도움말 사이트 의이 훌륭한 목록 참조 ). 기본적으로 R은 참조 수준 코딩 (R은 "contr.treatment"라고 함)을 사용하며 이는 거의 기본 통계 수준입니다. 이것은 ? options를 사용하는 전체 R 세션의 모든 대비 또는“ contrasts 또는 ? C (자본 참고)를 사용하는 특정 분석 / 변수에 대해 변경할 수 있습니다 . 참조 레벨 코딩에 대한 자세한 정보가 필요한 경우 여기에 설명하십시오. 예를 들어 요일을 기준으로 한 회귀.

어떤 사람들은 참조 수준의 코딩이 혼란스러워서 사용할 필요가 없습니다. 원하는 경우 남성과 여성에 대한 두 가지 변수를 가질 수 있습니다. 이것을 레벨 평균 코딩이라고합니다. 그러나 그렇게하면 절편을 억제해야합니다. 그렇지 않으면 모델 행렬이 단수이고 회귀를 위의 @Affine 참고로 맞출 수 없으며 여기에서 설명합니다 : 정성 변수 코딩은 특이점을 초래합니다 . 절편을 억제하려면 추가하여 수식을 수정 -1또는 +0과 같이 : y~... -1y~... +0.

참조 수준 코딩 대신 수준 평균 코딩을 사용하면 추정 된 계수와 출력과 함께 인쇄되는 가설 검정의 의미가 변경됩니다. 두 가지 수준 요인 (예 : 남성 대 여성)이 있고 참조 수준 코딩을 사용하는 경우 절편이 호출 (constant)되고 출력에 하나의 변수 만 나열됩니다 (아마도 sexM). 절편은 참조 그룹 (아마도 암컷) sexM의 평균이며 남성의 평균과 여성의 평균의 차이입니다. 절편과 관련된 P 값은 하나의 샘플이다 기준 레벨의 평균 갖는지 -test 과와 관련된 P 값을t0t 0sexM성별에 따라 반응이 다른지 알려줍니다. 그러나 레벨 평균 코딩을 대신 사용하면 두 개의 변수가 나열되고 각 p- 값은 해당 레벨의 평균이 인지 여부에 대한 1- 표본 에 해당합니다 . 즉, p- 값 중 어느 것도 성별이 다른지 여부를 테스트하지 않습니다. t0

set.seed(1)
y    = c(    rnorm(30), rnorm(30, mean=1)         )
sex  = rep(c("Female",  "Male"          ), each=30)
fem  = ifelse(sex=="Female", 1, 0)
male = ifelse(sex=="Male", 1, 0)

ref.level.coding.model   = lm(y~sex)
level.means.coding.model = lm(y~fem+male+0)

summary(ref.level.coding.model)
# ...
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  0.08246    0.15740   0.524    0.602    
# sexMale      1.05032    0.22260   4.718 1.54e-05 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# ...
summary(level.means.coding.model)
# ...
# Coefficients:
#      Estimate Std. Error t value Pr(>|t|)    
# fem   0.08246    0.15740   0.524    0.602    
# male  1.13277    0.15740   7.197 1.37e-09 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# ...

1
코드를 추가해 주셔서 감사합니다. 이것은 참조 셀 코딩의 가로 채기 = 셀의 sexFemale이 코딩을 의미 함을 분명히 보여줍니다 (N-1 변수에 "무슨 일이 있었는지"에 의해 추가로 혼동되었습니다 ...) 다른 질문이 필요할지 모르지만 이것은 하나의 변수로 이해하기 쉽습니다. 2 이상은 어떻습니까? 예 : 나이 : "오래된" "젊은". ref 셀 코딩에서 sexMale, ageYoung (예를 들어)에 대한 계수가 표시되고 sex sex와 ageOld 모두에 대한 절편이 표시됩니까?
Bryan

1
레벨이 3 인 요소가있는 경우 절편은 기준 레벨의 평균이며 나머지 2 개는 출력에 표시됩니다. 그들의 계수는 그들 사이의 차이와 참조 레벨 그리고 그들의 p는 그 차이의 중요성이 될 것입니다. 만약 당신이 2 개의 요소를 가지고 있다면 둘 다 심판 레벨을 가질 것이고, 절편은 심판 그룹에있는 사람들의 평균이 될 것입니다 (예를 들어, young F) 그리고 다른 레벨은 주어진 요인 1의 주어진 레벨에 따라 다릅니다. 다른 요인의 기준 레벨과 두 기준 레벨 그룹. 예를 들면 old이다 old F-`젊은 F , & M`이다 young M- young F.
gung-복직 모니카

1
나는 이것으로 조금 연주했고 R^2두 가지 접근법 사이에 상당한 차이를 경험했습니다 . 나는 단지 알고 R^2있지만 그것에 대한 설명이 있습니까?
hans0l0

@ hans0l0, 나는 모른다. 차이가 없어야합니다.
gung-모니 티 복원

1
@confused,? glm 문서에서 찾을 수 있습니다 .
gung-복직 모니카

2

추정 계수는 R과 일치하는 더미 변수 (즉, 숫자 변수)를 생성하는 조건에 따라 동일합니다. 참고 gl함수 요인 변수를 생성한다.

> counts <- c(18,17,15,20,10,20,25,13,12)
> outcome <- gl(3,1,9)
> outcome
[1] 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
> class(outcome)
[1] "factor"
> glm.1<- glm(counts ~ outcome, family = poisson())
> summary(glm.1)

Call:
glm(formula = counts ~ outcome, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   3.0445     0.1260  24.165   <2e-16 ***
outcome2     -0.4543     0.2022  -2.247   0.0246 *  
outcome3     -0.2930     0.1927  -1.520   0.1285    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

결과에는 세 가지 수준이 있으므로 두 개의 더미 변수 (결과 = 2이면 dummy.1 = 0, 결과 = 3이면 dummy.2 = 1)를 만들고 다음 숫자 값을 사용하여 다시 맞 춥니 다.

> dummy.1=rep(0,9)
> dummy.2=rep(0,9)
> dummy.1[outcome==2]=1
> dummy.2[outcome==3]=1
> glm.2<- glm(counts ~ dummy.1+dummy.2, family = poisson())
> summary(glm.2)

Call:
glm(formula = counts ~ dummy.1 + dummy.2, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   3.0445     0.1260  24.165   <2e-16 ***
dummy.1      -0.4543     0.2022  -2.247   0.0246 *  
dummy.2      -0.2930     0.1927  -1.520   0.1285    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

보시다시피 추정 계수는 동일합니다. 그러나 동일한 결과를 얻으려면 더미 변수를 만들 때주의해야합니다. 예를 들어 두 개의 더미 변수를 (결과 = 1 인 경우 더미 1 = 1이고 결과 = 2 인 경우 더미 2 = 2) 다음과 같이 추정 결과가 다릅니다.

> dummy.1=rep(0,9)
> dummy.2=rep(0,9)
> dummy.1[outcome==1]=1
> dummy.2[outcome==2]=1
> glm.3<- glm(counts ~ dummy.1+dummy.2, family = poisson())
> summary(glm.3)

Call:
glm(formula = counts ~ dummy.1 + dummy.2, family = poisson())

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9666  -0.6713  -0.1696   0.8471   1.0494  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   2.7515     0.1459   18.86   <2e-16 ***
dummy.1       0.2930     0.1927    1.52    0.128    
dummy.2      -0.1613     0.2151   -0.75    0.453    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 10.5814  on 8  degrees of freedom
Residual deviance:  5.1291  on 6  degrees of freedom
AIC: 52.761

Number of Fisher Scoring iterations: 4

당신이 추가 할 때 때문입니다 outcomeglm.1에 변수를 기본적으로 R은 두 개의 더미 변수, 즉 생성 outcome2outcome3와 유사하게 정의를 dummy.1하고 dummy.2결과의 첫 번째 수준은 다른 모든 더미 변수 (시입니다 glm.2 예에서 outcome2outcome3)로 설정된다 제로.


추정 계수가 동일한 코드 증거에 감사드립니다. 또한 나 자신을 만드는 것에 대한 경고가 유용합니다. 모델 변수가 이름으로 데이터베이스 열에 직접 연결되므로 다운 스트림에 유용 할 수 있지만 어떻게 해야하는지에 대한 문제를 이해해야하는 것처럼 보입니다. 나는 이것에 대해 간다.
Bryan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.