版权声明:本套课程材料开源,使用和分享必须遵守「创作共用许可协议 CC BY-NC-SA」(来源引用-非商业用途使用-以相同方式共享)。


回归分析的统计知识回顾

【知识点】回归分析(regression)统计术语

多元回归模型的一般形式:

\[ Y_i = b_0 + b_1 X_1 + b_2 X_2 + ... + b_p X_p + e_i \]

  • 截距(intercept)
    • \(b_0\):所有自变量都取0时,因变量的预测期望值
      • 如果没有任何自变量,截距就是因变量的平均值
  • 斜率(slope)
    • \(b_1\), …, \(b_p\):自变量每变化1,因变量变化多少个单位
      • 非标准化系数:\(b\)
      • 标准化系数:\(\beta\)
  • 残差(residual)
    • \(e_i = Y_i - \hat{Y_i}\):每个个体(\(i\))因变量的真实观测值(\(Y_i\))与模型预测值(\(\hat{Y_i}\))之间的差异

回归模型建立与结果报告

## 数据准备
data = data.table(
  A = c(0, 0, 0,  0, 0, 0,  1, 1, 1,  1, 1, 1),
  B = c(0, 0, 0,  1, 1, 1,  0, 0, 0,  1, 1, 1),
  Y = c(0, 1, 2,  3, 4, 5,  0, 1, 2,  6, 7, 8)
)
data
        A     B     Y
    <num> <num> <num>
 1:     0     0     0
 2:     0     0     1
 3:     0     0     2
 4:     0     1     3
 5:     0     1     4
 6:     0     1     5
 7:     1     0     0
 8:     1     0     1
 9:     1     0     2
10:     1     1     6
11:     1     1     7
12:     1     1     8
## 方差分析
m = MANOVA(data, dv="Y", between=c("A", "B"))

====== ANOVA (Between-Subjects Design) ======

Descriptives:
────────────────────────
 "A" "B"  Mean    S.D. n
────────────────────────
  A0  B0 1.000 (1.000) 3
  A0  B1 4.000 (1.000) 3
  A1  B0 1.000 (1.000) 3
  A1  B1 7.000 (1.000) 3
────────────────────────
Total sample size: N = 12

ANOVA Table:
Dependent variable(s):      Y
Between-subjects factor(s): A, B
Within-subjects factor(s):  –
Covariate(s):               –
─────────────────────────────────────────────────────────────────────
           MS   MSE df1 df2      F     p     η²p [90% CI of η²p]  η²G
─────────────────────────────────────────────────────────────────────
A       6.750 1.000   1   8  6.750  .032 *     .458 [.034, .715] .458
B      60.750 1.000   1   8 60.750 <.001 ***   .884 [.680, .940] .884
A * B   6.750 1.000   1   8  6.750  .032 *     .458 [.034, .715] .458
─────────────────────────────────────────────────────────────────────
MSE = mean square error (the residual variance of the linear model)
η²p = partial eta-squared = SS / (SS + SSE) = F * df1 / (F * df1 + df2)
ω²p = partial omega-squared = (F - 1) * df1 / (F * df1 + df2 + 1)
η²G = generalized eta-squared (see Olejnik & Algina, 2003)
Cohen’s f² = η²p / (1 - η²p)

Levene’s Test for Homogeneity of Variance:
───────────────────────────────────
       Levene’s F df1 df2     p    
───────────────────────────────────
DV: Y       0.000   3   8 1.000    
───────────────────────────────────
emmip(m, ~ A, CIs=TRUE)
NOTE: Results may be misleading due to involvement in interactions

emmip(m, ~ B, CIs=TRUE)
NOTE: Results may be misleading due to involvement in interactions

emmip(m, ~ A | B, CIs=TRUE)

emmip(m, B ~ A, CIs=TRUE)

【实践1】截距模型

## lm(formula=..., data=...)

m1 = lm(Y ~ 1, data)  # 1表示模型截距
summary(m1)

Call:
lm(formula = Y ~ 1, data = data)

Residuals:
   Min     1Q Median     3Q    Max 
 -3.25  -2.25  -0.75   2.00   4.75 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)    3.250      0.789    4.12   0.0017 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.73 on 11 degrees of freedom
bruceR::model_summary(m1)

Model Summary

──────────────────────
             (1) Y    
──────────────────────
(Intercept)   3.250 **
             (0.789)  
──────────────────────
R^2           0.000   
Adj. R^2      0.000   
Num. obs.    12       
──────────────────────
Note. * p < .05, ** p < .01, *** p < .001.
Not enough model terms in the conditional part of the model to check for
  multicollinearity.
sjPlot::tab_model(m1)
  Y
Predictors Estimates CI p
(Intercept) 3.25 1.51 – 4.99 0.002
Observations 12
R2 / R2 adjusted 0.000 / 0.000
sjPlot::tab_model(
  m1, digits=3, show.ci=FALSE,
  show.se=TRUE, collapse.se=TRUE
)
  Y
Predictors Estimates p
(Intercept) 3.250
(0.789)
0.002
Observations 12
R2 / R2 adjusted 0.000 / 0.000
## 截距含义:Y的均值
mean(data$Y)  # 截距等于均值
[1] 3.25
predict(m1)  # 预测期望值
   1    2    3    4    5    6    7    8    9   10   11   12 
3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 3.25 
TTEST(data, y="Y", digits=3)  # 截距模型等价于单样本t检验

One-Sample t-test

Hypothesis: two-sided (μ ≠ 0)

Descriptives:
──────────────────────────
 Variable  N   Mean (S.D.)
──────────────────────────
        Y 12 3.250 (2.734)
──────────────────────────

Results of t-test:
────────────────────────────────────────────────────────────────────────
                t df     p      Difference [95% CI]   Cohen’s d [95% CI]
────────────────────────────────────────────────────────────────────────
Y: (Y - 0)  4.117 11  .002 **  3.250 [1.513, 4.987] 1.189 [0.553, 1.824]
────────────────────────────────────────────────────────────────────────

【实践2】一元回归模型

m2 = lm(Y ~ 1 + A, data)
m2 = lm(Y ~ A, data)  # 相当于:Y ~ 1 + A
# 当有自变量时,截距1默认存在,可省略不写
summary(m2)

Call:
lm(formula = Y ~ A, data = data)

Residuals:
   Min     1Q Median     3Q    Max 
 -4.00  -2.12   0.00   2.12   4.00 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)     2.50       1.12    2.23     0.05 *
A               1.50       1.59    0.95     0.37  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.75 on 10 degrees of freedom
Multiple R-squared:  0.0821,    Adjusted R-squared:  -0.00973 
F-statistic: 0.894 on 1 and 10 DF,  p-value: 0.367
tab_model(m2, digits=3, show.ci=FALSE,
          show.se=TRUE, collapse.se=TRUE)
  Y
Predictors Estimates p
(Intercept) 2.500
(1.122)
0.050
A 1.500
(1.586)
0.367
Observations 12
R2 / R2 adjusted 0.082 / -0.010
## 截距含义:A=0时,Y的预测期望值(等于均值)
mean(data[A==0]$Y)
[1] 2.5
predict(m2)  # 预测期望值
  1   2   3   4   5   6   7   8   9  10  11  12 
2.5 2.5 2.5 2.5 2.5 2.5 4.0 4.0 4.0 4.0 4.0 4.0 
predict(m2, data.table(A=0))  # A=0时,Y的预测期望值
  1 
2.5 
## 斜率含义:A从0变到1,Y的均值变化
TTEST(data, y="Y", x="A", digits=3)  # 一元回归等价于独立样本t检验

Independent-Samples t-test

Hypothesis: two-sided (μ2 - μ1 ≠ 0)

Descriptives:
──────────────────────────────────────
 Variable Factor Level N   Mean (S.D.)
──────────────────────────────────────
        Y      A     0 6 2.500 (1.871)
        Y      A     1 6 4.000 (3.406)
──────────────────────────────────────

Levene’s test for homogeneity of variance:
──────────────────────────────────────────
              Levene’s F df1 df2     p    
──────────────────────────────────────────
Y: A (1 - 0)        8.44   1  10  .016 *  
──────────────────────────────────────────
Note: H0 = equal variance (homoscedasticity).
If significant (violation of the assumption),
then you should better set `var.equal=FALSE`.

Results of t-test:
────────────────────────────────────────────────────────────────────────────
                  t df     p       Difference [95% CI]    Cohen’s d [95% CI]
────────────────────────────────────────────────────────────────────────────
Y: A (1 - 0)  0.946 10  .367     1.500 [-2.035, 5.035] 0.546 [-0.741, 1.832]
────────────────────────────────────────────────────────────────────────────
m3 = lm(Y ~ 1 + B, data)
m3 = lm(Y ~ B, data)  # 相当于:Y ~ 1 + B
# 当有自变量时,截距1默认存在,可省略不写
summary(m3)

Call:
lm(formula = Y ~ B, data = data)

Residuals:
   Min     1Q Median     3Q    Max 
  -2.5   -1.0    0.0    1.0    2.5 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)    1.000      0.599    1.67  0.12577    
B              4.500      0.847    5.32  0.00034 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.47 on 10 degrees of freedom
Multiple R-squared:  0.739, Adjusted R-squared:  0.712 
F-statistic: 28.3 on 1 and 10 DF,  p-value: 0.00034
tab_model(m3, digits=3, show.ci=FALSE,
          show.se=TRUE, collapse.se=TRUE)
  Y
Predictors Estimates p
(Intercept) 1.000
(0.599)
0.126
B 4.500
(0.847)
<0.001
Observations 12
R2 / R2 adjusted 0.739 / 0.712
## 截距含义:B=0时,Y的预测期望值(等于均值)
mean(data[B==0]$Y)
[1] 1
predict(m3)  # 预测期望值
  1   2   3   4   5   6   7   8   9  10  11  12 
1.0 1.0 1.0 5.5 5.5 5.5 1.0 1.0 1.0 5.5 5.5 5.5 
predict(m3, data.table(B=0))  # B=0时,Y的预测期望值
1 
1 
## 斜率含义:B从0变到1,Y的均值变化
TTEST(data, y="Y", x="B", digits=3)  # 一元回归等价于独立样本t检验

Independent-Samples t-test

Hypothesis: two-sided (μ2 - μ1 ≠ 0)

Descriptives:
──────────────────────────────────────
 Variable Factor Level N   Mean (S.D.)
──────────────────────────────────────
        Y      B     0 6 1.000 (0.894)
        Y      B     1 6 5.500 (1.871)
──────────────────────────────────────

Levene’s test for homogeneity of variance:
──────────────────────────────────────────
              Levene’s F df1 df2     p    
──────────────────────────────────────────
Y: B (1 - 0)        3.91   1  10  .076 .  
──────────────────────────────────────────
Note: H0 = equal variance (homoscedasticity).
If significant (violation of the assumption),
then you should better set `var.equal=FALSE`.

Results of t-test:
──────────────────────────────────────────────────────────────────────────
                  t df     p      Difference [95% CI]   Cohen’s d [95% CI]
──────────────────────────────────────────────────────────────────────────
Y: B (1 - 0)  5.316 10 <.001 *** 4.500 [2.614, 6.386] 3.069 [1.783, 4.355]
──────────────────────────────────────────────────────────────────────────

【实践3】多元回归模型

m4 = lm(Y ~ A + B, data)  # 相当于:Y ~ 1 + A + B
# 当有自变量时,截距1默认存在,可省略不写
summary(m4)

Call:
lm(formula = Y ~ A + B, data = data)

Residuals:
   Min     1Q Median     3Q    Max 
 -1.75  -0.75   0.00   0.75   1.75 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)    0.250      0.640    0.39  0.70520    
A              1.500      0.739    2.03  0.07300 .  
B              4.500      0.739    6.09  0.00018 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.28 on 9 degrees of freedom
Multiple R-squared:  0.821, Adjusted R-squared:  0.781 
F-statistic: 20.6 on 2 and 9 DF,  p-value: 0.000438
tab_model(m4, digits=3, show.ci=FALSE,
          show.se=TRUE, collapse.se=TRUE)
  Y
Predictors Estimates p
(Intercept) 0.250
(0.640)
0.705
A 1.500
(0.739)
0.073
B 4.500
(0.739)
<0.001
Observations 12
R2 / R2 adjusted 0.821 / 0.781
## 截距含义:A=B=0时,Y的预测期望值(此时不再是简单均值)
mean(data[A==0 & B==0]$Y)  # 简单均值
[1] 1
predict(m4, data.table(A=0, B=0))  # A=B=0时,Y的预测期望值
   1 
0.25 
## 斜率含义:A或B从0变到1,Y的预测期望值变化
mean(data[A==1]$Y) - mean(data[A==0]$Y)
[1] 1.5
mean(data[B==1]$Y) - mean(data[B==0]$Y)
[1] 4.5

