Diagnostics

Applied Multiple Regression/Correlation Analysis for the Behavioral Sciences by Jacob Cohen, Patricia Cohen, Stephen G. West, Leona S. Aiken

Author

Sungkyun Cho

Published

June 14, 2024

Generalized Linear Models

\(Y = \beta_0 + \beta_1 X + \epsilon\)

Ordinary least squares (OLS)

  • Mean function: \(E(Y | X = x_i) = \beta_0 + \beta_1 x_i\)
  • Distribution: \((Y | X = x_i) \sim N(\beta_0 + \beta_1 x_i, \sigma^2)\)

Source: p.107, Applied Regression Analysis and Generalized Linear Models (3e), by John Fox

Generalized linear models (GLM)

OLS의 가정에 맞지 않는 경우, 가정을 완화한 모델

  • Mean function: \(E(Y | X = x_i) = f(\beta_0 + \beta_1 x_i)\)
  • Distribution: \((Y | X = x_i) \sim \text{Exponential family}\)

Binary outcome: Logistic regression

  • Mean function: \(\displaystyle E(Y | X = x_i) = f(\beta_0 + \beta_1 x_i)\),   \(\displaystyle f = \frac{1}{1 + e^{-x}}\) : sigmoid function
  • Distribution: \((Y | X = x_i) \sim \text{Bernoulli}(p)\): n=1인 이항분포

Count outcome: Poisson regression

  • Mean function: \(\displaystyle E(Y | X = x_i) = f(\beta_0 + \beta_1 x_i)\),   \(\displaystyle f = e^x\)
  • Distribution: \((Y | X = x_i) \sim \text{Poisson}(\lambda_i)\)

전형적으로 나타나는 \(X\)\(Y\)의 관계

Source: p.482, Applied Multiple Regression/Correlation Analysis for the Behavioral Sciences (3e), by Cohen, J., Cohen, P., West, S. G., & Aiken, L. S.

Linear Least Squares Regression의 가정들

  • L (linearity, 선형성): X의 각 값에 해당하는 Y값들의 평균들은 X와 선형적인 관계를 가짐.
    • Mean function: \(E(Y | X = x_i) = \beta_0 + \beta_1 x_i\)
  • I (independence, 독립성): 잔차들(errors)은 서로 독립.
  • N (normally distributed, 정규성): X의 각 값에 해당하는 Y값들은 정규분포를 이룸.
    • \((Y | X = x_i) \sim N(\beta_0 + \beta_1 x_i, \sigma^2)\)
  • E (equal variance, 등분산성): X의 각 값에 해당하는 Y값들의 표준편차들은 모두 동일함.
    • Variance fucntion: \(Var(Y | X = x_i) = \sigma^2\)

Source: Beyond Multiple Linear Regression, by Paul Roback, Julie Legler.

가정에 위배되는 연구/자료들

  • 공부한 시간에 따른 합격 여부
    • Y가 성공/실패 명목변수로서 0, 1로 코딩된다고 하면, Y는 정규분포를 이루지 않음.
    • 이런 경우 generalized linear model(GLM)의 일부로서 logistic regression 모형으로 fit을 하는 것이 더 적절함.
  • 부유한 가정은 더 적은 아이들을 가지는 경향이 있는가?
    • 가족의 크기는 정규분포를 이루기보단 한쪽으로 치우친(skewed) 분포를 이룸.
    • 가족의 크기는 0, 1, 2,… 등의 정수값을 가져, 연속형 변수로 보기 어려워 정규분포의 가정을 만족하기 어려움.
    • 이런 경우 가족의 크기는 Poisson 분포에 더 가깝다고 보고, Poisson regression 모형이나 그 변형들로 fit을 하는 것이 더 적절함.
  • 대학 안에서 임의로 선정한 남녀 학생들의 운동시간과 몸무게의 관계
    • 운동을 전혀 하지 않는 학생들의 몸무게의 변량이 규칙적으로 한 학생들에 비해 더 넓게 분포할 가능성이 큼: 이는 equal variance 가정을 위배함.
    • 만약, 대학 내에서 특정 장소들을 포함해 학생들을 섭외했다면, 예를 들어, 피트니스 센터에서 섭외된 학생들의 데이터는 서로 연관성이 높을 수 있음: 이는 independence 가정에 위배됨.
  • 특정 질병을 가진 환자들에 대한 특정 수술에 대한 효과를 연구한다면,
    • 동일한 의사에게 수술을 받은 환자들의 데이터는 서로 연관성이 높을 수 있음: 이는 independence 가정에 위배됨.
    • 동일한 병원에서 수술을 받은 환자들의 데이터는 서로 연관성이 높을 수 있음: 이는 independence 가정에 위배됨.

대처방안/대안들

  • Linearity의 가정에 위배되는 경우: 변수들을 변환(transform)하거나 고차 다항식 혹은 확장된 모형(eg. spline)을 사용
  • Normality의 가정에 위배되는 경우: 변수들을 변환(transform)하거나 generalized linear model(GLM)을 사용
  • Equal variance의 가정에 위배되는 경우: 변수들을 변환(transform)하거나 weighted least squares regression을 사용
  • Independence의 가정에 위배되는 경우: multi-level (mixed-effects) 모형을 사용

OLS에서 모집단에 대한 가정들에 대한 진단

Source: An R Companion to Applied Regression (3e), by John Fox, Sanford Weisberg.

연구자는 기본적으로 변수 간의 true relationship이 존재할 것이라고 믿으며, 모집단에서 그 관계가 완전한 형태로 존재한다고 가정하고, 그 관계를 표본으로부터 최대한 추론하고자 함.
OLS 방식으로 모집단에 대한 추론을 하려면, OLS가 요구하는 모집단에 대한 가정들이 위배되지 않아야 함.
연구자는 관찰된 표본이 “LINE 가정들을 만족하는 모집단”으로부터 표집된 표본이라고 볼만한 충분한 확신이 있어야 함.
이를 위해서 표본들로부터 대략적인 추정을 할 수 밖에 없음.

예제: Prestige 데이터셋

library(car)

Prestige <- Prestige |> as_tibble() |> 
  mutate(type = factor(type, levels = c("bc", "wc", "prof")))
Prestige
# A tibble: 102 × 6
   education income women prestige census type 
       <dbl>  <int> <dbl>    <dbl>  <int> <fct>
 1      13.1  12351 11.2      68.8   1113 prof 
 2      12.3  25879  4.02     69.1   1130 prof 
 3      12.8   9271 15.7      63.4   1171 prof 
 4      11.4   8865  9.11     56.8   1175 prof 
 5      14.6   8403 11.7      73.5   2111 prof 
 6      15.6  11030  5.13     77.6   2113 prof 
 7      15.1   8258 25.6      72.6   2133 prof 
 8      15.4  14163  2.69     78.1   2141 prof 
 9      14.5  11377  1.03     73.1   2143 prof 
10      14.6  11023  0.94     68.8   2153 prof 
# ℹ 92 more rows
mod_prestige <- lm(prestige ~ education + income + type, data = Prestige)
S(mod_prestige)
Call: lm(formula = prestige ~ education + income + type, data = Prestige)

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.6229292  5.2275255  -0.119    0.905    
education    3.6731661  0.6405016   5.735 1.21e-07 ***
income       0.0010132  0.0002209   4.586 1.40e-05 ***
typewc      -2.7372307  2.5139324  -1.089    0.279    
typeprof     6.0389707  3.8668551   1.562    0.122    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard deviation: 7.095 on 93 degrees of freedom
  (4 observations deleted due to missingness)
Multiple R-squared: 0.8349
F-statistic: 117.5 on 4 and 93 DF,  p-value: < 2.2e-16 
   AIC    BIC 
669.02 684.52 

Plotting Residuals

잔차들의 분포: \((e | X = x_i) \sim N(0, \sigma^2)\)
즉, 특별한 패턴이 없어야 함

  • 선형적 관계성(Linearity)이 확보되고,
  • 등분산성(Equal variance)이 확보됨.
residualPlots(
  mod_prestige, 
  id=list(n=3), # outliers의 수
  smooth=TRUE, # loess smooth 커브
  quadratic=FALSE # 3차 fitted 커브
)

           Test stat Pr(>|Test stat|)   
education    -0.6836         0.495942   
income       -2.8865         0.004854 **
type                                    
Tukey test   -2.6104         0.009043 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 특정 변수만 선택
residualPlots(mod_prestige, ~ income, fitted=FALSE, smooth=TRUE, id=list(n=3))

       Test stat Pr(>|Test stat|)   
income   -2.8865         0.004854 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# QQplot: 전체적인 잔차의 분포가 정규분포를 따르는지 확인: y=x 라인에 가까울수록 정규분포를 따름
qqPlot(mod_prestige, id=list(n=3)) # qq plot

[1] 31 54 82

등분산성(equal variance)이 심하게 위배되는 경우;

mod_transact <- lm(time ~ t1 + t2, data=Transact)
residualPlots(mod_transact, test=FALSE, layout=c(1, 3))

통계적으로 등분산성(equal variance)을 테스트할 수 있음: ncvTest()

Note

등분산성을 만족하지 않는 경우: Heteroskedasticity

  • Weighted least squares (WLS) 방식으로 추정
  • 좀 더 자연스러운 generalized linear model (GLM) with the identity link and gamma errors(확률 분포).
  • 등분산성은 회귀계수 값 자체는 크게 영향을 주지 않으므로, OLS로 회귀계수는 추정하되, 유의성 검증(SE, p values)은 bootstrap을 이용하거나 a sandwich coefficient-variance estimator로 계산하는 방식을 선택.
library(parameters)
model_parameters(mod_transact) |> print(digits=3)
Parameter   | Coefficient |      SE |              95% CI | t(258) |      p
---------------------------------------------------------------------------
(Intercept) |     144.369 | 170.544 | [-191.466, 480.205] |  0.847 | 0.398 
t1          |       5.462 |   0.433 | [   4.609,   6.315] | 12.607 | < .001
t2          |       2.035 |   0.094 | [   1.849,   2.220] | 21.567 | < .001
  1. Sandwich coefficient-variance estimator
model_parameters(mod_transact, vcov = "HC3") # HC3 방식
# A tibble: 3 × 9
  Parameter   Coefficient      SE    CI  CI_low CI_high      t df_error        p
  <chr>             <dbl>   <dbl> <dbl>   <dbl>   <dbl>  <dbl>    <int>    <dbl>
1 (Intercept)      144.   203.     0.95 -256.    544.    0.711      258 4.78e- 1
2 t1                 5.46   0.729  0.95    4.03    6.90  7.49       258 1.06e-12
3 t2                 2.03   0.163  0.95    1.71    2.36 12.4        258 3.60e-28
  1. Bootstrap
library(parameters)
bootstrap_parameters(mod_transact, ci_method = "BCI") # BCI 방식
# A tibble: 3 × 5
  Parameter   Coefficient  CI_low CI_high     p
  <chr>             <dbl>   <dbl>   <dbl> <dbl>
1 (Intercept)      147.   -220.    542.    0.44
2 t1                 5.52    4.02    6.68  0   
3 t2                 2.03    1.74    2.34  0   

Added-Variable Plots

Partial regression plot이라고도 함.
다른 변수들을 partial out시킨 잔차들로 그림.

  • 각 회귀계수에 대한 precision을 살펴볼 수 있음
  • 각 관측치에 대한 leverage를 살펴볼 수 있음
# 수평선 중심에서 가장 먼 점들 2개
# 잔차의 값이 가장 큰 점들 2개
avPlots(mod_prestige, id=list(n=2, cex=0.8)) # id: outliers의 수, cex: 점의 크기 80%

# 특정 관측치 제거 후 다시 그림
mod_prestige_1 = update(mod_prestige, subset = -c(2, 24))  # 2, 24번째 관측치 제거
avPlots(mod_prestige_1)

compareCoefs(mod_prestige, mod_prestige_1, se = FALSE, pvals = TRUE)
Calls:
1: lm(formula = prestige ~ education + income + type, data = Prestige)
2: lm(formula = prestige ~ education + income + type, data = Prestige, 
  subset = -c(2, 24))

            Model 1 Model 2
(Intercept)  -0.623   0.749
Pr(>|z|)      0.905   0.889
                           
education      3.67    3.31
Pr(>|z|)    9.8e-09 1.5e-06
                           
income      0.00101 0.00133
Pr(>|z|)    4.5e-06 1.2e-05
                           
typewc        -2.74   -1.66
Pr(>|z|)      0.276   0.526
                           
typeprof       6.04    7.18
Pr(>|z|)      0.118   0.071
                           

Unusual Data

  • outliers: 모형의 예측값과 크게 다른 관측치
  • high-leverage points: 예측변수들의 공간에서 중심으로부터 멀리 떨어진 관측치
  • influential points: outlier이면서 high-leverage point인 관측치

우선, 위에서 다룬 add-variable plots를 통해서 두 변수의 joint로써 influential points를 찾을 수 있음.

다음은 각 변수들 내에서의 influential points에 관한 진단임.

예제: Duncan 데이터셋

Duncan <- Duncan |> as_tibble()
Duncan
# A tibble: 45 × 4
   type  income education prestige
   <fct>  <int>     <int>    <int>
 1 prof      62        86       82
 2 prof      72        76       83
 3 prof      75        92       90
 4 prof      55        90       76
 5 prof      64        86       90
 6 prof      21        84       87
 7 prof      64        93       93
 8 prof      80       100       90
 9 wc        67        87       52
10 prof      72        86       88
# ℹ 35 more rows
mod_duncan <- lm (prestige ~ income + education, data=Duncan)
S(mod_duncan)
Call: lm(formula = prestige ~ income + education, data = Duncan)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -6.06466    4.27194  -1.420    0.163    
income       0.59873    0.11967   5.003 1.05e-05 ***
education    0.54583    0.09825   5.555 1.73e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard deviation: 13.37 on 42 degrees of freedom
Multiple R-squared: 0.8282
F-statistic: 101.2 on 2 and 42 DF,  p-value: < 2.2e-16 
   AIC    BIC 
365.96 373.19 

Outliers

qqPlot(): 95% pointwise confidence envelope for the Studentized residuals, using a parametric version of the bootstrap.
outlierTest(): Bonferroni-adjusted p-values for the Studentized residuals.

qqPlot(mod_duncan, id=list(n=3))

[1]  6  9 17
outlierTest(mod_duncan)
No Studentized residuals with Bonferroni p < 0.05
Largest |rstudent|:
  rstudent unadjusted p-value Bonferroni p
6 3.134519          0.0031772      0.14297

Influential points에 대한 지표들

  • Cook’s distance: i번째 관측치가 제거되었을 때 회귀계수의 변화량에 대한 요약치
  • Studentized residuals: 표준화한 잔차
  • Bonferroni-adjusted p-values: 잔차의 분포에 대한 p-value를 Bonferroni 방식으로 보정한 값
  • hat-values: 예측변수들의 공간에서 중심으로부터 멀리 떨어진 정도

가장 큰 값들에 해당하는 관측치들을 제거해보고 회귀분석을 한 후 결과를 비교
원칙적으로 한번에 한 관측치만 제거하고, 차례로 진단을 해야 함; 전체적인 fit이 변하므로

influenceIndexPlot(mod_duncan)

# 6번째 관측치 제거
mod_duncan2 <- update(mod_duncan, subset = -6)
compareCoefs(mod_duncan, mod_duncan2, pvals = TRUE)
Calls:
1: lm(formula = prestige ~ income + education, data = Duncan)
2: lm(formula = prestige ~ income + education, data = Duncan, subset = -6)

            Model 1 Model 2
(Intercept)   -6.06   -6.63
SE             4.27    3.89
Pr(>|z|)      0.156   0.088
                           
income        0.599   0.732
SE            0.120   0.117
Pr(>|z|)    5.6e-07 3.7e-10
                           
education    0.5458  0.4330
SE           0.0983  0.0963
Pr(>|z|)    2.8e-08 6.9e-06
                           
# leave-one-out deletion diagnostics
# i번째 관측치를 제거했을 때, 각 예측변수들의 변화량을 나타냄
# dfbeta: 차이, debetas: SE로 표준화한 차이
dfbetas(mod_duncan) |> head() |> print(digits = 2)
  (Intercept)   income education
1    -2.3e-02  0.00067   0.03594
2    -2.5e-02  0.05088  -0.00812
3    -9.2e-03  0.00648   0.00562
4    -4.7e-05 -0.00006   0.00014
5    -6.6e-02  0.01700   0.08678
6     1.4e-01 -1.22094   1.26302
# dfbetas를 플랏으로 나타내면,
df <- dfbetas(mod_duncan) |> as_tibble()

library(ggrepel)
df |> 
  ggplot(aes(x=income, y=education)) +
  geom_point() +
  geom_text_repel(aes(label = row.names(df)))

Added-variable plot으로도 확인해 볼 수 있음

  • Influential points가 각 예측변수에서 살펴보는 것과는 다르게
  • Added-variable plot은 joint로써의 영향력을 보고 outliers를 찾을 수 있음
avPlots(mod_duncan, id=list(n=3, method="mahal")) # 중심으로부터의 거리(mahalanobis distance)만 표시

# 6, 16번째 관측치 제거
mod_duncan3 <- update(mod_duncan, subset = -c(6, 16))
compareCoefs(mod_duncan, mod_duncan3)
Calls:
1: lm(formula = prestige ~ income + education, data = Duncan)
2: lm(formula = prestige ~ income + education, data = Duncan, subset = -c(6,
   16))

            Model 1 Model 2
(Intercept)   -6.06   -6.41
SE             4.27    3.65
                           
income        0.599   0.867
SE            0.120   0.122
                           
education    0.5458  0.3322
SE           0.0983  0.0987
                           

선형성에 대한 진단

Component-Plus-Residual (partial-residual plots): \(\displaystyle e+{\hat {\beta }}_{i}X_{i}\)
crPlots()

초기 탐색적 분석이나 모형을 세우 후 residualPlots으로도 살펴볼 수 있음.

비선형성에 대해서는 변수를 변환(transform)하거나 고차 다항함수 모형, 혹은 더 복잡한 spline 모형을 이용.

mod_prestige_2 <- lm(prestige ~ income + education + women, data=Prestige)
crPlots(mod_prestige_2)

변수의 변환(transform) 및 고차원 모형

선형성, 등분산성, 정규성 등은 각각 다른 개념이나 변수의 변형을 통해 동시에 해결되기도 함.

  • log변환은 정규성과 선형성을 동시에 해결해주는 경우가 많음.
  • 또한 의미적으로도 해석이 용이함. 몇 배의 의미로 바뀜.
  • 복잡한 변환에 대해서 다음을 참조
    • Box-Cox Power Transformations
    • powerTransform()

예제: UN in carData

UN |> 
  ggplot(aes(x=ppgdp)) +
  geom_density()
UN |> 
  ggplot(aes(x=infantMortality)) +
  geom_density()
UN |> 
  ggplot(aes(x=ppgdp, y=infantMortality)) +
  geom_point() +
  geom_smooth()
UN |> 
  ggplot(aes(x=log(ppgdp), y=log(infantMortality))) +
  geom_point() +
  geom_smooth()

위의 Presitge의 예의 경우, income을 log변환하는 것이 적절함.

mod_prestige <- lm(prestige ~ education + income + type, data = Prestige)
mod_prestige_log <- lm(prestige ~ education + log2(income) + type, data = Prestige)

residualPlots(mod_prestige, ~income, test=FALSE, fitted=FALSE)
residualPlots(mod_prestige_log, ~log2(income), test=FALSE, fitted=FALSE)
S(mod_prestige_log)

Call: lm(formula = prestige ~ education + log2(income) + type, data = Prestige)

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -81.2019    13.7431  -5.909 5.63e-08 ***
education      3.2845     0.6081   5.401 5.06e-07 ***
log2(income)   7.2694     1.1900   6.109 2.31e-08 ***
typewc        -1.4394     2.3780  -0.605   0.5465    
typeprof       6.7509     3.6185   1.866   0.0652 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard deviation: 6.637 on 93 degrees of freedom
  (4 observations deleted due to missingness)
Multiple R-squared: 0.8555
F-statistic: 137.6 on 4 and 93 DF,  p-value: < 2.2e-16 
   AIC    BIC 
655.93 671.44 

이 때, log2(income)에 대한 회귀계수의 해석은 income이 2배 늘면(=log2(income)이 1증가하면) prestige가 7.27점 증가하는지를 나타냄.

변수의 변환이 아닌 모형의 복잡도를 높혀 좀 더 나은 fit을 얻을 수도 있음.

  • 다항함수 모형
  • Spline 모형

예제: CPS85 in mosaicData

cps <- mosaicData::CPS85 |> as_tibble()
cps2 <- cps |> 
  mutate(log_wage = log(wage)) |> 
  filter(wage < 30 & log_wage > 1)

cps2 |>
  ggplot(aes(x = age, y = wage)) +
  geom_point(alpha = .7) +
  geom_smooth() +
  scale_y_continuous(label = scales::label_dollar()) +
  labs(y = "wage (dollars per hour)")

cps2 |>
  ggplot(aes(x = wage)) +
  geom_density()

mod_cps_poly <- lm(log_wage ~ married * sex + age + I(age^2), data = cps2) # 2차 다항함수
residualPlots(mod_cps_poly, test=FALSE)

Spline 모형: piece-wise polynomial
bs(), ns() in splines 패키지

  • ns(): natural spline 모형 (boundary constraints)
library(splines)
mod_cps_ns <- lm(log_wage ~ married * sex + ns(age, 3), data = cps2) # 3-piecewise natural spline

다항함수 모형과 spline 모형의 비교

library(effects)
plot(predictorEffects(mod_cps_poly, ~age))
plot(predictorEffects(mod_cps_ns, ~age))

다중공선성에 대한 진단

OLS의 가정과는 관계없으나, 통계적 파워를 낮추는 요인이 됨.
탐색적 분석 과정에서 변수들 간에 심각하게 상관계수(r)가 높은 경우 주의

지표로는 Variance Inflation Factor(VIF)

  • 예를 들어, \(X_1\)에 대한 VIF: \(\displaystyle {1 - R^2_{1.23}}\) 의 역수
  • 즉, \(X_2, X_3\)\(X_1\)이 설명되지 않는, 즉 독립적인 정도의 역수
  • 다른 예측 변수들로 잘 설명되는 예측변수라면, standard error(SE)가 증폭되어 회귀계수의 신뢰성이 떨어짐. (불안정하다는 의미)
  • VIF 값은 예측변수들이 서로 독립적일 때에 비해 SE가 얼마나 증폭되는지를 나타냄.
  • VIF 값이 10 이면 \(\sqrt{10}=3.16\) 배의 SE 증폭이 발생.
  • VIF 값이 10 이상이면 심각한 다중공선성이 발생했다고 판단.
  • 상호작용항이 포함된 경우, (두 변수의 곱으로 만든 항이므로) centering을 하지 않은 경우, VIF값이 크게 나올 수 있으나 실질적인 문제는 전혀 없음.
mod_prestige_2 <- lm(prestige ~ income + education + women, data=Prestige)
summ(mod_prestige_2, vif=TRUE, model.info = FALSE) |> print()
MODEL FIT:
F(3,98) = 129.19, p = 0.00
R² = 0.80
Adj. R² = 0.79 

Standard errors: OLS
-------------------------------------------------------
                     Est.   S.E.   t val.      p    VIF
----------------- ------- ------ -------- ------ ------
(Intercept)         -6.79   3.24    -2.10   0.04       
income               0.00   0.00     4.73   0.00   2.28
education            4.19   0.39    10.77   0.00   1.85
women               -0.01   0.03    -0.29   0.77   1.53
-------------------------------------------------------

연습문제

다음은 Multiple Regression and Beyond (3e) by Timothy Z. Keith의 p.87에서 제시된 경로모형입니다. 지난 번에 cleaning한 데이터를 이용해도 되고, 다음 데이터를 이용해도 됩니다.

  • 데이터 NELS88 sample.csv
  • Figure 5.9에서는 자존감과 자기통제력이 학업성취도에 미치는 영향에 대해 설정한 관계를 보여줍니다.

nels <- read_csv("data/nels88_sample.csv")
nels <- nels |> select(self = f1cncpt2, locus = f1locus2, ses = byses, grade = f1txhstd, previous = bygrads, sex) |> 
  mutate(sex = factor(sex, labels=c("male", "female")))
nels |> head(3)
# A tibble: 3 × 6
   self locus    ses grade previous sex   
  <dbl> <dbl>  <dbl> <dbl>    <dbl> <fct> 
1 -0.64 -0.6  -0.41   47.8      2.5 female
2  0.14  0.07  0.528  59.5      3.8 male  
3  1.16  0.74  0.958  53.2      3.3 male  
  • Achievement에 영향을 주는 것으로 보이는 a, b, c, d의 회귀계수를 추정하고, 해석해 보세요.
  • Self-esteem이 Achievement에 주는 직접효과(a)와 간접효과(e –> d)에 대해 분석하고, 해석해 보세요.
  • 다음과 같이 소위 “위계적 분석” 방식으로 각 모형의 회귀계수와 \(R^2\)값이 어떻게 바뀌는지 보고, 그 의미를 해석해 보세요.
  • 마지막 모형 mod5에 대해 회귀분석 가정들에 대한 진단을 수행하면서, 특이한 관측치들도 제거하고 그 변화를 살펴 보세요.
mod1 <- lm(grade ~ self, data = nels)
mod2 <- lm(grade ~ self + locus, data = nels)
mod3 <- lm(grade ~ self + locus + ses, data = nels)
mod4 <- lm(grade ~ self + locus + ses + previous, data = nels)
mod5 <- lm(grade ~ self + locus + ses + previous + sex, data = nels)