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:21] 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식을 적어 보면 아래와 같다. 위의 아웃풋을 살펴 보면, 학생들의 성적이 가지는 총 변량의 (Sum of Square Total) 약 22.6% 를 방학이 있고 없고로 구분되는 yr_rnd 변인이 설명을 하고 있으며, 이는 통계적으로 유의미한 것이다 (F(1, 398) = 116.241, p < .001). 위의 regression output은 yr_rnd 변인 중에서 방학이 있는 특성이 baseline이 되어 있으며, 이를 염두에 두고 regression식을 적어 보면 아래와 같다.
  
-$\hat{\text{api00}} = 684.54 - 160.51 * \text{yr_rndnobr} $ +''hat = 684.54 - 160.51 * (yr_rndno_break) '' 
-  +  * yr_rndno_break: yr_rndno_break = 1 
-이 때, $\text{yr_rndnobr} $ 은 no break인 경우를 1로 보고 대입된 dummy variable이다즉, +    * y hat = 684.54 - 160.51 * (1)  
 +    * y hat = 524.03 
 +  * yr_rndbreak: yr_rndnobreak = 0 
 +    * y hat = 684.54 - 160.51 * (0)  
 +    * y hat = 684.54 
  
-  * X: 0 = break +위 회귀식에서 r은  
-  * X: 1 no break +''y hat a + bX'' 의 형식에서 ''X'' 로 ''no_break''를 썼음을 (yr_rndno_break) 알 수 있다. 이 경우에는 yr_rndno_break를 1로 넣어서 석을 한다. 즉, no break일 경우는  ''y hat = 684.54 - 160.51(1) '' 는 이다. 반대로 break일 경우에는 뒤쪽 부분이 해당이 안되므로 ''0''으로 체한다. 따라서 이 경우의 회귀식은 ''y hat = 684.54''이다. 이 둘을 비교해보면 no break일 경우에는    
- +''y hat = 684.54 - 160.51(1) = 524.03'' 이고  
-이므로 x=0 일때를 대입해 보면, 즉, 방학이있는학교의 경우는 684.54 의 추정치를 엊을 수 있다. 이 점수는 방학이 있는 학교의 api점수 평균이 된다. 반면에 x = 1 때를 해 보면 즉, 방학이없는학교의 경우에는 684.54 - 160.51 = 524.03 의 추정치를 엊을 수 있다. b coefficient가 이 역할 (차이를 나타내는 역할을 하는데)에 대한 유의성에 대한 판단은 t-test로 하는데, 이 t값은 -10.782며 이는 F값인 116.241의 제곱근이다 (즉, $t^2 = F$ )사실, 이 상황은 정확히 t-test를 해야할 상황이므로 (두 그룹에 대한 성적평균의 차이), t-test를 해야 하지만 이와 같이 regression을 하여도 동일한 결과를 보게된다 (같은 미에서 F-test를 했어도 마찬가지). 뒷 부분의 t-test와 F-test는 이를 확인한 것.+break일 경우에는  
 +''y hat = 684.54 - 160.51(0) = 684.54'' 라는 것이다. 다시 이야기하면 break가 없는 학교의 평균 api점는 524.03점인 반면에 break가 는 학교의 평균은 684.54 이다. 이 점수의 차이는 두 집단의 평균을 비교하는 것과 같은 형태를 (형식) 갖는다. 즉, t-test를 하는 것과 마찬가지다. 위에서 얻은  
 +  * t.value 
 +  * F.value 
 +  * t.value.lm 
 +  * F.value.lm 은 모두 같은 원리로 두 그룹을 (집단의 api 평균을테스트 한 것이다
  
 {{regressionCategory.jpg}} {{regressionCategory.jpg}}
Line 891: Line 899:
  
 이와 같이 종류변인(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)'' 만으로도 계산이 된다.  이와 같이 종류변인(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)
 +
 +Call:
 +lm(formula = api00 ~ mealcat, data = df)
 +
 +Residuals:
 +     Min       1Q   Median       3Q      Max 
 +-253.394  -47.883    0.282   52.282  185.620 
 +
 +Coefficients:
 +             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
 +
 +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 2 and 397 DF,  p-value: < 2.2e-16
 +
 +
 +</code>
 +</tabbox>
 +
 +<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 = 0, mg2 = 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% 를 독립변인이 종속변인을 설명한다 (상당한 크기임을 알 수 있다).
 +
  
 ===== Regression with a continuous and a categorical IV ===== ===== Regression with a continuous and a categorical IV =====
Line 1061: Line 1137:
  
  
 +</code>
 +{{pasted:20260609-230452.png?600}}
 +
 +<code>
 > # 1. 평균을 빼준 값을 새로운 변인으로 저장 > # 1. 평균을 빼준 값을 새로운 변인으로 저장
 > df$meals_centered <-  > df$meals_centered <- 
Line 1104: 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 1113: 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 1213: 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 1442: 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 1487: 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.1781047267.txt.gz · Last modified: by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki