User Tools

Site Tools


suppressor_in_multiple_regression

Table of Contents

Question

Carseat에서 아주 이상한 일이 있습니다. 이것에 대해서 각 개인의 생각을 묻습니다.

# 개인과제와 관련된 코드입니다. 
# Carseats 데이터 분석입니다. 새로 시작하면 
# 만약에 ISLR이 install도 안되어 
# 있으면 
install.packages("ISLR")
library(ISLR)

?Carseats   # 데이터 설명 확인
str(Carseats)

# 이 중에서 CompPrice의 독립변인으로서의
# 역할에 문제점이 보이는 듯 하여 물어봅니다
# CompPrice와 다른 변인들을 모두 활용해도 
# 되겠지만 간단하게 보기 위해서 Price만을
# 독립변인으로 분석을 합니다

lm.c1 <- lm(Sales ~ Price + CompPrice, data = Carseats)
summary(lm.c1)

# output 을 살펴보면 R 제곱값이 
# 0.3578 (35.78%) 임을 알 수 있습니다. 
# 이는 우리가 흔히 쓰는 다이어그램에서
#
# http://commres.net/wiki/_detail/pasted/20201201-170048.png?id=multiple_regression_exercise
#
# b + c + d 에 해당하는 부분입니다. 즉 두 변인의
# 설명력을 보여주는 부분인 lm.c1에서의 
# R 제곱은 b + c + d / a + b + c + d 입니다. 

# 여기에서 아래를 수행하여 
# semipartial corrleation 값과 이를 
# 제곱한 값을 알아봅니다. 

library(ppcor)
attach(Carseats)
spcor.Price <- spcor.test(Sales, Price, CompPrice)
spcor.CompPrice <- spcor.test(Sales, CompPrice, Price)

spcor.Price
spcor.CompPrice

# 위 둘의 아웃풋에서 estimate값은 
# semipartial correlation 값이므로 이를 
# 제곱한 값은 각각 b와 d에 해당하는 
# 값입니다. 이를 더 자세히 이야기하면
# b = b / a + b + c + d
# d = d / a + b + c + d
# 라는 이야기입니다. 

b <- spcor.Price$estimate^2
d <- spcor.CompPrice$estimate^2 

# 각 b와 d를 출력해 봅니다. 
b
d

# 이 둘을 더해봅니다. 
# 이 값은 0.5135791 입니다
b + d

# 다시 아까 lm.c1의 R 제곱값은 
summary(lm.c1)$r.squared
# 0.3578332 입니다. 

# 다시 그림을 보면
# R 제곱은 b + c + d 에 해당하는 
# 것이라고 했고
# semi-partial 값을 각각 구하여
# 이를 제곱하여 더한 것이 b와 d입니다.
# 그런데 그림을 보면 b + d > b + c + d 가
# 됩니다.  그렇지만 그림대로라면 
# 이것은 말이 되지 않습니다. 그런데 
# 계산값을 이를 가르키고 있습니다. 
# 이 이유가 뭘까요?

# 여러분의 생각 후에 mediator 분석에 대해서
# 설명을 하도록 하겠습니다. 
 

Exploration

# 개인과제와 관련된 코드입니다. 
# Carseats 데이터 분석입니다. 새로 시작하면 
library(ISLR)
# 만약에 ISLR이 install도 안되어 
# 있으면 
# install.packages("ISLR")

?Carseats   # 데이터 설명 확인
str(Carseats)


# 이 중에서 CompPrice의 독립변인으로서의
# 역할에 문제점이 보이는 듯 하여 물어봅니다
# CompPrice와 다른 변인들을 모두 활용해도 
# 되겠지만 간단하게 보기 위해서 Price만을
# 독립변인으로 분석을 합니다

lm.c1 <- lm(Sales ~ Price + CompPrice, data = Carseats)
summary(lm.c1)

# output 을 살펴보면 R 제곱값이 
# 0.3578 (35.78%) 임을 알 수 있습니다. 
# 이는 우리가 흔히 쓰는 다이어그램에서
#
# http://commres.net/wiki/_detail/pasted/20201201-170048.png?id=multiple_regression_exercise
#
# b + c + d 에 해당하는 부분입니다. 즉 두 변인의
# 설명력을 보여주는 부분인 lm.c1에서의 
# R 제곱은 b + c + d / a + b + c + d 입니다. 

# 여기에서 아래를 수행하여 
# semipartial corrleation 값과 이를 
# 제곱한 값을 알아봅니다. 

library(ppcor)
attach(Carseats)
spcor.Price <- spcor.test(Sales, Price, CompPrice)
spcor.CompPrice <- spcor.test(Sales, CompPrice, Price)

spcor.Price
spcor.CompPrice

# 위 둘의 아웃풋에서 estimate값은 
# semipartial correlation 값이므로 이를 
# 제곱한 값은 각각 b와 d에 해당하는 
# 값입니다. 이를 더 자세히 이야기하면
# b = b / a + b + c + d
# d = d / a + b + c + d
# 라는 이야기입니다. 

b <- spcor.Price$estimate^2
d <- spcor.CompPrice$estimate^2 

# 각 b와 d를 출력해 봅니다. 
b
d

# 이 둘을 더해봅니다. 
# 이 값은 0.5135791 입니다
b + d

# 다시 아까 lm.c1의 R 제곱값은 
summary(lm.c1)$r.squared
# 0.3578332 입니다. 

# 다시 그림을 보면
# R 제곱은 b + c + d 에 해당하는 
# 것이라고 했고
# semi-partial 값을 각각 구하여
# 이를 제곱하여 더한 것이 b와 d입니다.
# 그런데 그림을 보면 b + d > b + c + d 가
# 됩니다.  그렇지만 그림대로라면 
# 이것은 말이 되지 않습니다. 그런데 
# 계산값을 이를 가르키고 있습니다. 
# 이 이유가 뭘까요?

# 여러분의 생각 후에 mediator 분석에 대해서
# 설명을 하도록 하겠습니다. 
#
#

cs.dat <- Carseats[, c(1,2,6)]
str(cs.dat)
round(cor(cs.dat),3)
ia.1 <- lm(Sales~CompPrice, data=cs.dat)
ia.2 <- lm(Sales~Price, data=cs.dat)
ia.3 <- lm(Sales~CompPrice+Price, data=cs.dat)

# Price 에 CompPrice를 더한 것에 따라서 
# r square 값의 증가분이 의미가 있는가를 
# 테스트 
anova(ia.2, ia.3)
# 증가분은 
summary(ia.3)$r.squared - summary(ia.2)$r.squared

# mediated effect = CompPrice에 대한 Price의 설명력이
# 얼마나 Sales를 설명하는가?

ia.0 <- lm(CompPrice~Price, data=cs.dat)

# CompPrice에 대한 Price의 설명력
med.price.2.compprice <- ia.0$fitted.values - mean(cs.dat$CompPrice)
cor(med.price.2.compprice, cs.dat$Sales)
cor(cs.dat$Price, cs.dat$Sales)

ia.01 <- lm(Sales~med.price.2.compprice, data=cs.dat)
summary(ia.01)
summary(ia.2)
ia.02 <- lm(Sales~ia.0$residuals, data=cs.dat)
summary(ia.02)

summary(ia.01)$r.squared
summary(ia.02)$r.squared
summary(ia.01)$r.squared + summary(ia.02)$r.squared
summary(ia.3)

Explanation

> # 개인과제와 관련된 코드입니다. 
> # Carseats 데이터 분석입니다. 새로 시작하면 
> library(ISLR)
> # 만약에 ISLR이 install도 안되어 
> # 있으면 
> # install.packages("ISLR")
> 
> ?Carseats   # 데이터 설명 확인
> str(Carseats)
'data.frame':	400 obs. of  11 variables:
 $ Sales      : num  9.5 11.22 10.06 7.4 4.15 ...
 $ CompPrice  : num  138 111 113 117 141 124 115 136 132 132 ...
 $ Income     : num  73 48 35 100 64 113 105 81 110 113 ...
 $ Advertising: num  11 16 10 4 3 13 0 15 0 0 ...
 $ Population : num  276 260 269 466 340 501 45 425 108 131 ...
 $ Price      : num  120 83 80 97 128 72 108 120 124 124 ...
 $ ShelveLoc  : Factor w/ 3 levels "Bad","Good","Medium": 1 2 3 3 1 1 3 2 3 3 ...
 $ Age        : num  42 65 59 55 38 78 71 67 76 76 ...
 $ Education  : num  17 10 12 14 13 16 15 10 10 17 ...
 $ Urban      : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 2 2 1 1 ...
 $ US         : Factor w/ 2 levels "No","Yes": 2 2 2 2 1 2 1 2 1 2 ...
