User Tools

Site Tools


using_dummy_variables

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
using_dummy_variables [2026/06/09 23:25] hkimscilusing_dummy_variables [2026/06/14 23:15] (current) – [Regression with two Catogorical IVs] hkimscil
Line 874: Line 874:
 {{pasted:20260609-224414.png?600}} {{pasted:20260609-224414.png?600}}
 {{pasted:20260609-224430.png?600}} {{pasted:20260609-224430.png?600}}
 +위의 아웃풋을 살펴 보면, 학생들의 성적이 가지는 총 변량의 (Sum of Square Total) 약 22.6% 를 방학이 있고 없고로 구분되는 yr_rnd 변인이 설명을 하고 있으며, 이는 통계적으로 유의미한 것이다 (F(1, 398) = 116.241, p < .001). 위의 regression output은 yr_rnd 변인 중에서 방학이 있는 특성이 baseline이 되어 있으며, 이를 염두에 두고 regression식을 적어 보면 아래와 같다.
  
-회귀분석의 예측식은 (y hat, regression model) 다음과 같다. 
 ''y hat = 684.54 - 160.51 * (yr_rndno_break) '' ''y hat = 684.54 - 160.51 * (yr_rndno_break) ''
   * yr_rndno_break: yr_rndno_break = 1   * yr_rndno_break: yr_rndno_break = 1
Line 894: Line 894:
   * F.value.lm 은 모두 같은 원리로 두 그룹을 (집단의 api 평균을) 테스트 한 것이다.    * F.value.lm 은 모두 같은 원리로 두 그룹을 (집단의 api 평균을) 테스트 한 것이다. 
  
 +{{regressionCategory.jpg}}
  
 +위의 그래프는 두 그룹의 (break, no break 학교그룹) api 점수 분포를 나타내 주는 것이다. 그리고 직선은 두 그룹 평균을 연결한 선으로 $\hat{Y} = 684.539 - 160.506 X$ 으로 표현된다. 
  
 +이와 같이 종류변인(category, nominal)을 가지고서도 regression 테스트를 할 수 있으며, 사실 이는 t-test나 F-test와 다르지 않다. 위에서 주의해야 할 점은 두 변인의 종류를 손으로 coding할 때, 1과 2가 아닌, 0과 1로 하였다는 점이다. 이렇게 하는 이유는 해석하기에 편하기 때문이며, 이것이 보통의 방법이다. 그러나, 1과 2로 coding 데이터를 이용해도 크게 다른지 않은 결과를 구하게 된다. 다른 점이라면, 절편에 해당되는 상수값이 다르게 되며, coefficient값은 위의 분석과 동일한 값을 갖게 된다. 그리고 일반적으로 r에서는 dummy variables을 얻기 위한 coding을 하지 않아도 r이 스스로 구하여 계산을 한다. 즉, dummy variable 을 구하지 않은 채로  ''lm(api00 ~ yr_rnd, data=df)'' 만으로도 계산이 된다. 
  
 +===== Regression with a categorical IV with 3 attributes =====
 +<tabbox rs.3att>
 +<code>
 +m.mealcat <- lm(api00 ~ mealcat, data=df) 
 +summary(m.mealcat)
 +</code>
 +<tabbox ro.3att>
 +<code>
 +> #######################################
 +> # categorical IV with 3 or more attributes
 +> #######################################
 +> m.mealcat <- lm(api00 ~ mealcat, data=df) 
 +> summary(m.mealcat)
  
-위의 아웃풋을 살펴 보면, 학생들의 성적이 가지는 총 변량의 (Sum of Square Total) 약 22.6% 를 방학이 있고 없고로 구분되는 yr_rnd 변인이 설명을 하고 있으며이는 통계적으로 유의미한 것이다 (F(1, 398) 116.241, p < .001). 위의 regression output은 yr_rnd 변인 중에서 방학이 있는 특성이 baseline이 되어 있으며, 이를 염두에 두고 regression식을 적어 보면 아래와 같다.+Call: 
 +lm(formula = api00 ~ mealcatdata df)
  
-$\hat{\text{api00}} = 684.54 160.51 * \text{yr_rndnobr} $ +Residuals: 
-  +     Min       1Q   Median       3Q      Max  
-이 때, $\text{yr_rndnobr} $ 은 no break인 경우를 1로 보고 대입된 dummy variable이다즉, +-253.394  -47.883    0.282   52.282  185.620 
  
-  * X: 0 = break +Coefficients: 
-  * X: 1 = no break+             Estimate Std. Error t value Pr(>|t|)     
 +(Intercept)   805.718      6.169  130.60   <2e-16 **
 +mealcatto80  -166.324      8.708  -19.10   <2e-16 *** 
 +mealcatto100 -301.338      8.629  -34.92   <2e-16 *** 
 +--- 
 +Signif. codes 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
  
-이므로 x=0 일때를 대입해 보면, 즉, 방학이있는학교의 경우는 684.54 의 추정치를 엊을 수 있다. 이 점수는 방학이 있는 학교의 api점수 평균이 된다. 반면에 x = 1 일때를 대입해 보면 즉, 방학이없는학교의 경우에는 684.54 160.51 = 524.03 의 추정치를 엊을 수 있다. b coefficient가 이 역할 (차이를 나타내는 역할을 하는데)에 대한 유의성에 대한 판단은 t-test로 하는데이 t값은 -10.782며 이는 F값인 116.241의 제곱근이다 (즉, $t^= F$ ). 사실이 상황은 정확히 t-test를 해야할 상황이므로 (두 그룹에 대한 성적평균의 차이), t-test를 해야 하지만 이와 같이 regression을 하여도 동일한 결과를 보게된다 (같은 의미에서 F-test를 했어도 마찬가지)뒷 부분의 t-test와 F-test는 이를 확인한 것.+Residual standard error: 70.61 on 397 degrees of freedom 
 +Multiple R-squared:  0.7548, Adjusted R-squared:  0.7536  
 +F-statistic: 611.1 on and 397 DF p-value: < 2.2e-16
  
-{{regressionCategory.jpg}}+>  
 +</code> 
 +</tabbox>
  
-위의 그래프는 두 그룹의 (breakno break 학교그룹) api 점수 분포를 나타내 주는 이다. 리고 직선은 두 그룹 평균을 연결한 선으로 $\hat{Y} 684.539 - 160.506 X$ 으로 표현된다. +<code> 
 +y hat = 805.718 - 166.324 * to80 - 301.338 * to100  
 +mealcat0-46 (to46 으로 대체) 
 +mealcat47-80 (to80 으로 대체) 
 +maelcat81-100 (to100 으로 대체) 
 +</code> 
 + 
 +이에 대한 해석도 앞에서의 것과 마찬가지이다.  
 +  * y hat = 805.718 - 166.324*mg2 - 301.338*mg3  
 +  * mg1 = 1, mg2 = 0, mg3 = 0 일 경우 
 +    * y hat = 805.718 - 166.324*(0) - 301.338*(0) 
 +    * y hat = 805.718  
 +  * mg1 = 0mg2 = 1, mg3 = 0 일 경우  
 +    * y hat = 805.718 - 166.324*(1- 301.338*(0) 
 +    * y hat = 805.718 - 166.324 
 +    * y hat = 639.394 
 +  * mg1 = 0, mg2 = 0, mg3 = 1 일 경우 
 +    * y hat = 805.718 - 166.324*(0) - 301.338*(1) 
 +    * y hat = 805.718 - 301.338 
 +    * y hat = 504.38 
 + 
 +  * 즉, 무료급식의 퍼센티지가 높을 수록 api점수가 낮음을 알 수 있다. 이렇게 무료급식 퍼센티지를 독립변인으로 종속변인인 api00점수를 (학력점수) 봤을 때, 그 설명력이 통계학적으로 유효한가는 regression output에서 (summary(mod2))  
 +    * F-value 와 p-value를 가지고 판단한다.  
 +      * (F (2, 397) = 611.1; p-value < 2.2e-16) 
 +      * 위에서 2, 397 은 각각 between degrees of freedom 과 within degrees of freedom 이다. 이를 보고도 우는  
 +      * 총 400개의 학교가 데이터에 참여했음을 알 수 있고 (2 + 397 에 1을 한 값),  
 +      * 독립변인의 종류가 3가지 (df 2 이므로) 임을 알 수 있다. 
 +    * R square value 는 설명력의 크기를 알려준다. 
 +      * 0.7548 즉, 75.48% 를 독립변인이 종속변인을 설명한다 (상당한 크기임을 알 수 있다).
  
-이와 같이 종류변인(category, nominal)을 가지고서도 regression 테스트를 할 수 있으며, 사실 이는 t-test나 F-test와 다르지 않다. 위에서 주의해야 할 점은 두 변인의 종류를 손으로 coding할 때, 1과 2가 아닌, 0과 1로 하였다는 점이다. 이렇게 하는 이유는 해석하기에 편하기 때문이며, 이것이 보통의 방법이다. 그러나, 1과 2로 coding 데이터를 이용해도 크게 다른지 않은 결과를 구하게 된다. 다른 점이라면, 절편에 해당되는 상수값이 다르게 되며, coefficient값은 위의 분석과 동일한 값을 갖게 된다. 그리고 일반적으로 r에서는 dummy variables을 얻기 위한 coding을 하지 않아도 r이 스스로 구하여 계산을 한다. 즉, dummy variable 을 구하지 않은 채로  ''lm(api00 ~ yr_rnd, data=df)'' 만으로도 계산이 된다.  
  
 ===== Regression with a continuous and a categorical IV ===== ===== Regression with a continuous and a categorical IV =====
Line 1084: Line 1137:
  
  
 +</code>
 +{{pasted:20260609-230452.png?600}}
 +
 +<code>
 > # 1. 평균을 빼준 값을 새로운 변인으로 저장 > # 1. 평균을 빼준 값을 새로운 변인으로 저장
 > df$meals_centered <-  > df$meals_centered <- 
Line 1127: Line 1184:
  
  
 +</code>
 +{{pasted:20260609-230505.png?600}}
 +
 +<code>
 > # Install the package if you do not have it > # Install the package if you do not have it
 > # install.packages("interactions") > # install.packages("interactions")
Line 1136: Line 1197:
  
  
 +</code>
 +{{pasted:20260609-230516.png?600}}
 +
 +<code>
 > m.ellyr_rnd <- lm(api00~ell+yr_rnd, data=df) > m.ellyr_rnd <- lm(api00~ell+yr_rnd, data=df)
 > summary(m.ellyr_rnd) > summary(m.ellyr_rnd)
Line 1236: Line 1301:
  
 </code> </code>
 +{{pasted:20260609-230601.png?600}}
 +
 </tabbox> </tabbox>
-{{pasted:20260609-230452.png?600}} 
-{{pasted:20260609-230505.png?600}} 
-{{pasted:20260609-230516.png?600}} 
-{{pasted:20260609-230601.png?600}} 
  
 ===== Regression with a categorical and a continuous IV: e.g. 2 ===== ===== Regression with a categorical and a continuous IV: e.g. 2 =====
Line 1465: Line 1528:
 > nobr.to100 <- coefs[1]+coefs[2]+coefs[4] > nobr.to100 <- coefs[1]+coefs[2]+coefs[4]
 > cat(br.to46, br.to80, br.to100) > cat(br.to46, br.to80, br.to100)
-808.0131 644.2758 526.33> cat(nobr.to46, nobr.to80, nobr.to100)+808.0131 644.2758 526.33 
 +> cat(nobr.to46, nobr.to80, nobr.to100)
 765.0531 601.3157 483.3699>  765.0531 601.3157 483.3699> 
 +</code>
 +예측식은 아래와 같다. 
 +<code>
 +y hat = 808.013 + -42.960*(yr_rndno_break) + -163.737(mealcat47-80) + -281.683(mealcat81-100)
 +
 +yr_rnd:
 +break = 방학있음 
 +no_break = 방학없음
 +
 +mealcat: 
 +0-46% free meals
 +47-80%
 +81-100%
 +</code>
 +이에 대한 해석은 각각의 독립변인의 종류 수인 2개와 3개를 곱한 6개의 경우로 나누어서 생각할 수 있다. 즉,
 +''y hat = 808.013 + -42.960*(yr_rndno_break) + -163.737(mealcat47-80) + -281.683(mealcat81-100)''
 +을 바탕으로 각각의 조건을 고려하여 y hat를 계산하면 아래와 같다. 
 +
 +<wrap #two_dummy_table />
 +TABLE. Two dummy variables
 +^                 ^ mealcat0-46  ^ mealcat47-80   ^ mealcat81-100    ^ 
 +| yr_rndbreak     | <wrap> yr_rndbreak = 1
 +yr_rndno_break = 0
 +mealcat0-46 = 1
 +mealcat47-80 = 0
 +mealcat81-100 = 0 경우
 +''y hat = 808.013''         
 +</wrap>  | <wrap> yr_rndbreak = 1
 +yr_rndno_break = 0
 +mealcat0-46 = 0
 +mealcat47-80 = 1
 +mealcat81-100 = 0 경우  
 +''**y hat = 808.013 - 163.737 = 644.276**''
 +</wrap>  | <wrap> yr_rndbreak = 1
 +yr_rndno_break = 0
 +mealcat0-46 = 0
 +mealcat47-80 = 0
 +mealcat81-100 = 1 경우
 +''**y hat = 808.013 - 281.683 = 526.33**''
 +</wrap>  |
 +| yr_rndno_break  | <wrap> yr_rndbreak = 0
 +yr_rndno_break = 1
 +mealcat0-46 = 1
 +mealcat47-80 = 0
 +mealcat81-100 = 0 경우
 +''**y hat = 808.013 - 42.960 = 765.053**''         
 +</wrap>  | <wrap> yr_rndbreak = 0
 +yr_rndno_break = 1
 +mealcat0-46 = 0
 +mealcat47-80 = 1
 +mealcat81-100 = 0 경우 
 +''**y hat = 808.013 - 42.960 - 163.737 = 601.316**''
 +</wrap>  | <wrap> yr_rndbreak = 0
 +yr_rndno_break = 1
 +mealcat0-46 = 0
 +mealcat47-80 = 0
 +mealcat81-100 = 1 경우
 +''**y hat = 808.013 - 42.960 - 281.683 = 483.37**''
 +</wrap>  |
 +
 +<code>
 > # 해석. interaction > # 해석. interaction
 > m.yrrndxmealcat <- lm(api00~yr_rnd*mealcat, data=df) > m.yrrndxmealcat <- lm(api00~yr_rnd*mealcat, data=df)
Line 1510: Line 1635:
 > nobr.to100 <- coefs[1]+coefs[2]+coefs[4]+coefs[6] > nobr.to100 <- coefs[1]+coefs[2]+coefs[4]+coefs[6]
 > cat(br.to46, br.to80, br.to100) > cat(br.to46, br.to80, br.to100)
-809.6855 645.2735 521.4925> cat(nobr.to46, nobr.to80, nobr.to100)+809.6855 645.2735 521.4925 
 +> cat(nobr.to46, nobr.to80, nobr.to100)
 735.4286 593.5333 488 735.4286 593.5333 488
  
 </code> </code>
-</tabbox>+위의 테스트는 두 개의 독립변인이 모두 종류이고 종속변인이 숫자일 때의 조건을 만족하니 factorial anova를 해도 된다. 아래는 그 결과이다.  
 +<code> 
 +> mod4 <- lm(api00 ~ yr_rnd + mealcat + yr_rnd:mealcat, data=datavar)  
 +> summary(mod4)
  
 +Call:
 +lm(formula = api00 ~ yr_rnd + mealcat + yr_rnd:mealcat, data = datavar)
 +
 +Residuals:
 +     Min       1Q   Median       3Q      Max 
 +-207.533  -50.764   -1.843   48.874  179.000 
 +
 +Coefficients:
 +                             Estimate Std. Error t value Pr(>|t|)    
 +(Intercept)                   809.685      6.185 130.911  < 2e-16 ***
 +yr_rndno_break                -74.257     26.756  -2.775  0.00578 ** 
 +mealcat47-80                 -164.412      8.877 -18.522  < 2e-16 ***
 +mealcat81-100                -288.193     10.443 -27.597  < 2e-16 ***
 +yr_rndno_break:mealcat47-80    22.517     32.752   0.687  0.49217    
 +yr_rndno_break:mealcat81-100   40.764     29.231   1.395  0.16394    
 +---
 +Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
 +
 +Residual standard error: 68.87 on 394 degrees of freedom
 +Multiple R-squared:  0.7685, Adjusted R-squared:  0.7656 
 +F-statistic: 261.6 on 5 and 394 DF,  p-value: < 2.2e-16
 +</code>
 +
 +<code>
 +Coefficients:
 +                             Estimate Std. Error t value Pr(>|t|)    
 +(Intercept)                   809.685      6.185 130.911  < 2e-16 ***
 +yr_rndno_break                -74.257     26.756  -2.775  0.00578 ** 
 +mealcat47-80                 -164.412      8.877 -18.522  < 2e-16 ***
 +mealcat81-100                -288.193     10.443 -27.597  < 2e-16 ***
 +yr_rndno_break:mealcat47-80    22.517     32.752   0.687  0.49217    
 +yr_rndno_break:mealcat81-100   40.764     29.231   1.395  0.16394    
 +---
 +
 +이전 식
 +y hat = 808.013 + -42.960 * (nobr) + -163.737 * (to80) + -281.683 * (to100)
 +위의 식
 +y hat = 809.685 +  -74.257*(nobr) + 
 +                  -164.412*(to80) +  
 +                  -288.193*(to100) +
 +                   22.517*(nobr:to80) +   --> aaaaa case
 +                   40.764*(nobr:to100)    --> bbbbb case
 +
 +yr_rnd:
 +break = 방학있음 
 +no_break = 방학없음
 +
 +mealcat: 
 +0-46% free meals
 +47-80%
 +81-100%
 +</code>
 +
 +^                 ^ mealcat0-46  ^ mealcat47-80   ^ mealcat81-100    ^ 
 +| yr_rndbreak     | <wrap> 베이스라인
 +yr_rndno_break = 0
 +mealcat47-80 = 0
 +mealcat81-100 = 0 경우
 +''y hat = 809.685''         
 +</wrap>  | <wrap> yr_rndno_break = 0
 +mealcat0-46 = 0
 +mealcat81-100 = 0 경우  
 +''y hat = 809.685 - 
 +          163.737 
 +        = 645.9''
 +</wrap>  | <wrap> 
 +yr_rndno_break = 0    
 +mealcat0-46 = 0
 +mealcat47-80 = 0 경우
 +''y hat = 809.685 - 
 +          281.683 
 +        = 528''
 +</wrap>  |
 +| yr_rndno_break  | <wrap> 
 +yr_rndbreak = 0
 +mealcat47-80 = 0
 +mealcat81-100 = 0 경우
 +''y hat = 809.685 - 
 +          74.257 
 +        = 735.4''         
 +</wrap>  | <wrap> aaaaa
 +yr_rndbreak = 0
 +mealcat0-46 = 0
 +mealcat81-100 = 0 경우  
 +''y hat = 809.685 - 
 +          74.257 - 
 +          164.412 + 
 +          <fc #ff0000>22.517</fc> 
 +        = 593.5''
 +</wrap>  | <wrap> bbbbb
 +yr_rndbreak = 0    
 +mealcat0-46 = 0
 +mealcat47-80 = 0 경우
 +''y hat = 809.685 -
 +          74.257 -
 +          288.193 + 
 +          <fc #ff0000>40.764</fc> 
 +        = 488''
 +</wrap>  |
 +마지막 두 케이스를 보면 no_break학교 중에서 밀카테고리 2와 3에서 떨어지는 정도가 어느 정도 완화되는 경향을 보이지만 통계학적으로 significant하지는 않다. 
 +
 +
 +</tabbox>
  
using_dummy_variables.1781047520.txt.gz · Last modified: by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki