Path Analysis

Multivariate Data Analysis

Description for Path Analysis

Yeongeun Jeon
11-01-2022

1. 데이터

# 데이터 불러오기
data <- read.csv("C:/Users/User/Desktop/실패.csv")
head(data)
  질책 격려 실패불안 학습의욕 학업성적
1    9   12       16       17       66
2    6    6       30       16       68
3    7    9       22       19       44
4    4   12       23       16       56
5    3    3       17       18       83
6    4   11       22       19       61
# 데이터 구조
str(data)
'data.frame':   500 obs. of  5 variables:
 $ 질책    : int  9 6 7 4 3 4 7 5 3 5 ...
 $ 격려    : int  12 6 9 12 3 11 8 11 12 8 ...
 $ 실패불안: int  16 30 22 23 17 22 15 55 37 29 ...
 $ 학습의욕: int  17 16 19 16 18 19 20 9 14 17 ...
 $ 학업성적: int  66 68 44 56 83 61 84 46 51 36 ...

2. 경로분석

경로분석은 Package lavaan을 통해 수행할 수 있다.

2-1. 모형 기술

# 모형 기술model <- '
 실패불안 ~ 질책                  
 학습의욕 ~ 격려
 학업성적 ~ 실패불안 + 학습의욕
'

2-2. 모수 추정

# 모수 추정pacman::p_load("lavaan")

fit <- sem(model,                     # 기술한 모형을 대입한 객체NA= data)               # 데이터
# 분석 결과 출력
summary(fit,                          # 분석 결과를 저장하고 있는 객체        standardized = TRUE,          # 표준화 추정값의 출력 여부NA= TRUE)               # 결정계수의 출력 여부
lavaan 0.6-12 ended normally after 1 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         7

  Number of observations                           500

Model Test User Model:
                                                      
  Test statistic                               117.641
  Degrees of freedom                                 5
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv
  실패불안 ~                                                   
    질책              1.628    0.234    6.948    0.000    1.628
  학습의욕 ~                                                   
    격려              0.224    0.064    3.519    0.000    0.224
  학업성적 ~                                                   
    실패불안         -0.138    0.046   -2.964    0.003   -0.138
    학습의욕          0.904    0.162    5.572    0.000    0.904
  Std.all
         
    0.297
         
    0.155
         
   -0.128
    0.240

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv
   .실패불안        146.580    9.271   15.811    0.000  146.580
   .학습의욕         12.865    0.814   15.811    0.000   12.865
   .학업성적        173.522   10.974   15.811    0.000  173.522
  Std.all
    0.912
    0.976
    0.925

R-Square:
                   Estimate
    실패불안          0.088
    학습의욕          0.024
    학업성적          0.075

Caution! 결과 출력은 함수 summary()를 이용하여 수행하며, 그 결과는 다음과 같다.
1. “Estimator”는 모수의 추정방법으로서 “ML”은 최대우도추정법을 의미한다.
2. “Model Test User Model”은 기술한 모형에 대한 모형 적합도로서 귀무가설 \(H_0\)은 “설정한 모형에 대한 공분산행렬과 표본에 의해 계산된 표본공분산행렬이 동일하다.”이며, 대립가설 \(H_1\)은 “설정한 모형에 대한 공분산행렬과 표본에 의해 계산된 표본공분산행렬이 동일하지 않다.”이다. 다시 말해, 귀무가설 \(H_0\)은 “설정한 모형은 데이터에 적합하다.”이며, 대립가설 \(H_1\)은 “설정한 모형은 데이터에 적합하지 않다.”이다.
3. “Regression”과 “Variance”는 모수 추정에 대한 결과이다. “Estimate”는 비표준화 추정값, “Std.Err”는 표준오차, “z-value”와 “P(>|z|)”는 귀무가설 \(H_0\) : “해당 경로계수는 0이다.”와 대립가설 \(H_1\) : “해당 경로계수는 0이 아니다.”에 대한 검정통계량의 \(z\) 값과 \(p\)-값이다. “Std.lv”는 잠재적인 구조변수의 분산만 1로 했을 때의 표준화 추정값을 나타내며, “Std.all”은 오차변수를 제외한 변수의 분산을 1로 했을 때의 표준화 추정값을 나타낸다. 이 모형에서는 잠재적인 구조가 없기 때문에 “Std.lv”값과 “Estimate”값이 동일하다.
4. “R-Square”은 결정계수 \(R^2\)을 의미한다. 결정계수는 0과 1사이의 값으로 1에 가까울수록 데이터의 변동을 적합된 모형이 잘 설명하고 있다고 할 수 있다.
Result! “Regression” 부분에는 경로계수에 대한 추정 결과가 출력되어 있다. 예를 들어, 실패불안 ~ 질책 행을 보면, 질책 → 실패불안 경로계수 \(\beta_1\)의 비표준화 추정값은 1.628(표준화 추정값은 0.297)로, \(p\)-값이 0이므로 경로계수가 유의한 의미를 가지고 있다고 볼 수 있다. 따라서, 추정값이 양수이기 때문에 시험에서 실패했을 때 질책을 받는 경험이 많은 자녀일수록 실패불안이 높은 경향을 보인다고 할 수 있다. 추정된 비표준화 경로계수에 의한 경로도는 다음과 같다.


“Variance” 부분은 오차변수의 분산 추정값을 나타낸다. 예를 들어, .실패불안 행은 실패불안의 오차변수 \(e_1\)의 분산을 의미한다.
“R-Square”은 결정계수를 나타낸다. 예를 들어, 실패불안질책으로부터 경로를 받았기 때문에 실패불안 중에 질책으로 설명할 수 있는 부분이 8.8%라고 해석할 수 있다. 이 점은 반대로 질책으로 설명할 수 없는 부분이 91.2%만큼 있다는 것을 의미하며, 이러한 부분은 오차변수 \(e_1\)으로 표현되어 있다. 그래서, 실제로 91.2%는 실패불안에서 오차 분산의 표준화 추정값(“Std.all”)과 동일하다.


summary(fit,                          # 분석 결과를 저장하고 있는 객체        standardized = TRUE,          # 표준화 추정값의 출력 여부NA= TRUE,               # 결정계수의 출력 여부        ci = TRUE)                    # 신뢰구간 출력 여부여부
lavaan 0.6-12 ended normally after 1 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         7

  Number of observations                           500

Model Test User Model:
                                                      
  Test statistic                               117.641
  Degrees of freedom                                 5
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower
  실패불안 ~                                                   
    질책              1.628    0.234    6.948    0.000    1.169
  학습의욕 ~                                                   
    격려              0.224    0.064    3.519    0.000    0.099
  학업성적 ~                                                   
    실패불안         -0.138    0.046   -2.964    0.003   -0.229
    학습의욕          0.904    0.162    5.572    0.000    0.586
 ci.upper   Std.lv  Std.all
                           
    2.088    1.628    0.297
                           
    0.348    0.224    0.155
                           
   -0.047   -0.138   -0.128
    1.222    0.904    0.240

Variances:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower
   .실패불안        146.580    9.271   15.811    0.000  128.410
   .학습의욕         12.865    0.814   15.811    0.000   11.270
   .학업성적        173.522   10.974   15.811    0.000  152.012
 ci.upper   Std.lv  Std.all
  164.749  146.580    0.912
   14.460   12.865    0.976
  195.032  173.522    0.925

R-Square:
                   Estimate
    실패불안          0.088
    학습의욕          0.024
    학업성적          0.075

Caution! 함수 summary()에 옵션 ci = TRUE를 지정함으로서 추정값의 신뢰구간을 출력할 수 있다.


2-3. 모형 평가와 수정

2-3-1. 모형 평가

summary(fit,                          # 분석 결과를 저장하고 있는 객체        standardized = TRUE,          # 표준화 추정값의 출력 여부NA= TRUE,               # 결정계수의 출력 여부        ci = TRUE,                    # 신뢰구간 출력 여부여부
        fit.measures = TRUE)          # 적합도 평가 출력 여부
lavaan 0.6-12 ended normally after 1 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         7

  Number of observations                           500

Model Test User Model:
                                                      
  Test statistic                               117.641
  Degrees of freedom                                 5
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                               227.626
  Degrees of freedom                                 9
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.485
  Tucker-Lewis Index (TLI)                       0.073

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -5303.001
  Loglikelihood unrestricted model (H1)      -5244.181
                                                      
  Akaike (AIC)                               10620.003
  Bayesian (BIC)                             10649.505
  Sample-size adjusted Bayesian (BIC)        10627.287

Root Mean Square Error of Approximation:

  RMSEA                                          0.212
  90 Percent confidence interval - lower         0.180
  90 Percent confidence interval - upper         0.246
  P-value RMSEA <= 0.05                          0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.115

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower
  실패불안 ~                                                   
    질책              1.628    0.234    6.948    0.000    1.169
  학습의욕 ~                                                   
    격려              0.224    0.064    3.519    0.000    0.099
  학업성적 ~                                                   
    실패불안         -0.138    0.046   -2.964    0.003   -0.229
    학습의욕          0.904    0.162    5.572    0.000    0.586
 ci.upper   Std.lv  Std.all
                           
    2.088    1.628    0.297
                           
    0.348    0.224    0.155
                           
   -0.047   -0.138   -0.128
    1.222    0.904    0.240

Variances:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower
   .실패불안        146.580    9.271   15.811    0.000  128.410
   .학습의욕         12.865    0.814   15.811    0.000   11.270
   .학업성적        173.522   10.974   15.811    0.000  152.012
 ci.upper   Std.lv  Std.all
  164.749  146.580    0.912
   14.460   12.865    0.976
  195.032  173.522    0.925

R-Square:
                   Estimate
    실패불안          0.088
    학습의욕          0.024
    학업성적          0.075

Caution! “CFI”와 “TLI”은 0.95 이상, “RMSEA”는 0.06 이하, “SRMR”은 0.08 이하면 모형 적합이 잘 이루어졌다고 판단할 수 있다. 하지만, 이러한 기준은 어디까지나 경험적인 것이기 때문에 기계적으로 판단할 수 없다는 점에 주의해야 한다.


# 모든 적합도 지표 출력NAfitmeasures(fit)
               npar                fmin               chisq 
              7.000               0.118             117.641 
                 df              pvalue      baseline.chisq 
              5.000               0.000             227.626 
        baseline.df     baseline.pvalue                 cfi 
              9.000               0.000               0.485 
                tli                nnfi                 rfi 
              0.073               0.073               0.070 
                nfi                pnfi                 ifi 
              0.483               0.268               0.494 
                rni                logl   unrestricted.logl 
              0.485           -5303.001           -5244.181 
                aic                 bic              ntotal 
          10620.003           10649.505             500.000 
               bic2               rmsea      rmsea.ci.lower 
          10627.287               0.212               0.180 
     rmsea.ci.upper        rmsea.pvalue                 rmr 
              0.246               0.000               6.951 
         rmr_nomean                srmr        srmr_bentler 
              6.951               0.115               0.115 
srmr_bentler_nomean                crmr         crmr_nomean 
              0.115               0.141               0.141 
         srmr_mplus   srmr_mplus_nomean               cn_05 
              0.115               0.115              48.052 
              cn_01                 gfi                agfi 
             65.120               0.876               0.627 
               pgfi                 mfi                ecvi 
              0.292               0.893               0.263 

Caution! 함수 fitmeasures()를 이용하면 Package lavaan에서 계산된 모든 적합도 지표를 출력할 수 있다.


2-3-2. 모형 수정

# 수정 지표 출력NAmodindices(fit)
        lhs op      rhs      mi     epc sepc.lv sepc.all sepc.nox
8      질책 ~~     질책   0.000   0.000   0.000    0.000    0.000
9      질책 ~~     격려   0.000   0.000   0.000       NA    0.000
10     격려 ~~     격려   0.000   0.000   0.000    0.000    0.000
11 실패불안 ~~ 학습의욕 101.086 -19.525 -19.525   -0.450   -0.450
12 실패불안 ~~ 학업성적   2.206  35.765  35.765    0.224    0.224
13 학습의욕 ~~ 학업성적   0.012  -1.524  -1.524   -0.032   -0.032
14 실패불안  ~ 학습의욕  95.372  -1.459  -1.459   -0.418   -0.418
15 실패불안  ~ 학업성적  26.448  -0.547  -0.547   -0.590   -0.590
16 실패불안  ~     격려   1.718   0.308   0.308    0.061    0.024
17 학습의욕  ~ 실패불안  96.308  -0.125  -0.125   -0.437   -0.437
18 학습의욕  ~ 학업성적  39.464   0.377   0.377    1.423    1.423
19 학습의욕  ~     질책   0.265  -0.039  -0.039   -0.025   -0.011
20 학업성적  ~     질책   2.206  -0.397  -0.397   -0.067   -0.029
21 학업성적  ~     격려   0.012   0.026   0.026    0.005    0.002
22     질책  ~ 실패불안   1.426   0.021   0.021    0.113    0.113
23     질책  ~ 학습의욕   0.252  -0.013  -0.013   -0.020   -0.020
24     질책  ~ 학업성적   2.901  -0.012  -0.012   -0.072   -0.072
25     질책  ~     격려   0.000   0.000   0.000    0.000    0.000
26     격려  ~ 실패불안   1.427   0.009   0.009    0.047    0.047
27     격려  ~ 학습의욕   0.252  -0.034  -0.034   -0.049   -0.049
28     격려  ~ 학업성적   0.535  -0.006  -0.006   -0.031   -0.031
29     격려  ~     질책   0.000   0.000   0.000    0.000    0.000

Caution! 출력 결과에서 “mi” 값은 수정 지표, “epc”는 추가된 경로계수 추정값의 변화 기댓값, “sepc.lv”는 잠재적인 구조변수의 분산만 1로 했을 때의 변화 기댓값, “sepc.all”은 오차변수를 제외한 변수의 분산을 1로 했을 때의 변화 기댓값, “sepc.nox”는 외생변수를 제외한 변수의 분산을 1로 했을 때의 변화 기댓값이다. ~~는 변수 간의 공분산(상관, ↔︎)을 나타낸다.
Result! 예를 들어, 11 실패불안 ~~ 학습의욕 행은 실패불안의 오차변수와 학습의욕의 오차변수 사이에 상관관계(즉, \(e_1\) ↔︎ \(e_2\))를 두면, 모형의 \(\chi^2\) 값이 101.086 작아지는 것을 의미한다. 또한, 실패불안학습의욕 사이의 공분산 기댓값은 -19.525, 상관계수의 기대값(“sepc.all”)은 -0.450로 나타났다. 그리고 14 실패불안 ~ 학습의욕 행은 학습의욕 → 실패불안이라는 경로를 추가했을 때의 수정 지표(“mi”)와 학습의욕 → 실패불안의 경로계수 추정값의 변화 기댓값에 관한 정보를 나타내고 있다.
수정 지표(“mi”)를 살펴보면, 11 실패불안 ~~ 학습의욕 행의 “mi” 값이 가장 높으며, 이는 실패불안의 오차변수와 학습의욕의 오차변수 사이에 공분산(상관)을 두는 것으로 모형 적합도가 개선되는 것을 알 수 있다. 오차변수 사이에 상관을 가정한다는 것은 “변수 질책격려 외에 실패불안학습의욕에 공통되는 변수(즉, 두 변수와 각각 상관을 갖는 변수)가 있다는 것을 가정한다.”는 의미이다. 예를 들어, 학업에 자신 있는 학습자일수록 실패에 대한 불안감이 낮고 학습 의욕은 높다고 생각할 수 있다. 이와 같이 본인의 자신감이라는 요인이 오차 간 상관을 생성하고 있을 가능성이 있기 때문에 오차 간에 상관을 가정하는 것은 합리적이라고 할 수 있다. 따라서, 실패불안의 오차변수와 학습의욕의 오차변수 사이에 상관을 가정하는 것으로 수정한 후 다시 분석을 한다. 수정 후 모형은 다음과 같은 경로도로 나타낼 수 있다.


# 오차변수 사이에 상관을 가정한 모형 기술model2 <- '
 실패불안 ~ 질책                  
 학습의욕 ~ 격려
 학업성적 ~ 실패불안 + 학습의욕
 실패불안 ~~ 학습의욕
'

Caution! ~~는 변수 간의 상관관계(↔︎)를 나타낸다. 실패불안 ~~ 학습의욕에 있는 내생변수 “실패불안”과 “학습의욕”은 사실 해당 변수에 관한 오차를 의미한다. 즉, 실패불안 ~~ 학습의욕실패불안학습의욕 사이에 상관을 설정하는 것이 아니라, 실패불안의 오차변수와 학습의욕의 오차변수 사이에 상관을 설정하는 것이다.


# 모수 추정pacman::p_load("lavaan")

fit2 <- sem(model2,                   # 기술한 모형을 대입한 객체NA= data)              # 데이터
# 분석 결과 출력
summary(fit2,                         # 분석 결과를 저장하고 있는 객체        standardized = TRUE,          # 표준화 추정값의 출력 여부NA= TRUE,               # 결정계수의 출력 여부        ci = TRUE,                    # 신뢰구간 출력 여부여부
        fit.measures = TRUE)          # 적합도 평가 출력 여부
lavaan 0.6-12 ended normally after 18 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                         8

  Number of observations                           500

Model Test User Model:
                                                      
  Test statistic                                 4.330
  Degrees of freedom                                 4
  P-value (Chi-square)                           0.363

Model Test Baseline Model:

  Test statistic                               227.626
  Degrees of freedom                                 9
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.998
  Tucker-Lewis Index (TLI)                       0.997

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -5246.346
  Loglikelihood unrestricted model (H1)      -5244.181
                                                      
  Akaike (AIC)                               10508.692
  Bayesian (BIC)                             10542.409
  Sample-size adjusted Bayesian (BIC)        10517.017

Root Mean Square Error of Approximation:

  RMSEA                                          0.013
  90 Percent confidence interval - lower         0.000
  90 Percent confidence interval - upper         0.070
  P-value RMSEA <= 0.05                          0.809

Standardized Root Mean Square Residual:

  SRMR                                           0.022

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower
  실패불안 ~                                                   
    질책              1.601    0.213    7.522    0.000    1.184
  학습의욕 ~                                                   
    격려              0.256    0.058    4.444    0.000    0.143
  학업성적 ~                                                   
    실패불안         -0.138    0.052   -2.650    0.008   -0.240
    학습의욕          0.904    0.180    5.009    0.000    0.550
 ci.upper   Std.lv  Std.all
                           
    2.018    1.601    0.292
                           
    0.370    0.256    0.178
                           
   -0.036   -0.138   -0.126
    1.258    0.904    0.238

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower
 .실패불안 ~~                                                  
   .학습의욕        -19.582    2.131   -9.190    0.000  -23.758
 ci.upper   Std.lv  Std.all
                           
  -15.405  -19.582   -0.451

Variances:
                   Estimate  Std.Err  z-value  P(>|z|) ci.lower
   .실패불안        146.583    9.271   15.811    0.000  128.413
   .학습의욕         12.872    0.814   15.811    0.000   11.276
   .학업성적        173.522   10.974   15.811    0.000  152.012
 ci.upper   Std.lv  Std.all
  164.754  146.583    0.915
   14.467   12.872    0.968
  195.032  173.522    0.901

R-Square:
                   Estimate
    실패불안          0.085
    학습의욕          0.032
    학업성적          0.099

Result! 우선 모형 적합도(“Model Test User Model”)를 확인해보면, 가설 \(H_0\) : “설정한 모형은 데이터에 적합하다.” vs \(H_1\) : “설정한 모형은 데이터에 적합하지 않다.”의 검정통계량 \(\chi^2\) 값은 4.330이고 \(p\)-값은 0.363이다. 이에 근거하여 유의수준 5%에서 \(p\)-값이 0.05보다 크기 때문에 귀무가설 \(H_0\)은 기각하지 않는다. 즉, 설정한 모형은 관측된 데이터에 적합하다.
적합도 지표 중 “CFI”, “TLI”, “RMSEA”, “SRMR”을 살펴봤을 때 데이터에 대한 모형 적합도는 양호하다고 할 수 있다. 게다가, “AIC”와 “BIC”의 관점에서 첫 번째 모형(“model”)은 각각 10620.003, 10649.505이었으나 현재 모형(“model2”)에서는 10508.692, 10542.409로 첫 번째 모형에 비해 줄어들었다. 이러한 결과를 볼 때, 오차변수 사이에 상관을 가정하지 않은 모형보다 상관을 가정한 모형이 더 적절하다는 것을 알 수 있다.
경로에 관한 추정값의 관점은 첫 번째 모형 때와 같지만 공분산(상관계수)에 관한 추정값이 “Covariances” 부분에 출력되었다. “Estimate”는 공분산, “Std.all”은 상관계수 값을 나타낸다. 따라서, 실패불안의 오차변수와 학습의욕의 오차변수 사이의 공분산은 -19.582, 상관계수는 -0.451이 된다. 추정된 표준화 경로계수에 의한 경로도는 다음과 같다.


# 경로도pacman::p_load("semPlot")

# semPaths(fit2, 'std', layout = 'tree2')

 semPlot::semPaths(fit2,                      # 분석 결과를 저장하고 있는 객체                   whatLabels = "std",        # 라벨로 나타낼 값 (est : 비표준화 추정값, std : 표준화 추정값)값)
                   intercepts = FALSE,        # 절편 출력 여부NA= "lisrel",          # 스타일
                   nCharNodes = 0,            # 노드에 출력할 문자 개수, 0 : 모든 문자 출력                   rotation = 2,              # 외생변수 위치  
                   edge.label.position = 0.5, # 화살표에서 경로계수의 위치치
                   edge.label.cex = 1,        # 경로계수 크기
                   curveAdjacent = TRUE,      # 화살표를 곡선으로 할 것인지 여부
                   title = TRUE,              
                   layout = "tree2",          # 경로도의 모양
                   curvePivot = TRUE,         # 화살표의 가장자리를 곡선으로 할 것인지 여부                   pastel = TRUE,             # 파스텔 컬러로부터 색깔을 선택할 것인지 여부NA= "manlat")         # 동일한 색깔을 부여할 그룹 노드 

Caution! Package semPlot에서 제공하는 함수 semPaths()를 이용하여 분석 결과에 대한 경로도를 작성할 수 있다. 함수 semPaths()의 옵션은 여기를 참고한다.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".