> 
> 
> # 이 중에서 CompPrice의 독립변인으로서의
> # 역할에 문제점이 보이는 듯 하여 물어봅니다
> # CompPrice와 다른 변인들을 모두 활용해도 
> # 되겠지만 간단하게 보기 위해서 Price만을
> # 독립변인으로 분석을 합니다
> 
> lm.c1 <- lm(Sales ~ Price + CompPrice, data = Carseats)
> summary(lm.c1)

Call:
lm(formula = Sales ~ Price + CompPrice, data = Carseats)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.5285 -1.6207 -0.2404  1.5269  6.2437 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  6.278692   0.932774   6.731 5.91e-11 ***
Price       -0.087458   0.005914 -14.788  < 2e-16 ***
CompPrice    0.090777   0.009132   9.941  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.269 on 397 degrees of freedom
Multiple R-squared:  0.3578,	Adjusted R-squared:  0.3546 
F-statistic: 110.6 on 2 and 397 DF,  p-value: < 2.2e-16

> 
> # output 을 살펴보면 R 제곱값이 
> # 0.3578 (35.78%) 임을 알 수 있습니다. 
> # 이는 우리가 흔히 쓰는 다이어그램에서
> #
> # http://commres.net/wiki/_detail/pasted/20201201-170048.png?id=multiple_regression_exercise
> #
> # b + c + d 에 해당하는 부분입니다. 즉 두 변인의
> # 설명력을 보여주는 부분인 lm.c1에서의 
> # R 제곱은 b + c + d / a + b + c + d 입니다. 
> 
> # 여기에서 아래를 수행하여 
> # semipartial corrleation 값과 이를 
> # 제곱한 값을 알아봅니다. 
> 
> library(ppcor)
> attach(Carseats)
The following objects are masked from Carseats (pos = 3):

    Advertising, Age, CompPrice, Education, Income, Population, Price,
    Sales, ShelveLoc, Urban, US

The following objects are masked from Carseats (pos = 4):

    Advertising, Age, CompPrice, Education, Income, Population, Price,
    Sales, ShelveLoc, Urban, US

> spcor.Price <- spcor.test(Sales, Price, CompPrice)
> spcor.CompPrice <- spcor.test(Sales, CompPrice, Price)
> 
> spcor.Price
    estimate      p.value statistic   n gp  Method
1 -0.5947496 1.561477e-39 -14.74081 400  1 pearson
> spcor.CompPrice
  estimate     p.value statistic   n gp  Method
1 0.399815 9.53872e-17  8.691134 400  1 pearson
> 
> # 위 둘의 아웃풋에서 estimate값은 
> # semipartial correlation 값이므로 이를 
> # 제곱한 값은 각각 b와 d에 해당하는 
> # 값입니다. 이를 더 자세히 이야기하면
> # b = b / a + b + c + d
> # d = d / a + b + c + d
> # 라는 이야기입니다. 
> 
> b <- spcor.Price$estimate^2
> d <- spcor.CompPrice$estimate^2 
> 
> # 각 b와 d를 출력해 봅니다. 
> b
[1] 0.3537271
> d
[1] 0.159852
> 
> # 이 둘을 더해봅니다. 
> # 이 값은 0.5135791 입니다
> b + d
[1] 0.5135791
> 
> # 다시 아까 lm.c1의 R 제곱값은 
> summary(lm.c1)$r.squared
[1] 0.3578332
> # 0.3578332 입니다. 
> 
> # 다시 그림을 보면
> # R 제곱은 b + c + d 에 해당하는 
> # 것이라고 했고
> # semi-partial 값을 각각 구하여
> # 이를 제곱하여 더한 것이 b와 d입니다.
> # 그런데 그림을 보면 b + d > b + c + d 가
> # 됩니다.  그렇지만 그림대로라면 
> # 이것은 말이 되지 않습니다. 그런데 
> # 계산값을 이를 가르키고 있습니다. 
> # 이 이유가 뭘까요?
> 
> # 여러분의 생각 후에 mediator 분석에 대해서
> # 설명을 하도록 하겠습니다. 
> #
> #
> 
> cs.dat <- Carseats[, c(1,2,6)]
> str(cs.dat)
'data.frame':	400 obs. of  3 variables:
 $ Sales    : num  9.5 11.22 10.06 7.4 4.15 ...
 $ CompPrice: num  138 111 113 117 141 124 115 136 132 132 ...
 $ Price    : num  120 83 80 97 128 72 108 120 124 124 ...