【实践4】交互作用模型

  • R语言回归模型公式中的交互作用设定(适用于所有类型的回归模型)
    • Y ~ A * B(精简写法)
    • Y ~ 1 + A + B + A:B(展开写法)
      • 1为截距(可省略不写)
      • AB为固定效应(“条件效应”,并非ANOVA中的“主效应”!!!)⭐️
      • A:B为交互项(interaction term)
## 方差分析(回顾)
MANOVA(data, dv="Y", between=c("A", "B"))

====== ANOVA (Between-Subjects Design) ======

Descriptives:
────────────────────────
 "A" "B"  Mean    S.D. n
────────────────────────
  A0  B0 1.000 (1.000) 3
  A0  B1 4.000 (1.000) 3
  A1  B0 1.000 (1.000) 3
  A1  B1 7.000 (1.000) 3
────────────────────────
Total sample size: N = 12

ANOVA Table:
Dependent variable(s):      Y
Between-subjects factor(s): A, B
Within-subjects factor(s):  –
Covariate(s):               –
─────────────────────────────────────────────────────────────────────
           MS   MSE df1 df2      F     p     η²p [90% CI of η²p]  η²G
─────────────────────────────────────────────────────────────────────
A       6.750 1.000   1   8  6.750  .032 *     .458 [.034, .715] .458
B      60.750 1.000   1   8 60.750 <.001 ***   .884 [.680, .940] .884
A * B   6.750 1.000   1   8  6.750  .032 *     .458 [.034, .715] .458
─────────────────────────────────────────────────────────────────────
MSE = mean square error (the residual variance of the linear model)
η²p = partial eta-squared = SS / (SS + SSE) = F * df1 / (F * df1 + df2)
ω²p = partial omega-squared = (F - 1) * df1 / (F * df1 + df2 + 1)
η²G = generalized eta-squared (see Olejnik & Algina, 2003)
Cohen’s f² = η²p / (1 - η²p)

Levene’s Test for Homogeneity of Variance:
───────────────────────────────────
       Levene’s F df1 df2     p    
───────────────────────────────────
DV: Y       0.000   3   8 1.000    
───────────────────────────────────
## 回归分析
m5 = lm(Y ~ A * B, data)  # 相当于:Y ~ 1 + A + B + A:B
anova(m5)  # 真正的主效应、交互作用
Analysis of Variance Table

Response: Y
          Df Sum Sq Mean Sq F value  Pr(>F)    
A          1    6.7     6.7    6.75   0.032 *  
B          1   60.7    60.7   60.75 5.3e-05 ***
A:B        1    6.8     6.8    6.75   0.032 *  
Residuals  8    8.0     1.0                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m5)  # A和B的固定效应(条件效应),并非“主效应”!!!

Call:
lm(formula = Y ~ A * B, data = data)

Residuals:
   Min     1Q Median     3Q    Max 
    -1     -1      0      1      1 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)   
(Intercept)  1.00e+00   5.77e-01    1.73   0.1215   
A           -1.09e-15   8.16e-01    0.00   1.0000   
B            3.00e+00   8.16e-01    3.67   0.0063 **
A:B          3.00e+00   1.15e+00    2.60   0.0317 * 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1 on 8 degrees of freedom
Multiple R-squared:  0.903, Adjusted R-squared:  0.866 
F-statistic: 24.8 on 3 and 8 DF,  p-value: 0.000212
## A和B的固定效应(条件效应),并非“主效应”!!!
tab_model(m5, digits=3, show.ci=FALSE,
          show.se=TRUE, collapse.se=TRUE)
  Y
Predictors Estimates p
(Intercept) 1.000
(0.577)
0.122
A -0.000
(0.816)
1.000
B 3.000
(0.816)
0.006
A × B 3.000
(1.155)
0.032
Observations 12
R2 / R2 adjusted 0.903 / 0.866

【知识点】为什么回归分析交互作用中的斜率并不是“主效应”?

  • 回归分析中,如果存在交互作用(A × B),则每个自变量的斜率代表另一个变量取0时,该变量的简单斜率(也可以叫:固定效应、简单效应、条件效应)
  • 在【实践4】模型结果中:
    • A的斜率/条件效应(b = 0.00):B = 0时,A的简单斜率(1.00 – 1.00 = 0.00)
    • B的斜率/条件效应(b = 3.00):A = 0时,B的简单斜率(4.00 – 1.00 = 3.00)
  • 而真正的主效应结果是:
    • A的主效应/边际效应:无论B,A1与A0的边际均值差异(4.00 – 2.50 = 1.50)
    • B的主效应/边际效应:无论A,B1与B0的边际均值差异(5.50 – 1.00 = 4.50)
表1. 原始数据
原始数据 B0条件 B1条件
A0条件 0, 1, 2 3, 4, 5
A1条件 0, 1, 2 6, 7, 8
表2. A和B的条件均值与边际均值
均值 B0条件均值 B1条件均值 边际均值
A0条件均值 1.00 4.00 2.50
A1条件均值 1.00 7.00 4.00
边际均值 1.00 5.50 3.25
## 注意,这不是A和B的主效应!(这是固定效应、简单效应、条件效应!)
tab_model(m5, digits=3, show.ci=FALSE,
          show.se=TRUE, collapse.se=TRUE)
  Y
Predictors Estimates p
(Intercept) 1.000
(0.577)
0.122
A -0.000
(0.816)
1.000
B 3.000
(0.816)
0.006
A × B 3.000
(1.155)
0.032
Observations 12
R2 / R2 adjusted 0.903 / 0.866
## 对比方差分析“简单效应”结果
EMMEANS(m, "A", by="B")
------ EMMEANS (effect = "A") ------

Joint Tests of "A":
────────────────────────────────────────────────────────
 Effect "B" df1 df2      F     p     η²p [90% CI of η²p]
────────────────────────────────────────────────────────
      A  B0   1   8  0.000 1.000       .000 [.000, .000]
      A  B1   1   8 13.500  .006 **    .628 [.191, .808]
────────────────────────────────────────────────────────
Note. Simple effects of repeated measures with 3 or more levels
are different from the results obtained with SPSS MANOVA syntax.

Univariate Tests of "A":
─────────────────────────────────────────────────────────
           Sum of Squares df Mean Square      F     p    
─────────────────────────────────────────────────────────
B0: "A"             0.000  1       0.000  0.000 1.000    
B1: "A"            13.500  1      13.500 13.500  .006 ** 
Residuals           8.000  8       1.000                 
─────────────────────────────────────────────────────────
Note. Identical to the results obtained with SPSS GLM EMMEANS syntax.

Estimated Marginal Means of "A":
──────────────────────────────────────
 "A" "B" Mean [95% CI of Mean]    S.E.
──────────────────────────────────────
  A0  B0 1.000 [-0.331, 2.331] (0.577)
  A1  B0 1.000 [-0.331, 2.331] (0.577)
  A0  B1 4.000 [ 2.669, 5.331] (0.577)
  A1  B1 7.000 [ 5.669, 8.331] (0.577)
──────────────────────────────────────

Pairwise Comparisons of "A":
─────────────────────────────────────────────────────────────────────────
 Contrast "B" Estimate    S.E. df     t     p     Cohen’s d [95% CI of d]
─────────────────────────────────────────────────────────────────────────
  A1 - A0  B0    0.000 (0.816)  8 0.000 1.000       0.000 [-1.883, 1.883]
  A1 - A0  B1    3.000 (0.816)  8 3.674  .006 **    3.000 [ 1.117, 4.883]
─────────────────────────────────────────────────────────────────────────
Pooled SD for computing Cohen’s d: 1.000
No need to adjust p values.

Disclaimer:
By default, pooled SD is Root Mean Square Error (RMSE).
There is much disagreement on how to compute Cohen’s d.
You are completely responsible for setting `sd.pooled`.
You might also use `effectsize::t_to_d()` to compute d.

【实践5】如何让回归分析交互作用中的斜率具有“主效应”含义?

  • 变量中心化(Chap05):使新变量(B’)取0等价于原变量(B)取均值
    • 中心化消除了“边际效应”与“条件效应”之间的偏差
      • 边际效应(主效应)= 条件效应(固定效应/回归斜率)+ 交互效应 × 调节变量均值
      • \(\text{Main Effect}_X = b_{X_{Marginal}} = b_{X_{Conditional}} + b_{X*M_{Interaction}} \bar{M}\)
      • \(\text{Main Effect}_A = 1.50 = 0.00 + 3.00 \times (0+1)/2\)
      • \(\text{Main Effect}_B = 4.50 = 3.00 + 3.00 \times (0+1)/2\)
## 中心化处理
data$A.c = data$A - mean(data$A)  # 也可以直接用 grand_mean_center()
data$B.c = data$B - mean(data$B)  # 也可以直接用 grand_mean_center()
data
索引(index): <A>, <B>, <B__A>
        A     B     Y   A.c   B.c
    <num> <num> <num> <num> <num>
 1:     0     0     0  -0.5  -0.5
 2:     0     0     1  -0.5  -0.5
 3:     0     0     2  -0.5  -0.5
 4:     0     1     3  -0.5   0.5
 5:     0     1     4  -0.5   0.5
 6:     0     1     5  -0.5   0.5
 7:     1     0     0   0.5  -0.5
 8:     1     0     1   0.5  -0.5
 9:     1     0     2   0.5  -0.5
10:     1     1     6   0.5   0.5
11:     1     1     7   0.5   0.5
12:     1     1     8   0.5   0.5
m6 = lm(Y ~ A.c * B.c, data)
anova(m6)  # 真正的主效应、交互作用
Analysis of Variance Table

Response: Y
          Df Sum Sq Mean Sq F value  Pr(>F)    
A.c        1    6.8     6.8    6.75   0.032 *  
B.c        1   60.7    60.7   60.75 5.3e-05 ***
A.c:B.c    1    6.8     6.8    6.75   0.032 *  
Residuals  8    8.0     1.0                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m6)  # A和B中心化后,固定效应(条件效应)等价于“主效应”

Call:
lm(formula = Y ~ A.c * B.c, data = data)

Residuals:
   Min     1Q Median     3Q    Max 
    -1     -1      0      1      1 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)    3.250      0.289   11.26  3.5e-06 ***
A.c            1.500      0.577    2.60    0.032 *  
B.c            4.500      0.577    7.79  5.3e-05 ***
A.c:B.c        3.000      1.155    2.60    0.032 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1 on 8 degrees of freedom
Multiple R-squared:  0.903, Adjusted R-squared:  0.866 
F-statistic: 24.8 on 3 and 8 DF,  p-value: 0.000212
## A和B中心化后,固定效应(条件效应)等价于“主效应”
tab_model(m6, digits=3, show.ci=FALSE,
          show.se=TRUE, collapse.se=TRUE)
  Y
Predictors Estimates p
(Intercept) 3.250
(0.289)
<0.001
A c 1.500
(0.577)
0.032
B c 4.500
(0.577)
<0.001
A c × B c 3.000
(1.155)
0.032
Observations 12
R2 / R2 adjusted 0.903 / 0.866

多个模型汇总与表格输出

【实践6】多元回归模型的结果表输出

模型结果表可以输出到:

  • R Console控制台
  • Microsoft Word文档
  • HTML表格
m1 = lm(Y ~ 1, data)
m2 = lm(Y ~ A, data)
m3 = lm(Y ~ B, data)
m4 = lm(Y ~ A + B, data)
m5 = lm(Y ~ A * B, data)
m6 = lm(Y ~ A.c * B.c, data)

model_summary(list(m1, m2, m3, m4, m5, m6))

Model Summary

───────────────────────────────────────────────────────────────────────────────
             (1) Y      (2) Y     (3) Y       (4) Y       (5) Y      (6) Y     
───────────────────────────────────────────────────────────────────────────────
(Intercept)   3.250 **   2.500 *   1.000       0.250       1.000      3.250 ***
             (0.789)    (1.122)   (0.599)     (0.640)     (0.577)    (0.289)   
A                        1.500                 1.500      -0.000               
                        (1.586)               (0.739)     (0.816)              
B                                  4.500 ***   4.500 ***   3.000 **            
                                  (0.847)     (0.739)     (0.816)              
A:B                                                        3.000 *             
                                                          (1.155)              
A.c                                                                   1.500 *  
                                                                     (0.577)   
B.c                                                                   4.500 ***
                                                                     (0.577)   
A.c:B.c                                                               3.000 *  
                                                                     (1.155)   
───────────────────────────────────────────────────────────────────────────────
R^2           0.000      0.082     0.739       0.821       0.903      0.903    
Adj. R^2      0.000     -0.010     0.712       0.781       0.866      0.866    
Num. obs.    12         12        12          12          12         12        
───────────────────────────────────────────────────────────────────────────────
Note. * p < .05, ** p < .01, *** p < .001.
model_summary(list(m1, m2, m3, m4, m5, m6),
              digits=2,
              file="Models.doc")
✔ Table saved to 'D:/RStudio/RCourse/Models.doc'

tab_model(m1, m2, m3, m4, m5, m6,
          digits=2, string.est="b (SE)",
          show.ci=FALSE, show.se=TRUE, collapse.se=TRUE)
  Y Y Y Y Y Y
Predictors b (SE) p b (SE) p b (SE) p b (SE) p b (SE) p b (SE) p
(Intercept) 3.25
(0.79)
0.002 2.50
(1.12)
0.050 1.00
(0.60)
0.126 0.25
(0.64)
0.705 1.00
(0.58)
0.122 3.25
(0.29)
<0.001
A 1.50
(1.59)
0.367 1.50
(0.74)
0.073 -0.00
(0.82)
1.000
B 4.50
(0.85)
<0.001 4.50
(0.74)
<0.001 3.00
(0.82)
0.006
A × B 3.00
(1.15)
0.032
A c 1.50
(0.58)
0.032
B c 4.50
(0.58)
<0.001
A c × B c 3.00
(1.15)
0.032
Observations 12 12 12 12 12 12
R2 / R2 adjusted 0.000 / 0.000 0.082 / -0.010 0.739 / 0.712 0.821 / 0.781 0.903 / 0.866 0.903 / 0.866

【实践7】空气质量数据回归分析实例

## 数据准备
str(airquality)
'data.frame':   153 obs. of  6 variables:
 $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...
Corr(airquality)
Pearson's r and 95% confidence intervals:
─────────────────────────────────────────────────
                   r       [95% CI]     p       N
─────────────────────────────────────────────────
Ozone-Solar.R   0.35 [ 0.17,  0.50] <.001 *** 111
Ozone-Wind     -0.60 [-0.71, -0.47] <.001 *** 116
Ozone-Temp      0.70 [ 0.59,  0.78] <.001 *** 116
Ozone-Month     0.16 [-0.02,  0.34]  .078 .   116
Ozone-Day      -0.01 [-0.20,  0.17]  .888     116
Solar.R-Wind   -0.06 [-0.22,  0.11]  .496     146
Solar.R-Temp    0.28 [ 0.12,  0.42] <.001 *** 146
Solar.R-Month  -0.08 [-0.23,  0.09]  .366     146
Solar.R-Day    -0.15 [-0.31,  0.01]  .070 .   146
Wind-Temp      -0.46 [-0.57, -0.32] <.001 *** 153
Wind-Month     -0.18 [-0.33, -0.02]  .027 *   153
Wind-Day        0.03 [-0.13,  0.19]  .739     153
Temp-Month      0.42 [ 0.28,  0.54] <.001 *** 153
Temp-Day       -0.13 [-0.28,  0.03]  .108     153
Month-Day      -0.01 [-0.17,  0.15]  .922     153
─────────────────────────────────────────────────

## 回归分析
m1 = lm(Ozone ~ Solar.R, data=airquality)
m2 = lm(Ozone ~ Solar.R + Temp, data=airquality)
m3 = lm(Ozone ~ Solar.R + Temp + Wind, data=airquality)
m4 = lm(Ozone ~ Solar.R + Temp + Wind + Month, data=airquality)
model = lm(Ozone ~ ., data=airquality)  # . 表示纳入剩余所有变量

思考:

  • 截距(b = –64.116, p = .007)的含义是?
  • 气温斜率(b = 1.896, β = .543, p < .001)的含义是?
  • t值与bSE的关系是?(请验算一下)

\[ t = \frac{b}{SE} \]

## bruceR系列函数
GLM_summary(model)

General Linear Model (OLS Regression)

Model Fit:
F(5, 105) = 34.99, p = 7e-21 ***
R² = 0.62494 (Adjusted R² = 0.60708)

Unstandardized Coefficients:
Outcome Variable: Ozone
N = 111 (42 missing cases deleted)
────────────────────────────────────────────────────────────────────────
                   b     S.E.      t     p           [95% CI of b]   VIF
────────────────────────────────────────────────────────────────────────
(Intercept)  -64.116 (23.482) -2.730  .007 **  [-110.678, -17.555]      
Solar.R        0.050 ( 0.023)  2.147  .034 *   [   0.004,   0.097] 1.152
Wind          -3.318 ( 0.645) -5.149 <.001 *** [  -4.596,  -2.041] 1.329
Temp           1.896 ( 0.274)  6.922 <.001 *** [   1.353,   2.439] 1.722
Month         -3.040 ( 1.513) -2.009  .047 *   [  -6.041,  -0.039] 1.257
Day            0.274 ( 0.230)  1.192  .236     [  -0.182,   0.729] 1.011
────────────────────────────────────────────────────────────────────────

Standardized Coefficients (β):
Outcome Variable: Ozone
N = 111 (42 missing cases deleted)
────────────────────────────────────────────────────────────────────────────
              β    S.E.      t     p        [95% CI of β] r(partial) r(part)
────────────────────────────────────────────────────────────────────────────
Solar.R   0.138 (0.064)  2.147  .034 *   [ 0.011,  0.265]      0.205   0.128
Wind     -0.355 (0.069) -5.149 <.001 *** [-0.491, -0.218]     -0.449  -0.308
Temp      0.543 (0.078)  6.922 <.001 *** [ 0.387,  0.698]      0.560   0.414
Month    -0.135 (0.067) -2.009  .047 *   [-0.267, -0.002]     -0.192  -0.120
Day       0.072 (0.060)  1.192  .236     [-0.047,  0.191]      0.116   0.071
────────────────────────────────────────────────────────────────────────────
model_summary(model)

Model Summary

────────────────────────
             (1) Ozone  
────────────────────────
(Intercept)  -64.116 ** 
             (23.482)   
Solar.R        0.050 *  
              (0.023)   
Wind          -3.318 ***
              (0.645)   
Temp           1.896 ***
              (0.274)   
Month         -3.040 *  
              (1.513)   
Day            0.274    
              (0.230)   
────────────────────────
R^2            0.625    
Adj. R^2       0.607    
Num. obs.    111        
────────────────────────
Note. * p < .05, ** p < .01, *** p < .001.

# Check for Multicollinearity

Low Correlation

    Term  VIF       VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
 Solar.R 1.15 [1.03,     1.66]     1.07      0.87     [0.60, 0.97]
    Wind 1.33 [1.14,     1.78]     1.15      0.75     [0.56, 0.88]
    Temp 1.72 [1.40,     2.29]     1.31      0.58     [0.44, 0.71]
   Month 1.26 [1.09,     1.71]     1.12      0.80     [0.59, 0.91]
     Day 1.01 [1.00, 83489.99]     1.01      0.99     [0.00, 1.00]
model_summary(model, std=TRUE)  # 标准化回归系数

Model Summary

──────────────────────
           (1) Ozone  
──────────────────────
Solar.R       .138 *  
             (.064)   
Wind         -.355 ***
             (.069)   
Temp          .543 ***
             (.078)   
Month        -.135 *  
             (.067)   
Day           .072    
             (.060)   
──────────────────────
R^2           .625    
Adj. R^2      .607    
Num. obs.  111        
──────────────────────
Note. * p < .05, ** p < .01, *** p < .001.

# Check for Multicollinearity

Low Correlation

    Term  VIF       VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
 Solar.R 1.15 [1.03,     1.66]     1.07      0.87     [0.60, 0.97]
    Wind 1.33 [1.14,     1.78]     1.15      0.75     [0.56, 0.88]
    Temp 1.72 [1.40,     2.29]     1.31      0.58     [0.44, 0.71]
   Month 1.26 [1.09,     1.71]     1.12      0.80     [0.59, 0.91]
     Day 1.01 [1.00, 83489.99]     1.01      0.99     [0.00, 1.00]
model_summary(list(m1, m2, m3, m4, model), file="Models.doc")
✔ Table saved to 'D:/RStudio/RCourse/Models.doc'
↑ APA格式表格,可直接复制到论文中
↑ APA格式表格,可直接复制到论文中
## sjPlot系列函数
tab_model(model)
  Ozone
Predictors Estimates CI p
(Intercept) -64.12 -110.68 – -17.55 0.007
Solar R 0.05 0.00 – 0.10 0.034
Wind -3.32 -4.60 – -2.04 <0.001
Temp 1.90 1.35 – 2.44 <0.001
Month -3.04 -6.04 – -0.04 0.047
Day 0.27 -0.18 – 0.73 0.236
Observations 111
R2 / R2 adjusted 0.625 / 0.607
tab_model(m1, m2, m3, m4, model,
          digits=3, string.est="b (SE)",
          show.ci=FALSE, show.se=TRUE, collapse.se=TRUE)
  Ozone Ozone Ozone Ozone Ozone
Predictors b (SE) p b (SE) p b (SE) p b (SE) p b (SE) p
(Intercept) 18.599
(6.748)
0.007 -145.703
(18.447)
<0.001 -64.342
(23.055)
0.006 -58.054
(22.971)
0.013 -64.116
(23.482)
0.007
Solar R 0.127
(0.033)
<0.001 0.057
(0.026)
0.028 0.060
(0.023)
0.011 0.050
(0.023)
0.037 0.050
(0.023)
0.034
Temp 2.278
(0.246)
<0.001 1.652
(0.254)
<0.001 1.871
(0.274)
<0.001 1.896
(0.274)
<0.001
Wind -3.334
(0.654)
<0.001 -3.317
(0.646)
<0.001 -3.318
(0.645)
<0.001
Month -2.992
(1.516)
0.051 -3.040
(1.513)
0.047
Day 0.274
(0.230)
0.236
Observations 111 111 111 111 111
R2 / R2 adjusted 0.121 / 0.113 0.510 / 0.501 0.606 / 0.595 0.620 / 0.606 0.625 / 0.607

简单斜率检验与多重比较

【实践8】基于PROCESS()函数的调节效应与简单斜率分析

## 数据准备
data = airquality
data$Month = as.factor(data$Month)
data$Temp.C = (data$Temp - 32) / 1.8  # 摄氏度 = (华氏度 - 32) / 1.8
str(data)
'data.frame':   153 obs. of  7 variables:
 $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : Factor w/ 5 levels "5","6","7","8",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ Temp.C : num  19.4 22.2 23.3 16.7 13.3 ...
## 描述统计
Freq(data$Month)
Frequency Statistics:
──────────
    N    %
──────────
5  31 20.3
6  30 19.6
7  31 20.3
8  31 20.3
9  30 19.6
──────────
Total N = 153
Describe(data)
NOTE: `Month` transformed to numeric.

Descriptive Statistics:
──────────────────────────────────────────────────────────────────────
           N (NA)   Mean    SD | Median   Min    Max Skewness Kurtosis
──────────────────────────────────────────────────────────────────────
Ozone    116   37  42.13 32.99 |  31.50  1.00 168.00     1.21     1.11
Solar.R  146    7 185.93 90.06 | 205.00  7.00 334.00    -0.42    -1.00
Wind     153        9.96  3.52 |   9.70  1.70  20.70     0.34     0.03
Temp     153       77.88  9.47 |  79.00 56.00  97.00    -0.37    -0.46
Month*   153        2.99  1.42 |   3.00  1.00   5.00    -0.00    -1.32
Day      153       15.80  8.86 |  16.00  1.00  31.00     0.00    -1.22
Temp.C   153       25.49  5.26 |  26.11 13.33  36.11    -0.37    -0.46
──────────────────────────────────────────────────────────────────────
## PROCESS()调节效应分析
PROCESS(data, y="Ozone", x="Solar.R", mods="Month")

****************** PART 1. Regression Model Summary ******************

PROCESS Model ID : 1
Model Type : Simple Moderation
-    Outcome (Y) : Ozone
-  Predictor (X) : Solar.R
-  Mediators (M) : -
- Moderators (W) : Month
- Covariates (C) : -
-   HLM Clusters : -

All numeric predictors have been grand-mean centered.
(For details, please see the help page of PROCESS.)

Formula of Outcome:
-    Ozone ~ Solar.R*Month

CAUTION:
  Fixed effect (coef.) of a predictor involved in an interaction
  denotes its "simple effect/slope" at the other predictor = 0.
  Only when all predictors in an interaction are mean-centered
  can the fixed effect be interpreted as "main effect"!
  
Model Summary

────────────────────────────────────────
                (1) Ozone    (2) Ozone  
────────────────────────────────────────
(Intercept)      42.099 ***   24.254 ***
                 (2.974)      (5.617)   
Solar.R           0.127 ***    0.047    
                 (0.033)      (0.048)   
Month6                         5.269    
                             (10.753)   
Month7                        29.525 ***
                              (8.082)   
Month8                        39.033 ***
                              (8.075)   
Month9                         8.093    
                              (7.668)   
Solar.R:Month6                 0.090    
                              (0.113)   
Solar.R:Month7                 0.122    
                              (0.084)   
Solar.R:Month8                 0.234 ** 
                              (0.089)   
Solar.R:Month9                 0.007    
                              (0.081)   
────────────────────────────────────────
R^2               0.121        0.372    
Adj. R^2          0.113        0.317    
Num. obs.       111          111        
────────────────────────────────────────
Note. * p < .05, ** p < .01, *** p < .001.

************ PART 2. Mediation/Moderation Effect Estimate ************

Package Use : ‘interactions’ (v1.2.0)
Effect Type : Simple Moderation (Model 1)
Sample Size : 111 (42 missing observations deleted)
Random Seed : -
Simulations : -

Interaction Effect on "Ozone" (Y)
───────────────────────────────────────
                    F df1 df2     p    
───────────────────────────────────────
Solar.R * Month  2.12   4 101  .083 .  
───────────────────────────────────────

Simple Slopes: "Solar.R" (X) ==> "Ozone" (Y)
───────────────────────────────────────────────────────
 "Month" Effect    S.E.     t     p            [95% CI]
───────────────────────────────────────────────────────
 5        0.047 (0.048) 0.969  .335     [-0.049, 0.143]
 6        0.137 (0.102) 1.344  .182     [-0.065, 0.338]
 7        0.169 (0.068) 2.469  .015 *   [ 0.033, 0.304]
 8        0.281 (0.074) 3.772 <.001 *** [ 0.133, 0.428]
 9        0.054 (0.065) 0.838  .404     [-0.074, 0.182]
───────────────────────────────────────────────────────
PROCESS(data, y="Ozone", x="Solar.R", mods="Temp.C")

****************** PART 1. Regression Model Summary ******************

PROCESS Model ID : 1
Model Type : Simple Moderation
-    Outcome (Y) : Ozone
-  Predictor (X) : Solar.R
-  Mediators (M) : -
- Moderators (W) : Temp.C
- Covariates (C) : -
-   HLM Clusters : -

All numeric predictors have been grand-mean centered.
(For details, please see the help page of PROCESS.)

Formula of Outcome:
-    Ozone ~ Solar.R*Temp.C

CAUTION:
  Fixed effect (coef.) of a predictor involved in an interaction
  denotes its "simple effect/slope" at the other predictor = 0.
  Only when all predictors in an interaction are mean-centered
  can the fixed effect be interpreted as "main effect"!
  
Model Summary

────────────────────────────────────────
                (1) Ozone    (2) Ozone  
────────────────────────────────────────
(Intercept)      42.099 ***   40.004 ***
                 (2.974)      (2.247)   
Solar.R           0.127 ***    0.096 ***
                 (0.033)      (0.028)   
Temp.C                         4.122 ***
                              (0.426)   
Solar.R:Temp.C                 0.015 ** 
                              (0.005)   
────────────────────────────────────────
R^2               0.121        0.551    
Adj. R^2          0.113        0.539    
Num. obs.       111          111        
────────────────────────────────────────
Note. * p < .05, ** p < .01, *** p < .001.

************ PART 2. Mediation/Moderation Effect Estimate ************

Package Use : ‘interactions’ (v1.2.0)
Effect Type : Simple Moderation (Model 1)
Sample Size : 111 (42 missing observations deleted)
Random Seed : -
Simulations : -

Interaction Effect on "Ozone" (Y)
────────────────────────────────────────
                     F df1 df2     p    
────────────────────────────────────────
Solar.R * Temp.C  9.77   1 107  .002 ** 
────────────────────────────────────────

Simple Slopes: "Solar.R" (X) ==> "Ozone" (Y)
─────────────────────────────────────────────────────────────
 "Temp.C"      Effect    S.E.     t     p            [95% CI]
─────────────────────────────────────────────────────────────
 20.146 (- SD)  0.017 (0.028) 0.613  .541     [-0.038, 0.072]
 25.440 (Mean)  0.096 (0.028) 3.466 <.001 *** [ 0.041, 0.151]
 30.735 (+ SD)  0.175 (0.045) 3.880 <.001 *** [ 0.085, 0.264]
─────────────────────────────────────────────────────────────
PROCESS(data, y="Ozone", x="Solar.R", mods="Temp.C",
        mod1.val=c(0, 5, 10, 15, 20, 25, 30, 35, 40))

****************** PART 1. Regression Model Summary ******************

PROCESS Model ID : 1
Model Type : Simple Moderation
-    Outcome (Y) : Ozone
-  Predictor (X) : Solar.R
-  Mediators (M) : -
- Moderators (W) : Temp.C
- Covariates (C) : -
-   HLM Clusters : -

All numeric predictors have been grand-mean centered.
(For details, please see the help page of PROCESS.)

Formula of Outcome:
-    Ozone ~ Solar.R*Temp.C

CAUTION:
  Fixed effect (coef.) of a predictor involved in an interaction
  denotes its "simple effect/slope" at the other predictor = 0.
  Only when all predictors in an interaction are mean-centered
  can the fixed effect be interpreted as "main effect"!
  
Model Summary

────────────────────────────────────────
                (1) Ozone    (2) Ozone  
────────────────────────────────────────
(Intercept)      42.099 ***   40.004 ***
                 (2.974)      (2.247)   
Solar.R           0.127 ***    0.096 ***
                 (0.033)      (0.028)   
Temp.C                         4.122 ***
                              (0.426)   
Solar.R:Temp.C                 0.015 ** 
                              (0.005)   
────────────────────────────────────────
R^2               0.121        0.551    
Adj. R^2          0.113        0.539    
Num. obs.       111          111        
────────────────────────────────────────
Note. * p < .05, ** p < .01, *** p < .001.

************ PART 2. Mediation/Moderation Effect Estimate ************

Package Use : ‘interactions’ (v1.2.0)
Effect Type : Simple Moderation (Model 1)
Sample Size : 111 (42 missing observations deleted)
Random Seed : -
Simulations : -

Interaction Effect on "Ozone" (Y)
────────────────────────────────────────
                     F df1 df2     p    
────────────────────────────────────────
Solar.R * Temp.C  9.77   1 107  .002 ** 
────────────────────────────────────────

Simple Slopes: "Solar.R" (X) ==> "Ozone" (Y)
──────────────────────────────────────────────────────────
 "Temp.C" Effect    S.E.      t     p             [95% CI]
──────────────────────────────────────────────────────────
 0.000    -0.283 (0.112) -2.536  .013 *   [-0.504, -0.062]
 5.000    -0.209 (0.089) -2.356  .020 *   [-0.384, -0.033]
 10.000   -0.134 (0.066) -2.032  .045 *   [-0.265, -0.003]
 15.000   -0.060 (0.045) -1.330  .186     [-0.148,  0.029]
 20.000    0.015 (0.028)  0.529  .598     [-0.041,  0.071]
 25.000    0.089 (0.027)  3.335  .001 **  [ 0.036,  0.143]
 30.000    0.164 (0.042)  3.886 <.001 *** [ 0.080,  0.247]
 35.000    0.238 (0.063)  3.781 <.001 *** [ 0.113,  0.363]
 40.000    0.313 (0.085)  3.660 <.001 *** [ 0.143,  0.482]
──────────────────────────────────────────────────────────
PROCESS(data, y="Ozone", x="Solar.R", mods="Temp.C",
        covs="Month")  # Month作为协变量(控制变量)

****************** PART 1. Regression Model Summary ******************

PROCESS Model ID : 1
Model Type : Simple Moderation
-    Outcome (Y) : Ozone
-  Predictor (X) : Solar.R
-  Mediators (M) : -
- Moderators (W) : Temp.C
- Covariates (C) : Month
-   HLM Clusters : -

All numeric predictors have been grand-mean centered.
(For details, please see the help page of PROCESS.)

Formula of Outcome:
-    Ozone ~ Month + Solar.R*Temp.C

CAUTION:
  Fixed effect (coef.) of a predictor involved in an interaction
  denotes its "simple effect/slope" at the other predictor = 0.
  Only when all predictors in an interaction are mean-centered
  can the fixed effect be interpreted as "main effect"!
  
Model Summary

────────────────────────────────────────
                (1) Ozone    (2) Ozone  
────────────────────────────────────────
(Intercept)      24.442 ***   49.873 ***
                 (5.735)      (5.886)   
Month6            5.069      -24.915 ** 
                (10.980)      (9.370)   
Month7           31.042 ***  -11.393    
                 (8.018)      (8.254)   
Month8           36.903 ***   -5.166    
                 (8.201)      (8.607)   
Month9            8.912      -15.473 *  
                 (7.763)      (7.080)   
Solar.R           0.115 ***    0.088 ** 
                 (0.030)      (0.028)   
Temp.C                         4.553 ***
                              (0.588)   
Solar.R:Temp.C                 0.014 ** 
                              (0.005)   
────────────────────────────────────────
R^2               0.320        0.595    
Adj. R^2          0.287        0.567    
Num. obs.       111          111        
────────────────────────────────────────
Note. * p < .05, ** p < .01, *** p < .001.

************ PART 2. Mediation/Moderation Effect Estimate ************

Package Use : ‘interactions’ (v1.2.0)
Effect Type : Simple Moderation (Model 1)
Sample Size : 111 (42 missing observations deleted)
Random Seed : -
Simulations : -

Interaction Effect on "Ozone" (Y)
────────────────────────────────────────
                     F df1 df2     p    
────────────────────────────────────────
Solar.R * Temp.C  9.24   1 103  .003 ** 
────────────────────────────────────────

Simple Slopes: "Solar.R" (X) ==> "Ozone" (Y)
─────────────────────────────────────────────────────────────
 "Temp.C"      Effect    S.E.     t     p            [95% CI]
─────────────────────────────────────────────────────────────
 20.146 (- SD)  0.011 (0.028) 0.416  .679     [-0.043, 0.066]
 25.440 (Mean)  0.088 (0.028) 3.090  .003 **  [ 0.031, 0.144]
 30.735 (+ SD)  0.164 (0.046) 3.566 <.001 *** [ 0.073, 0.255]
─────────────────────────────────────────────────────────────
P = PROCESS(data, y="Ozone", x="Solar.R", mods="Temp.C",
            covs=c("Month", "Day", "Wind"))  # 控制其他所有变量

****************** PART 1. Regression Model Summary ******************

PROCESS Model ID : 1
Model Type : Simple Moderation
-    Outcome (Y) : Ozone
-  Predictor (X) : Solar.R
-  Mediators (M) : -
- Moderators (W) : Temp.C
- Covariates (C) : Month, Day, Wind
-   HLM Clusters : -

All numeric predictors have been grand-mean centered.
(For details, please see the help page of PROCESS.)

Formula of Outcome:
-    Ozone ~ Month + Day + Wind + Solar.R*Temp.C

CAUTION:
  Fixed effect (coef.) of a predictor involved in an interaction
  denotes its "simple effect/slope" at the other predictor = 0.
  Only when all predictors in an interaction are mean-centered
  can the fixed effect be interpreted as "main effect"!
  
Model Summary

────────────────────────────────────────
                (1) Ozone    (2) Ozone  
────────────────────────────────────────
(Intercept)      31.644 ***   47.479 ***
                 (4.927)      (5.394)   
Month6            8.331      -14.987    
                 (9.237)      (8.722)   
Month7           17.823 *     -9.616    
                 (7.005)      (7.531)   
Month8           24.416 ***   -2.389    
                 (7.130)      (7.905)   
Month9            2.088      -13.028 *  
                 (6.594)      (6.444)   
Day               0.055        0.129    
                 (0.261)      (0.223)   
Wind             -4.640 ***   -3.117 ***
                 (0.683)      (0.631)   
Solar.R           0.097 ***    0.093 ***
                 (0.025)      (0.026)   
Temp.C                         3.388 ***
                              (0.592)   
Solar.R:Temp.C                 0.014 ** 
                              (0.004)   
────────────────────────────────────────
R^2               0.530        0.675    
Adj. R^2          0.498        0.646    
Num. obs.       111          111        
────────────────────────────────────────
Note. * p < .05, ** p < .01, *** p < .001.

************ PART 2. Mediation/Moderation Effect Estimate ************

Package Use : ‘interactions’ (v1.2.0)
Effect Type : Simple Moderation (Model 1)
Sample Size : 111 (42 missing observations deleted)
Random Seed : -
Simulations : -

Interaction Effect on "Ozone" (Y)
─────────────────────────────────────────
                      F df1 df2     p    
─────────────────────────────────────────
Solar.R * Temp.C  10.60   1 101  .002 ** 
─────────────────────────────────────────

Simple Slopes: "Solar.R" (X) ==> "Ozone" (Y)
─────────────────────────────────────────────────────────────
 "Temp.C"      Effect    S.E.     t     p            [95% CI]
─────────────────────────────────────────────────────────────
 20.146 (- SD)  0.018 (0.025) 0.717  .475     [-0.032, 0.067]
 25.440 (Mean)  0.093 (0.026) 3.593 <.001 *** [ 0.042, 0.144]
 30.735 (+ SD)  0.167 (0.042) 3.990 <.001 *** [ 0.084, 0.251]
─────────────────────────────────────────────────────────────
P$results[[1]]$jn[[1]]$plot

模型诊断

【知识点】回归模型的基本假定

回归模型的基本假定(basic assumptions)

  • 线性关系(linearity)
  • 残差独立(independence)
  • 残差正态分布(normality)
  • 残差方差齐性(homoscedasticity)
  • 不存在多重共线性(no multicollinearity)

【实践9】检查回归模型是否满足基本假定

  • 使用performance包的check_*()系列函数(bruceR包已加载performance包)
model = lm(Ozone ~ ., data=airquality)

check_model(model)  # 一次性检查所有假定

check_outliers(model)  # 极端值问题
OK: No outliers detected.
- Based on the following method and threshold: cook (0.9).
- For variable: (Whole model)
check_normality(model)  # 非正态问题
Warning: Non-normality of residuals detected (p < .001).
check_heteroscedasticity(model)  # 异方差问题
Warning: Heteroscedasticity (non-constant error variance) detected (p = 0.008).
check_autocorrelation(model)  # 自相关问题
OK: Residuals appear to be independent and not autocorrelated (p = 0.860).
check_collinearity(model)  # 共线性问题
# Check for Multicollinearity

Low Correlation

    Term  VIF       VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
 Solar.R 1.15 [1.03,     1.66]     1.07      0.87     [0.60, 0.97]
    Wind 1.33 [1.14,     1.78]     1.15      0.75     [0.56, 0.88]
    Temp 1.72 [1.40,     2.29]     1.31      0.58     [0.44, 0.71]
   Month 1.26 [1.09,     1.71]     1.12      0.80     [0.59, 0.91]
     Day 1.01 [1.00, 83489.99]     1.01      0.99     [0.00, 1.00]

* 拓展:其他回归模型

【探索发现】各类回归模型使用的R函数

  • 一般线性模型
    • lm()函数:OLS回归(连续因变量)
  • 广义线性模型
    • glm()函数
      • Logistic回归(二分类因变量):glm(..., data, family=binomial)
      • Poisson回归(计数因变量):glm(..., data, family=poisson)

  • 多分类因变量回归模型
    • nnet::multinom()函数:Multinomial Log-Linear回归(多分类因变量)
  • 线性混合模型(多水平模型)
    • nlme::lme()函数
    • lme4::lmer()lmerTest::lmer()函数
  • 广义线性混合模型
    • nlme::nlme()函数
    • lme4::glmer()函数

(多水平模型/线性混合模型的原理与方法,将在研究生阶段系统学习)

【阶段作业②】统计分析综合

作业要求:

  • 基于期末自选数据和所有代码积累,综合运用第7章(基础统计)、第8章(方差分析)、第9章(回归分析)所学的统计方法和代码,自由分析你的期末自选数据,体现对R语言统计分析代码的掌握和迁移应用(7/8/9每章至少有一种方法体现在作业中)
  • 使用R Markdown完成,对关键代码及结果要有注释说明

平台提交:

  • 运行得到的HTML网页
    • 提交文件命名格式:学号-姓名-R阶段作业2.html
LS0tDQp0aXRsZTogIuOAilLor63oqIDjgIvnrKw556ug77ya5Zue5b2S5YiG5p6QIg0Kc3VidGl0bGU6IDxhIGhyZWY9Imh0dHBzOi8vcHN5Y2hicnVjZS5naXRodWIuaW8vUkNvdXJzZS8iPui/lOWbnuivvueoi+S4u+mhtTwvYT4NCmF1dGhvcjogIuaOiOivvuaVmeW4iO+8muWMheWvkuWQtOmcnCINCiMgZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMw0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogZmFsc2UNCiAgICAgIHNtb290aF9zY3JvbGw6IGZhbHNlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGFuY2hvcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCiAgICBjc3M6IFJtZENTUy5jc3MNCi0tLQ0KDQpgYGB7PWh0bWx9DQo8cCBzdHlsZT0iZm9udC1zaXplOiAxMnB4Ij7niYjmnYPlo7DmmI7vvJrmnKzlpZfor77nqIvmnZDmlpnlvIDmupDvvIzkvb/nlKjlkozliIbkuqvlv4XpobvpgbXlrojjgIzliJvkvZzlhbHnlKjorrjlj6/ljY/orq4gQ0MgQlktTkMtU0HjgI3vvIjmnaXmupDlvJXnlKgt6Z2e5ZWG5Lia55So6YCU5L2/55SoLeS7peebuOWQjOaWueW8j+WFseS6q++8ieOAgjxpbWcgc3JjPSJpbWcvQ0MtQlktTkMtU0EuanBnIiB3aWR0aD0iMTIwcHgiIGhlaWdodD0iNDJweCIgc3R5bGU9ImZsb2F0OiByaWdodCIgLz48L3A+DQpgYGANCg0KYGBge3IgQ29uZmlnLCBpbmNsdWRlPUZBTFNFfQ0Kb3B0aW9ucygNCiAga25pdHIua2FibGUuTkEgPSAiIiwNCiAgZGlnaXRzID0gNA0KKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBjb21tZW50ID0gIiIsDQogIGZpZy53aWR0aCA9IDYsDQogIGZpZy5oZWlnaHQgPSA0LA0KICBkcGkgPSAzMDANCikNCmBgYA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyBDaGFwMDnvvJrlm57lvZLliIbmnpANCg0KIyMjIyDlvoDmnJ/opoHngrnlm57pob4NCg0KLSAgIFtDaGFwMDggXCMg5aSa5Zug57Sg5pa55beu5YiG5p6QXShodHRwczovL3BzeWNoYnJ1Y2UuZ2l0aHViLmlvL1JDb3Vyc2UvQ2hhcDA4IyVFNSVBNCU5QSVFNSU5QiVBMCVFNyVCNCVBMCVFNiU5NiVCOSVFNSVCNyVBRSVFNSU4OCU4NiVFNiU5RSU5MCl7LnVyaX0NCi0gICBbQ2hhcDA4IFwjIOeugOWNleaViOW6lOajgOmqjOS4juWkmumHjeavlOi+g10oaHR0cHM6Ly9wc3ljaGJydWNlLmdpdGh1Yi5pby9SQ291cnNlL0NoYXAwOCMlRTclQUUlODAlRTUlOEQlOTUlRTYlOTUlODglRTUlQkElOTQlRTYlQTMlODAlRTklQUElOEMlRTQlQjglOEUlRTUlQTQlOUElRTklODclOEQlRTYlQUYlOTQlRTglQkUlODMpey51cml9DQoNCiMjIyMg5pys56ug6KaB54K555uu5b2VDQoNCi0gICBb44CQ55+l6K+G54K544CR5Zue5b2S5YiG5p6Q77yIcmVncmVzc2lvbu+8iee7n+iuoeacr+ivrV0oI+efpeivhueCueWbnuW9kuWIhuaekHJlZ3Jlc3Npb27nu5/orqHmnK/or60pDQotICAgW+OAkOWunui3tTHjgJHmiKrot53mqKHlnotdKCPlrp7ot7Ux5oiq6Led5qih5Z6LKQ0KLSAgIFvjgJDlrp7ot7Uy44CR5LiA5YWD5Zue5b2S5qih5Z6LXSgj5a6e6Le1MuS4gOWFg+WbnuW9kuaooeWeiykNCi0gICBb44CQ5a6e6Le1M+OAkeWkmuWFg+WbnuW9kuaooeWei10oI+Wunui3tTPlpJrlhYPlm57lvZLmqKHlnospDQotICAgW+OAkOWunui3tTTjgJHkuqTkupLkvZznlKjmqKHlnotdKCPlrp7ot7U05Lqk5LqS5L2c55So5qih5Z6LKe+8iOmHjeeCue+8iQ0KLSAgIFvjgJDnn6Xor4bngrnjgJHkuLrku4DkuYjlm57lvZLliIbmnpDkuqTkupLkvZznlKjkuK3nmoTmlpznjoflubbkuI3mmK/igJzkuLvmlYjlupTigJ3vvJ9dKCPnn6Xor4bngrnkuLrku4DkuYjlm57lvZLliIbmnpDkuqTkupLkvZznlKjkuK3nmoTmlpznjoflubbkuI3mmK/kuLvmlYjlupQp77yI6YeN54K577yJDQotICAgW+OAkOWunui3tTXjgJHlpoLkvZXorqnlm57lvZLliIbmnpDkuqTkupLkvZznlKjkuK3nmoTmlpznjoflhbfmnInigJzkuLvmlYjlupTigJ3lkKvkuYnvvJ9dKCPlrp7ot7U15aaC5L2V6K6p5Zue5b2S5YiG5p6Q5Lqk5LqS5L2c55So5Lit55qE5pac546H5YW35pyJ5Li75pWI5bqU5ZCr5LmJKQ0KLSAgIFvjgJDlrp7ot7U244CR5aSa5YWD5Zue5b2S5qih5Z6L55qE57uT5p6c6KGo6L6T5Ye6XSgj5a6e6Le1NuWkmuWFg+WbnuW9kuaooeWei+eahOe7k+aenOihqOi+k+WHuinvvIjph43ngrnvvIkNCi0gICBb44CQ5a6e6Le1N+OAkeepuuawlOi0qOmHj+aVsOaNruWbnuW9kuWIhuaekOWunuS+i10oI+Wunui3tTfnqbrmsJTotKjph4/mlbDmja7lm57lvZLliIbmnpDlrp7kvospDQotICAgW+OAkOWunui3tTjjgJHln7rkuo5QUk9DRVNTKCnlh73mlbDnmoTosIPoioLmlYjlupTkuI7nroDljZXmlpznjofliIbmnpBdKCPlrp7ot7U45Z+65LqOcHJvY2Vzc+WHveaVsOeahOiwg+iKguaViOW6lOS4jueugOWNleaWnOeOh+WIhuaekCnvvIjph43ngrnvvIkNCi0gICBb44CQ55+l6K+G54K544CR5Zue5b2S5qih5Z6L55qE5Z+65pys5YGH5a6aXSgj55+l6K+G54K55Zue5b2S5qih5Z6L55qE5Z+65pys5YGH5a6aKQ0KLSAgIFvjgJDlrp7ot7U544CR5qOA5p+l5Zue5b2S5qih5Z6L5piv5ZCm5ruh6Laz5Z+65pys5YGH5a6aXSgj5a6e6Le1OeajgOafpeWbnuW9kuaooeWei+aYr+WQpua7oei2s+WfuuacrOWBh+WumikNCi0gICBb44CQ5o6i57Si5Y+R546w44CR5ZCE57G75Zue5b2S5qih5Z6L5L2/55So55qEUuWHveaVsF0oI+aOoue0ouWPkeeOsOWQhOexu+WbnuW9kuaooeWei+S9v+eUqOeahHLlh73mlbApDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyMg5pys56ug5omA6ZyAUuWMhQ0KbGlicmFyeShicnVjZVIpICAjIOWbnuW9kuaooeWei+e7k+aenOeahCBXb3JkIOihqOagvOi+k+WHug0KbGlicmFyeShzalBsb3QpICAjIOWbnuW9kuaooeWei+e7k+aenOeahCBIVE1MIOihqOagvOi+k+WHug0KYGBgDQoNCiMg5Zue5b2S5YiG5p6Q55qE57uf6K6h55+l6K+G5Zue6aG+DQoNCiMjIyMg44CQ55+l6K+G54K544CR5Zue5b2S5YiG5p6Q77yIcmVncmVzc2lvbu+8iee7n+iuoeacr+ivrSB7I+efpeivhueCueWbnuW9kuWIhuaekHJlZ3Jlc3Npb27nu5/orqHmnK/or619DQoNCuWkmuWFg+WbnuW9kuaooeWei+eahOS4gOiIrOW9ouW8j++8mg0KDQokJA0KWV9pID0gYl8wICsgYl8xIFhfMSArIGJfMiBYXzIgKyAuLi4gKyBiX3AgWF9wICsgZV9pDQokJA0KDQotICAgKirmiKrot53vvIhpbnRlcmNlcHTvvIkqKg0KICAgIC0gICAkYl8wJO+8muaJgOacieiHquWPmOmHj+mDveWPljDml7bvvIzlm6Dlj5jph4/nmoTpooTmtYvmnJ/mnJvlgLwNCiAgICAgICAgLSAgIOWmguaenOayoeacieS7u+S9leiHquWPmOmHj++8jOaIqui3neWwseaYr+WboOWPmOmHj+eahOW5s+Wdh+WAvA0KLSAgICoq5pac546H77yIc2xvcGXvvIkqKg0KICAgIC0gICAkYl8xJCwgLi4uLCAkYl9wJO+8muiHquWPmOmHj+avj+WPmOWMljHvvIzlm6Dlj5jph4/lj5jljJblpJrlsJHkuKrljZXkvY0NCiAgICAgICAgLSAgIOmdnuagh+WHhuWMluezu+aVsO+8miRiJA0KICAgICAgICAtICAg5qCH5YeG5YyW57O75pWw77yaJFxiZXRhJA0KLSAgICoq5q6L5beu77yIcmVzaWR1YWzvvIkqKg0KICAgIC0gICAkZV9pID0gWV9pIC0gXGhhdHtZX2l9JO+8muavj+S4quS4quS9k++8iCRpJO+8ieWboOWPmOmHj+eahOecn+Wunuingua1i+WAvO+8iCRZX2kk77yJ5LiO5qih5Z6L6aKE5rWL5YC877yIJFxoYXR7WV9pfSTvvInkuYvpl7TnmoTlt67lvIINCg0KIyDlm57lvZLmqKHlnovlu7rnq4vkuI7nu5PmnpzmiqXlkYoNCg0KYGBge3J9DQojIyDmlbDmja7lh4blpIcNCmRhdGEgPSBkYXRhLnRhYmxlKA0KICBBID0gYygwLCAwLCAwLCAgMCwgMCwgMCwgIDEsIDEsIDEsICAxLCAxLCAxKSwNCiAgQiA9IGMoMCwgMCwgMCwgIDEsIDEsIDEsICAwLCAwLCAwLCAgMSwgMSwgMSksDQogIFkgPSBjKDAsIDEsIDIsICAzLCA0LCA1LCAgMCwgMSwgMiwgIDYsIDcsIDgpDQopDQpkYXRhDQoNCiMjIOaWueW3ruWIhuaekA0KbSA9IE1BTk9WQShkYXRhLCBkdj0iWSIsIGJldHdlZW49YygiQSIsICJCIikpDQplbW1pcChtLCB+IEEsIENJcz1UUlVFKQ0KZW1taXAobSwgfiBCLCBDSXM9VFJVRSkNCmVtbWlwKG0sIH4gQSB8IEIsIENJcz1UUlVFKQ0KZW1taXAobSwgQiB+IEEsIENJcz1UUlVFKQ0KYGBgDQoNCiMjIyMg44CQ5a6e6Le1MeOAkeaIqui3neaooeWeiyB7I+Wunui3tTHmiKrot53mqKHlnot9DQoNCmBgYHtyfQ0KIyMgbG0oZm9ybXVsYT0uLi4sIGRhdGE9Li4uKQ0KDQptMSA9IGxtKFkgfiAxLCBkYXRhKSAgIyAx6KGo56S65qih5Z6L5oiq6LedDQpzdW1tYXJ5KG0xKQ0KYnJ1Y2VSOjptb2RlbF9zdW1tYXJ5KG0xKQ0Kc2pQbG90Ojp0YWJfbW9kZWwobTEpDQpzalBsb3Q6OnRhYl9tb2RlbCgNCiAgbTEsIGRpZ2l0cz0zLCBzaG93LmNpPUZBTFNFLA0KICBzaG93LnNlPVRSVUUsIGNvbGxhcHNlLnNlPVRSVUUNCikNCg0KIyMg5oiq6Led5ZCr5LmJ77yaWeeahOWdh+WAvA0KbWVhbihkYXRhJFkpICAjIOaIqui3neetieS6juWdh+WAvA0KcHJlZGljdChtMSkgICMg6aKE5rWL5pyf5pyb5YC8DQpUVEVTVChkYXRhLCB5PSJZIiwgZGlnaXRzPTMpICAjIOaIqui3neaooeWei+etieS7t+S6juWNleagt+acrHTmo4DpqowNCmBgYA0KDQojIyMjIOOAkOWunui3tTLjgJHkuIDlhYPlm57lvZLmqKHlnosgeyPlrp7ot7Uy5LiA5YWD5Zue5b2S5qih5Z6LfQ0KDQpgYGB7cn0NCm0yID0gbG0oWSB+IDEgKyBBLCBkYXRhKQ0KbTIgPSBsbShZIH4gQSwgZGF0YSkgICMg55u45b2T5LqO77yaWSB+IDEgKyBBDQojIOW9k+acieiHquWPmOmHj+aXtu+8jOaIqui3nTHpu5jorqTlrZjlnKjvvIzlj6/nnIHnlaXkuI3lhpkNCnN1bW1hcnkobTIpDQp0YWJfbW9kZWwobTIsIGRpZ2l0cz0zLCBzaG93LmNpPUZBTFNFLA0KICAgICAgICAgIHNob3cuc2U9VFJVRSwgY29sbGFwc2Uuc2U9VFJVRSkNCg0KIyMg5oiq6Led5ZCr5LmJ77yaQT0w5pe277yMWeeahOmihOa1i+acn+acm+WAvO+8iOetieS6juWdh+WAvO+8iQ0KbWVhbihkYXRhW0E9PTBdJFkpDQpwcmVkaWN0KG0yKSAgIyDpooTmtYvmnJ/mnJvlgLwNCnByZWRpY3QobTIsIGRhdGEudGFibGUoQT0wKSkgICMgQT0w5pe277yMWeeahOmihOa1i+acn+acm+WAvA0KIyMg5pac546H5ZCr5LmJ77yaQeS7jjDlj5jliLAx77yMWeeahOWdh+WAvOWPmOWMlg0KVFRFU1QoZGF0YSwgeT0iWSIsIHg9IkEiLCBkaWdpdHM9MykgICMg5LiA5YWD5Zue5b2S562J5Lu35LqO54us56uL5qC35pysdOajgOmqjA0KYGBgDQoNCmBgYHtyfQ0KbTMgPSBsbShZIH4gMSArIEIsIGRhdGEpDQptMyA9IGxtKFkgfiBCLCBkYXRhKSAgIyDnm7jlvZPkuo7vvJpZIH4gMSArIEINCiMg5b2T5pyJ6Ieq5Y+Y6YeP5pe277yM5oiq6LedMem7mOiupOWtmOWcqO+8jOWPr+ecgeeVpeS4jeWGmQ0Kc3VtbWFyeShtMykNCnRhYl9tb2RlbChtMywgZGlnaXRzPTMsIHNob3cuY2k9RkFMU0UsDQogICAgICAgICAgc2hvdy5zZT1UUlVFLCBjb2xsYXBzZS5zZT1UUlVFKQ0KDQojIyDmiKrot53lkKvkuYnvvJpCPTDml7bvvIxZ55qE6aKE5rWL5pyf5pyb5YC877yI562J5LqO5Z2H5YC877yJDQptZWFuKGRhdGFbQj09MF0kWSkNCnByZWRpY3QobTMpICAjIOmihOa1i+acn+acm+WAvA0KcHJlZGljdChtMywgZGF0YS50YWJsZShCPTApKSAgIyBCPTDml7bvvIxZ55qE6aKE5rWL5pyf5pyb5YC8DQojIyDmlpznjoflkKvkuYnvvJpC5LuOMOWPmOWIsDHvvIxZ55qE5Z2H5YC85Y+Y5YyWDQpUVEVTVChkYXRhLCB5PSJZIiwgeD0iQiIsIGRpZ2l0cz0zKSAgIyDkuIDlhYPlm57lvZLnrYnku7fkuo7ni6znq4vmoLfmnKx05qOA6aqMDQpgYGANCg0KIyMjIyDjgJDlrp7ot7Uz44CR5aSa5YWD5Zue5b2S5qih5Z6LIHsj5a6e6Le1M+WkmuWFg+WbnuW9kuaooeWei30NCg0KYGBge3J9DQptNCA9IGxtKFkgfiBBICsgQiwgZGF0YSkgICMg55u45b2T5LqO77yaWSB+IDEgKyBBICsgQg0KIyDlvZPmnInoh6rlj5jph4/ml7bvvIzmiKrot50x6buY6K6k5a2Y5Zyo77yM5Y+v55yB55Wl5LiN5YaZDQpzdW1tYXJ5KG00KQ0KdGFiX21vZGVsKG00LCBkaWdpdHM9Mywgc2hvdy5jaT1GQUxTRSwNCiAgICAgICAgICBzaG93LnNlPVRSVUUsIGNvbGxhcHNlLnNlPVRSVUUpDQoNCiMjIOaIqui3neWQq+S5ie+8mkE9Qj0w5pe277yMWeeahOmihOa1i+acn+acm+WAvO+8iOatpOaXtuS4jeWGjeaYr+eugOWNleWdh+WAvO+8iQ0KbWVhbihkYXRhW0E9PTAgJiBCPT0wXSRZKSAgIyDnroDljZXlnYflgLwNCnByZWRpY3QobTQsIGRhdGEudGFibGUoQT0wLCBCPTApKSAgIyBBPUI9MOaXtu+8jFnnmoTpooTmtYvmnJ/mnJvlgLwNCiMjIOaWnOeOh+WQq+S5ie+8mkHmiJZC5LuOMOWPmOWIsDHvvIxZ55qE6aKE5rWL5pyf5pyb5YC85Y+Y5YyWDQptZWFuKGRhdGFbQT09MV0kWSkgLSBtZWFuKGRhdGFbQT09MF0kWSkNCm1lYW4oZGF0YVtCPT0xXSRZKSAtIG1lYW4oZGF0YVtCPT0wXSRZKQ0KYGBgDQoNCiMjIyMg44CQ5a6e6Le1NOOAkeS6pOS6kuS9nOeUqOaooeWeiyB7I+Wunui3tTTkuqTkupLkvZznlKjmqKHlnot9DQoNCi0gICBS6K+t6KiA5Zue5b2S5qih5Z6L5YWs5byP5Lit55qE5Lqk5LqS5L2c55So6K6+5a6a77yI6YCC55So5LqO5omA5pyJ57G75Z6L55qE5Zue5b2S5qih5Z6L77yJDQogICAgLSAgIGBZIH4gQSAqIEJg77yI57K+566A5YaZ5rOV77yJDQogICAgLSAgIGBZIH4gMSArIEEgKyBCICsgQTpCYO+8iOWxleW8gOWGmeazle+8iQ0KICAgICAgICAtICAgYDFg5Li65oiq6Led77yI5Y+v55yB55Wl5LiN5YaZ77yJDQogICAgICAgIC0gICBgQWDlkoxgQmDkuLrlm7rlrprmlYjlupTvvIjigJzmnaHku7bmlYjlupTigJ3vvIzlubbpnZ5BTk9WQeS4reeahOKAnOS4u+aViOW6lOKAne+8ge+8ge+8ge+8ieKtkO+4jw0KICAgICAgICAtICAgYEE6QmDkuLrkuqTkupLpobnvvIhpbnRlcmFjdGlvbiB0ZXJt77yJDQoNCmBgYHtyfQ0KIyMg5pa55beu5YiG5p6Q77yI5Zue6aG+77yJDQpNQU5PVkEoZGF0YSwgZHY9IlkiLCBiZXR3ZWVuPWMoIkEiLCAiQiIpKQ0KDQojIyDlm57lvZLliIbmnpANCm01ID0gbG0oWSB+IEEgKiBCLCBkYXRhKSAgIyDnm7jlvZPkuo7vvJpZIH4gMSArIEEgKyBCICsgQTpCDQphbm92YShtNSkgICMg55yf5q2j55qE5Li75pWI5bqU44CB5Lqk5LqS5L2c55SoDQpzdW1tYXJ5KG01KSAgIyBB5ZKMQueahOWbuuWumuaViOW6lO+8iOadoeS7tuaViOW6lO+8ie+8jOW5tumdnuKAnOS4u+aViOW6lOKAne+8ge+8ge+8gQ0KIyMgQeWSjELnmoTlm7rlrprmlYjlupTvvIjmnaHku7bmlYjlupTvvInvvIzlubbpnZ7igJzkuLvmlYjlupTigJ3vvIHvvIHvvIENCnRhYl9tb2RlbChtNSwgZGlnaXRzPTMsIHNob3cuY2k9RkFMU0UsDQogICAgICAgICAgc2hvdy5zZT1UUlVFLCBjb2xsYXBzZS5zZT1UUlVFKQ0KYGBgDQoNCiMjIyMg44CQ55+l6K+G54K544CR5Li65LuA5LmI5Zue5b2S5YiG5p6Q5Lqk5LqS5L2c55So5Lit55qE5pac546H5bm25LiN5piv4oCc5Li75pWI5bqU4oCd77yfIHsj55+l6K+G54K55Li65LuA5LmI5Zue5b2S5YiG5p6Q5Lqk5LqS5L2c55So5Lit55qE5pac546H5bm25LiN5piv5Li75pWI5bqUfQ0KDQotICAg5Zue5b2S5YiG5p6Q5Lit77yM5aaC5p6c5a2Y5Zyo5Lqk5LqS5L2c55So77yIQSDDlyBC77yJ77yM5YiZ5q+P5Liq6Ieq5Y+Y6YeP55qE5pac546H5Luj6KGo5Y+m5LiA5Liq5Y+Y6YeP5Y+WMOaXtu+8jOivpeWPmOmHj+eahCoq566A5Y2V5pac546H77yI5Lmf5Y+v5Lul5Y+r77ya5Zu65a6a5pWI5bqU44CB566A5Y2V5pWI5bqU44CB5p2h5Lu25pWI5bqU77yJKirvvIENCi0gICDlnKjjgJDlrp7ot7U044CR5qih5Z6L57uT5p6c5Lit77yaDQogICAgLSAgIEHnmoTmlpznjocv5p2h5Lu25pWI5bqU77yIKmIqID0gMC4wMO+8ie+8mkIgPSAw5pe277yMQeeahOeugOWNleaWnOeOh++8iDEuMDAg4oCTIDEuMDAgPSAwLjAw77yJDQogICAgLSAgIELnmoTmlpznjocv5p2h5Lu25pWI5bqU77yIKmIqID0gMy4wMO+8ie+8mkEgPSAw5pe277yMQueahOeugOWNleaWnOeOh++8iDQuMDAg4oCTIDEuMDAgPSAzLjAw77yJDQotICAg6ICM55yf5q2j55qE5Li75pWI5bqU57uT5p6c5piv77yaDQogICAgLSAgIEHnmoTkuLvmlYjlupQv6L656ZmF5pWI5bqU77ya5peg6K66Qu+8jEEx5LiOQTDnmoTovrnpmYXlnYflgLzlt67lvILvvIg0LjAwIOKAkyAyLjUwID0gMS41MO+8iQ0KICAgIC0gICBC55qE5Li75pWI5bqUL+i+uemZheaViOW6lO+8muaXoOiuukHvvIxCMeS4jkIw55qE6L656ZmF5Z2H5YC85beu5byC77yINS41MCDigJMgMS4wMCA9IDQuNTDvvIkNCg0KfCDljp/lp4vmlbDmja4gICB8IEIw5p2h5Lu2ICB8IEIx5p2h5Lu2ICB8DQp8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18DQp8ICoqQTDmnaHku7YqKiB8IDAsIDEsIDIgfCAzLCA0LCA1IHwNCnwgKipBMeadoeS7tioqIHwgMCwgMSwgMiB8IDYsIDcsIDggfA0KDQo6IOihqDEuIOWOn+Wni+aVsOaNrg0KDQp8IOWdh+WAvCAgICAgICAgICAgfCBCMOadoeS7tuWdh+WAvCB8IEIx5p2h5Lu25Z2H5YC8IHwg6L656ZmF5Z2H5YC8IHwNCnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwNCnwgKipBMOadoeS7tuWdh+WAvCoqIHwgKioxLjAwKiogICB8ICoqNC4wMCoqICAgfCAyLjUwICAgICB8DQp8ICoqQTHmnaHku7blnYflgLwqKiB8ICoqMS4wMCoqICAgfCAqKjcuMDAqKiAgIHwgNC4wMCAgICAgfA0KfCAqKui+uemZheWdh+WAvCoqICAgfCAxLjAwICAgICAgIHwgNS41MCAgICAgICB8IDMuMjUgICAgIHwNCg0KOiDooagyLiBB5ZKMQueahOadoeS7tuWdh+WAvOS4jui+uemZheWdh+WAvA0KDQpgYGB7cn0NCiMjIOazqOaEj++8jOi/meS4jeaYr0HlkoxC55qE5Li75pWI5bqU77yB77yI6L+Z5piv5Zu65a6a5pWI5bqU44CB566A5Y2V5pWI5bqU44CB5p2h5Lu25pWI5bqU77yB77yJDQp0YWJfbW9kZWwobTUsIGRpZ2l0cz0zLCBzaG93LmNpPUZBTFNFLA0KICAgICAgICAgIHNob3cuc2U9VFJVRSwgY29sbGFwc2Uuc2U9VFJVRSkNCiMjIOWvueavlOaWueW3ruWIhuaekOKAnOeugOWNleaViOW6lOKAnee7k+aenA0KRU1NRUFOUyhtLCAiQSIsIGJ5PSJCIikNCmBgYA0KDQojIyMjIOOAkOWunui3tTXjgJHlpoLkvZXorqnlm57lvZLliIbmnpDkuqTkupLkvZznlKjkuK3nmoTmlpznjoflhbfmnInigJzkuLvmlYjlupTigJ3lkKvkuYnvvJ8geyPlrp7ot7U15aaC5L2V6K6p5Zue5b2S5YiG5p6Q5Lqk5LqS5L2c55So5Lit55qE5pac546H5YW35pyJ5Li75pWI5bqU5ZCr5LmJfQ0KDQotICAg5Y+Y6YeP5Lit5b+D5YyW77yIW0NoYXAwNV0oaHR0cHM6Ly9wc3ljaGJydWNlLmdpdGh1Yi5pby9SQ291cnNlL0NoYXAwNSMlRTUlOEYlOTglRTklODclOEYlRTQlQjglQUQlRTUlQkYlODMlRTUlOEMlOTYlRTQlQjglOEUlRTYlQTAlODclRTUlODclODYlRTUlOEMlOTYpey51cml977yJ77ya5L2/5paw5Y+Y6YeP77yIQifvvInlj5Yw562J5Lu35LqO5Y6f5Y+Y6YeP77yIQu+8ieWPluWdh+WAvA0KICAgIC0gICDkuK3lv4PljJbmtojpmaTkuobigJzovrnpmYXmlYjlupTigJ3kuI7igJzmnaHku7bmlYjlupTigJ3kuYvpl7TnmoTlgY/lt64NCiAgICAgICAgLSAgIOi+uemZheaViOW6lO+8iOS4u+aViOW6lO+8iT0g5p2h5Lu25pWI5bqU77yI5Zu65a6a5pWI5bqUL+WbnuW9kuaWnOeOh++8iSsg5Lqk5LqS5pWI5bqUIMOXIOiwg+iKguWPmOmHj+Wdh+WAvA0KICAgICAgICAtICAgJFx0ZXh0e01haW4gRWZmZWN0fV9YID0gYl97WF97TWFyZ2luYWx9fSA9IGJfe1hfe0NvbmRpdGlvbmFsfX0gKyBiX3tYKk1fe0ludGVyYWN0aW9ufX0gXGJhcntNfSQNCiAgICAgICAgLSAgICRcdGV4dHtNYWluIEVmZmVjdH1fQSA9IDEuNTAgPSAwLjAwICsgMy4wMCBcdGltZXMgKDArMSkvMiQNCiAgICAgICAgLSAgICRcdGV4dHtNYWluIEVmZmVjdH1fQiA9IDQuNTAgPSAzLjAwICsgMy4wMCBcdGltZXMgKDArMSkvMiQNCg0KYGBge3J9DQojIyDkuK3lv4PljJblpITnkIYNCmRhdGEkQS5jID0gZGF0YSRBIC0gbWVhbihkYXRhJEEpICAjIOS5n+WPr+S7peebtOaOpeeUqCBncmFuZF9tZWFuX2NlbnRlcigpDQpkYXRhJEIuYyA9IGRhdGEkQiAtIG1lYW4oZGF0YSRCKSAgIyDkuZ/lj6/ku6Xnm7TmjqXnlKggZ3JhbmRfbWVhbl9jZW50ZXIoKQ0KZGF0YQ0KDQptNiA9IGxtKFkgfiBBLmMgKiBCLmMsIGRhdGEpDQphbm92YShtNikgICMg55yf5q2j55qE5Li75pWI5bqU44CB5Lqk5LqS5L2c55SoDQpzdW1tYXJ5KG02KSAgIyBB5ZKMQuS4reW/g+WMluWQju+8jOWbuuWumuaViOW6lO+8iOadoeS7tuaViOW6lO+8ieetieS7t+S6juKAnOS4u+aViOW6lOKAnQ0KIyMgQeWSjELkuK3lv4PljJblkI7vvIzlm7rlrprmlYjlupTvvIjmnaHku7bmlYjlupTvvInnrYnku7fkuo7igJzkuLvmlYjlupTigJ0NCnRhYl9tb2RlbChtNiwgZGlnaXRzPTMsIHNob3cuY2k9RkFMU0UsDQogICAgICAgICAgc2hvdy5zZT1UUlVFLCBjb2xsYXBzZS5zZT1UUlVFKQ0KYGBgDQoNCiMg5aSa5Liq5qih5Z6L5rGH5oC75LiO6KGo5qC86L6T5Ye6DQoNCiMjIyMg44CQ5a6e6Le1NuOAkeWkmuWFg+WbnuW9kuaooeWei+eahOe7k+aenOihqOi+k+WHuiB7I+Wunui3tTblpJrlhYPlm57lvZLmqKHlnovnmoTnu5PmnpzooajovpPlh7p9DQoNCuaooeWei+e7k+aenOihqOWPr+S7pei+k+WHuuWIsO+8mg0KDQotICAgUiBDb25zb2xl5o6n5Yi25Y+wDQotICAgTWljcm9zb2Z0IFdvcmTmlofmoaMNCi0gICBIVE1M6KGo5qC8DQoNCmBgYHtyfQ0KbTEgPSBsbShZIH4gMSwgZGF0YSkNCm0yID0gbG0oWSB+IEEsIGRhdGEpDQptMyA9IGxtKFkgfiBCLCBkYXRhKQ0KbTQgPSBsbShZIH4gQSArIEIsIGRhdGEpDQptNSA9IGxtKFkgfiBBICogQiwgZGF0YSkNCm02ID0gbG0oWSB+IEEuYyAqIEIuYywgZGF0YSkNCg0KbW9kZWxfc3VtbWFyeShsaXN0KG0xLCBtMiwgbTMsIG00LCBtNSwgbTYpKQ0KDQptb2RlbF9zdW1tYXJ5KGxpc3QobTEsIG0yLCBtMywgbTQsIG01LCBtNiksDQogICAgICAgICAgICAgIGRpZ2l0cz0yLA0KICAgICAgICAgICAgICBmaWxlPSJNb2RlbHMuZG9jIikNCmBgYA0KDQohW10oaW1hZ2VzL2NsaXBib2FyZC0zNDU4NTI0ODc4LnBuZykNCg0KYGBge3J9DQp0YWJfbW9kZWwobTEsIG0yLCBtMywgbTQsIG01LCBtNiwNCiAgICAgICAgICBkaWdpdHM9Miwgc3RyaW5nLmVzdD0iYiAoU0UpIiwNCiAgICAgICAgICBzaG93LmNpPUZBTFNFLCBzaG93LnNlPVRSVUUsIGNvbGxhcHNlLnNlPVRSVUUpDQpgYGANCg0KIyMjIyDjgJDlrp7ot7U344CR56m65rCU6LSo6YeP5pWw5o2u5Zue5b2S5YiG5p6Q5a6e5L6LIHsj5a6e6Le1N+epuuawlOi0qOmHj+aVsOaNruWbnuW9kuWIhuaekOWunuS+i30NCg0KYGBge3J9DQojIyDmlbDmja7lh4blpIcNCnN0cihhaXJxdWFsaXR5KQ0KQ29ycihhaXJxdWFsaXR5KQ0KDQojIyDlm57lvZLliIbmnpANCm0xID0gbG0oT3pvbmUgfiBTb2xhci5SLCBkYXRhPWFpcnF1YWxpdHkpDQptMiA9IGxtKE96b25lIH4gU29sYXIuUiArIFRlbXAsIGRhdGE9YWlycXVhbGl0eSkNCm0zID0gbG0oT3pvbmUgfiBTb2xhci5SICsgVGVtcCArIFdpbmQsIGRhdGE9YWlycXVhbGl0eSkNCm00ID0gbG0oT3pvbmUgfiBTb2xhci5SICsgVGVtcCArIFdpbmQgKyBNb250aCwgZGF0YT1haXJxdWFsaXR5KQ0KbW9kZWwgPSBsbShPem9uZSB+IC4sIGRhdGE9YWlycXVhbGl0eSkgICMgLiDooajnpLrnurPlhaXliankvZnmiYDmnInlj5jph48NCmBgYA0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCkdMTV9zdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCuaAneiAg++8mg0KDQotICAg5oiq6Led77yIKmIqID0g4oCTNjQuMTE2LCAqcCogPSAuMDA377yJ55qE5ZCr5LmJ5piv77yfDQotICAg5rCU5rip5pac546H77yIKmIqID0gMS44OTYsIM6yID0gLjU0MywgKnAqIFw8IC4wMDHvvInnmoTlkKvkuYnmmK/vvJ8NCi0gICAqdCrlgLzkuI4qYirjgIEqU0Uq55qE5YWz57O75piv77yf77yI6K+36aqM566X5LiA5LiL77yJDQoNCiQkDQp0ID0gXGZyYWN7Yn17U0V9DQokJA0KDQpgYGB7cn0NCiMjIGJydWNlUuezu+WIl+WHveaVsA0KR0xNX3N1bW1hcnkobW9kZWwpDQptb2RlbF9zdW1tYXJ5KG1vZGVsKQ0KbW9kZWxfc3VtbWFyeShtb2RlbCwgc3RkPVRSVUUpICAjIOagh+WHhuWMluWbnuW9kuezu+aVsA0KDQptb2RlbF9zdW1tYXJ5KGxpc3QobTEsIG0yLCBtMywgbTQsIG1vZGVsKSwgZmlsZT0iTW9kZWxzLmRvYyIpDQpgYGANCg0KIVvihpEgQVBB5qC85byP6KGo5qC877yM5Y+v55u05o6l5aSN5Yi25Yiw6K665paH5LitXShpbWFnZXMvY2xpcGJvYXJkLTI0NTc0ODE5NTUucG5nKQ0KDQpgYGB7cn0NCiMjIHNqUGxvdOezu+WIl+WHveaVsA0KdGFiX21vZGVsKG1vZGVsKQ0KdGFiX21vZGVsKG0xLCBtMiwgbTMsIG00LCBtb2RlbCwNCiAgICAgICAgICBkaWdpdHM9Mywgc3RyaW5nLmVzdD0iYiAoU0UpIiwNCiAgICAgICAgICBzaG93LmNpPUZBTFNFLCBzaG93LnNlPVRSVUUsIGNvbGxhcHNlLnNlPVRSVUUpDQpgYGANCg0KIyDnroDljZXmlpznjofmo4DpqozkuI7lpJrph43mr5TovoMNCg0KIyMjIyDjgJDlrp7ot7U444CR5Z+65LqOUFJPQ0VTUygp5Ye95pWw55qE6LCD6IqC5pWI5bqU5LiO566A5Y2V5pac546H5YiG5p6QIHsj5a6e6Le1OOWfuuS6jnByb2Nlc3Plh73mlbDnmoTosIPoioLmlYjlupTkuI7nroDljZXmlpznjofliIbmnpB9DQoNCi0gICBgYnJ1Y2VSYOWMhWBQUk9DRVNTKClg5Ye95pWw77ya5Lit5LuL5LiO6LCD6IqC5pWI5bqU5YiG5p6Q5aSa5Yqf6IO94oCc5LiA56uZ5byP4oCd5Ye95pWwDQogICAgLSAgIFtgUFJPQ0VTUygpYOWHveaVsOW4ruWKqeaWh+aho10oaHR0cHM6Ly9wc3ljaGJydWNlLmdpdGh1Yi5pby9icnVjZVIvcmVmZXJlbmNlL1BST0NFU1MuaHRtbCl7LnVyaX0NCiAgICAtICAgW2BQUk9DRVNTKClg5Ye95pWw6L275p2+5a6e546w5Lit5LuL5pWI5bqU5ZKM6LCD6IqC5pWI5bqU5YiG5p6QIC0g55+l5LmO5paH56ugXShodHRwczovL3podWFubGFuLnpoaWh1LmNvbS9wLzM3NjAwNzU5MSl7LnVyaX0NCi0gICDosIPoioLmlYjlupQgPSDkuqTkupLkvZznlKgNCiAgICAtICAg6LCD6IqC5pWI5bqU5pys6LSo5LiK5bCx5piv5Lqk5LqS5L2c55So77yM5Y+q5piv5piO56Gu5LqG5Lqk5LqS6aG55Lit55qE5ZOq5Liq5Y+Y6YeP5pivKirosIPoioLlj5jph4/vvIhtb2RlcmF0b3LvvIkqKg0KDQpgYGB7cn0NCiMjIOaVsOaNruWHhuWkhw0KZGF0YSA9IGFpcnF1YWxpdHkNCmRhdGEkTW9udGggPSBhcy5mYWN0b3IoZGF0YSRNb250aCkNCmRhdGEkVGVtcC5DID0gKGRhdGEkVGVtcCAtIDMyKSAvIDEuOCAgIyDmkYTmsI/luqYgPSAo5Y2O5rCP5bqmIC0gMzIpIC8gMS44DQpzdHIoZGF0YSkNCg0KIyMg5o+P6L+w57uf6K6hDQpGcmVxKGRhdGEkTW9udGgpDQpEZXNjcmliZShkYXRhKQ0KDQojIyBQUk9DRVNTKCnosIPoioLmlYjlupTliIbmnpANClBST0NFU1MoZGF0YSwgeT0iT3pvbmUiLCB4PSJTb2xhci5SIiwgbW9kcz0iTW9udGgiKQ0KDQpQUk9DRVNTKGRhdGEsIHk9Ik96b25lIiwgeD0iU29sYXIuUiIsIG1vZHM9IlRlbXAuQyIpDQoNClBST0NFU1MoZGF0YSwgeT0iT3pvbmUiLCB4PSJTb2xhci5SIiwgbW9kcz0iVGVtcC5DIiwNCiAgICAgICAgbW9kMS52YWw9YygwLCA1LCAxMCwgMTUsIDIwLCAyNSwgMzAsIDM1LCA0MCkpDQoNClBST0NFU1MoZGF0YSwgeT0iT3pvbmUiLCB4PSJTb2xhci5SIiwgbW9kcz0iVGVtcC5DIiwNCiAgICAgICAgY292cz0iTW9udGgiKSAgIyBNb250aOS9nOS4uuWNj+WPmOmHj++8iOaOp+WItuWPmOmHj++8iQ0KDQpQID0gUFJPQ0VTUyhkYXRhLCB5PSJPem9uZSIsIHg9IlNvbGFyLlIiLCBtb2RzPSJUZW1wLkMiLA0KICAgICAgICAgICAgY292cz1jKCJNb250aCIsICJEYXkiLCAiV2luZCIpKSAgIyDmjqfliLblhbbku5bmiYDmnInlj5jph48NClAkcmVzdWx0c1tbMV1dJGpuW1sxXV0kcGxvdA0KYGBgDQoNCiMg5qih5Z6L6K+K5patDQoNCiMjIyMg44CQ55+l6K+G54K544CR5Zue5b2S5qih5Z6L55qE5Z+65pys5YGH5a6aIHsj55+l6K+G54K55Zue5b2S5qih5Z6L55qE5Z+65pys5YGH5a6afQ0KDQrlm57lvZLmqKHlnovnmoTln7rmnKzlgYflrprvvIhiYXNpYyBhc3N1bXB0aW9uc++8iQ0KDQotICAg57q/5oCn5YWz57O777yIbGluZWFyaXR577yJDQotICAg5q6L5beu54us56uL77yIaW5kZXBlbmRlbmNl77yJDQotICAg5q6L5beu5q2j5oCB5YiG5biD77yIbm9ybWFsaXR577yJDQotICAg5q6L5beu5pa55beu6b2Q5oCn77yIaG9tb3NjZWRhc3RpY2l0ee+8iQ0KLSAgIOS4jeWtmOWcqOWkmumHjeWFsee6v+aAp++8iG5vIG11bHRpY29sbGluZWFyaXR577yJDQoNCiFbXShpbWFnZXMvY2xpcGJvYXJkLTEzMzM0NDM0NzcucG5nKQ0KDQohW10oaW1hZ2VzL2NsaXBib2FyZC0zMDA1NzkyNzA0LnBuZykNCg0KIyMjIyDjgJDlrp7ot7U544CR5qOA5p+l5Zue5b2S5qih5Z6L5piv5ZCm5ruh6Laz5Z+65pys5YGH5a6aIHsj5a6e6Le1OeajgOafpeWbnuW9kuaooeWei+aYr+WQpua7oei2s+WfuuacrOWBh+Wumn0NCg0KLSAgIOS9v+eUqGBwZXJmb3JtYW5jZWDljIXnmoRgY2hlY2tfKigpYOezu+WIl+WHveaVsO+8iGBicnVjZVJg5YyF5bey5Yqg6L29YHBlcmZvcm1hbmNlYOWMhe+8iQ0KDQpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9MTJ9DQptb2RlbCA9IGxtKE96b25lIH4gLiwgZGF0YT1haXJxdWFsaXR5KQ0KDQpjaGVja19tb2RlbChtb2RlbCkgICMg5LiA5qyh5oCn5qOA5p+l5omA5pyJ5YGH5a6aDQoNCmNoZWNrX291dGxpZXJzKG1vZGVsKSAgIyDmnoHnq6/lgLzpl67popgNCmNoZWNrX25vcm1hbGl0eShtb2RlbCkgICMg6Z2e5q2j5oCB6Zeu6aKYDQpjaGVja19oZXRlcm9zY2VkYXN0aWNpdHkobW9kZWwpICAjIOW8guaWueW3rumXrumimA0KY2hlY2tfYXV0b2NvcnJlbGF0aW9uKG1vZGVsKSAgIyDoh6rnm7jlhbPpl67popgNCmNoZWNrX2NvbGxpbmVhcml0eShtb2RlbCkgICMg5YWx57q/5oCn6Zeu6aKYDQpgYGANCg0KIyBcKiDmi5PlsZXvvJrlhbbku5blm57lvZLmqKHlnosNCg0KIyMjIyDjgJDmjqLntKLlj5HnjrDjgJHlkITnsbvlm57lvZLmqKHlnovkvb/nlKjnmoRS5Ye95pWwIHsj5o6i57Si5Y+R546w5ZCE57G75Zue5b2S5qih5Z6L5L2/55So55qEcuWHveaVsH0NCg0KLSAgICoq5LiA6Iis57q/5oCn5qih5Z6LKioNCiAgICAtICAgYGxtKClg5Ye95pWw77yaT0xT5Zue5b2S77yI6L+e57ut5Zug5Y+Y6YeP77yJDQotICAgKirlub/kuYnnur/mgKfmqKHlnosqKg0KICAgIC0gICBgZ2xtKClg5Ye95pWwDQogICAgICAgIC0gICBMb2dpc3RpY+WbnuW9ku+8iOS6jOWIhuexu+WboOWPmOmHj++8ie+8mmBnbG0oLi4uLCBkYXRhLCBmYW1pbHk9Ymlub21pYWwpYA0KICAgICAgICAtICAgUG9pc3NvbuWbnuW9ku+8iOiuoeaVsOWboOWPmOmHj++8ie+8mmBnbG0oLi4uLCBkYXRhLCBmYW1pbHk9cG9pc3NvbilgDQoNCiFbXShpbWFnZXMvY2xpcGJvYXJkLTk5NDQwODQyMy5wbmcpDQoNCiFbXShpbWFnZXMvY2xpcGJvYXJkLTI0Mjk1NzM5MDgucG5nKQ0KDQotICAgKirlpJrliIbnsbvlm6Dlj5jph4/lm57lvZLmqKHlnosqKg0KICAgIC0gICBgbm5ldDo6bXVsdGlub20oKWDlh73mlbDvvJpNdWx0aW5vbWlhbCBMb2ctTGluZWFy5Zue5b2S77yI5aSa5YiG57G75Zug5Y+Y6YeP77yJDQotICAgKirnur/mgKfmt7flkIjmqKHlnovvvIjlpJrmsLTlubPmqKHlnovvvIkqKg0KICAgIC0gICBgbmxtZTo6bG1lKClg5Ye95pWwDQogICAgLSAgIGBsbWU0OjpsbWVyKClg44CBYGxtZXJUZXN0OjpsbWVyKClg5Ye95pWwDQotICAgKirlub/kuYnnur/mgKfmt7flkIjmqKHlnosqKg0KICAgIC0gICBgbmxtZTo6bmxtZSgpYOWHveaVsA0KICAgIC0gICBgbG1lNDo6Z2xtZXIoKWDlh73mlbANCg0K77yI5aSa5rC05bmz5qih5Z6LL+e6v+aAp+a3t+WQiOaooeWei+eahOWOn+eQhuS4juaWueazle+8jOWwhuWcqOeglOeptueUn+mYtuauteezu+e7n+WtpuS5oO+8iQ0KDQojIOOAkOmYtuauteS9nOS4muKRoeOAkee7n+iuoeWIhuaekOe7vOWQiA0KDQrkvZzkuJropoHmsYLvvJoNCg0KLSAgIOWfuuS6juacn+acq+iHqumAieaVsOaNruWSjOaJgOacieS7o+eggeenr+e0r++8jOe7vOWQiOi/kOeUqOesrDfnq6DvvIjln7rnoYDnu5/orqHvvInjgIHnrKw456ug77yI5pa55beu5YiG5p6Q77yJ44CB56ysOeeroO+8iOWbnuW9kuWIhuaekO+8ieaJgOWtpueahOe7n+iuoeaWueazleWSjOS7o+egge+8jOiHqueUseWIhuaekOS9oOeahOacn+acq+iHqumAieaVsOaNru+8jOS9k+eOsOWvuVLor63oqIDnu5/orqHliIbmnpDku6PnoIHnmoTmjozmj6Hlkozov4Hnp7vlupTnlKjvvIg3LzgvOeavj+eroOiHs+WwkeacieS4gOenjeaWueazleS9k+eOsOWcqOS9nOS4muS4re+8iQ0KLSAgIOS9v+eUqFIgTWFya2Rvd27lrozmiJDvvIzlr7nlhbPplK7ku6PnoIHlj4rnu5PmnpzopoHmnInms6jph4ror7TmmI4NCg0K5bmz5Y+w5o+Q5Lqk77yaDQoNCi0gICDov5DooYzlvpfliLDnmoRIVE1M572R6aG1DQogICAgLSAgIOaPkOS6pOaWh+S7tuWRveWQjeagvOW8j++8mmDlrablj7ct5aeT5ZCNLVLpmLbmrrXkvZzkuJoyLmh0bWxgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KdW5saW5rKCJNb2RlbHMuZG9jIikNCmBgYA0K