> round(cor(cs.dat),3)
           Sales CompPrice  Price
Sales      1.000     0.064 -0.445
CompPrice  0.064     1.000  0.585
Price     -0.445     0.585  1.000
> ia.1 <- lm(Sales~CompPrice, data=cs.dat)
> ia.2 <- lm(Sales~Price, data=cs.dat)
> ia.3 <- lm(Sales~CompPrice+Price, data=cs.dat)
> 
> # Price 에 CompPrice를 더한 것에 따라서 
> # r square 값의 증가분이 의미가 있는가를 
> # 테스트 
> anova(ia.2, ia.3)
Analysis of Variance Table

Model 1: Sales ~ Price
Model 2: Sales ~ CompPrice + Price
  Res.Df    RSS Df Sum of Sq      F    Pr(>F)    
1    398 2552.2                                  
2    397 2043.5  1    508.69 98.824 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> # 증가분은 
> summary(ia.3)$r.squared - summary(ia.2)$r.squared
[1] 0.159852
> 
> # mediated effect = CompPrice에 대한 Price의 설명력이
> # 얼마나 Sales를 설명하는가?
> 
> ia.0 <- lm(CompPrice~Price, data=cs.dat)
> 
> # CompPrice에 대한 Price의 설명력
> med.price.2.compprice <- ia.0$fitted.values - mean(cs.dat$CompPrice)
> cor(med.price.2.compprice, cs.dat$Sales)
[1] -0.4449507
> cor(cs.dat$Price, cs.dat$Sales)
[1] -0.4449507
> 
> ia.01 <- lm(Sales~med.price.2.compprice, data=cs.dat)
> summary(ia.01)

Call:
lm(formula = Sales ~ med.price.2.compprice, data = cs.dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.5224 -1.8442 -0.1459  1.6503  7.5108 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)            7.49633    0.12662  59.205   <2e-16 ***
med.price.2.compprice -0.14011    0.01414  -9.912   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.532 on 398 degrees of freedom
Multiple R-squared:  0.198,	Adjusted R-squared:  0.196 
F-statistic: 98.25 on 1 and 398 DF,  p-value: < 2.2e-16

> summary(ia.2)

Call:
lm(formula = Sales ~ Price, data = cs.dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.5224 -1.8442 -0.1459  1.6503  7.5108 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 13.641915   0.632812  21.558   <2e-16 ***
Price       -0.053073   0.005354  -9.912   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.532 on 398 degrees of freedom
Multiple R-squared:  0.198,	Adjusted R-squared:  0.196 
F-statistic: 98.25 on 1 and 398 DF,  p-value: < 2.2e-16

> ia.02 <- lm(Sales~ia.0$residuals, data=cs.dat)
> summary(ia.02)

Call:
lm(formula = Sales ~ ia.0$residuals, data = cs.dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.5398 -1.9298 -0.1402  1.7502  7.4355 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)     7.49632    0.12959  57.846   <2e-16 ***
ia.0$residuals  0.09078    0.01043   8.702   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.592 on 398 degrees of freedom
Multiple R-squared:  0.1599,	Adjusted R-squared:  0.1577 
F-statistic: 75.73 on 1 and 398 DF,  p-value: < 2.2e-16

> 
> summary(ia.01)$r.squared
[1] 0.1979812
> summary(ia.02)$r.squared
[1] 0.159852
> summary(ia.01)$r.squared + summary(ia.02)$r.squared
[1] 0.3578332
> summary(ia.3)

Call:
lm(formula = Sales ~ CompPrice + Price, data = cs.dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.5285 -1.6207 -0.2404  1.5269  6.2437 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  6.278692   0.932774   6.731 5.91e-11 ***
CompPrice    0.090777   0.009132   9.941  < 2e-16 ***
Price       -0.087458   0.005914 -14.788  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.269 on 397 degrees of freedom
Multiple R-squared:  0.3578,	Adjusted R-squared:  0.3546 
F-statistic: 110.6 on 2 and 397 DF,  p-value: < 2.2e-16

> 
> 
suppressor_in_multiple_regression.txt · Last modified: 2023/10/23 20:10 by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki