我有一个关于glmer模型解释的问题:
我拟合了一个有3个预测因子的模型:PA、PB和PC。PA和PB有两个级别,PC(动词的位置(有3个级别(动词位置1、动词位置2、动词位置3(。
预测因子在R:中使用cont.sum编码为和对比度
constrasts(data$PA) = contr.sum(levels(data$PA)
constrasts(data$PB) = contr.sum(levels(data$PB)
constrasts(data$PC) = contr.sum(levels(data$PC)
当我运行该模型时,结果显示了各种显著的主要影响和相互作用,也与PC有关。但我不明白如何解释PC的水平:PC1和PC2。
我用contr.sum(levels(data$PC)
检查了PC的级别,得到了以下矩阵:1:1 0-1;2:0 1-1
但告诉了什么?据我所知,PC1包含向量1,0,-1,PC2包含向量0,1,-1。似乎3级是参考——这是正确的吗?如果是这种情况,我如何解释PC1和PC2的主要影响?它们如何指代措辞1、2或3?
非常感谢您的帮助。
这里有一个mtcars
数据的示例。
library(dplyr)
data(mtcars)
mtcars$cyl <- as.factor(mtcars$cyl)
contrasts(mtcars$cyl) <- contr.sum(n=c("4", "6", "8"))
contrasts(mtcars$cyl)
#> [,1] [,2]
#> 4 1 0
#> 6 0 1
#> 8 -1 -1
对比度声明所说的是,第一个回归因子cyl1
的系数是cyl = 4
的系数,第二个回归因子是cyl = 6
的系数,cyl = 8
由其他两类的负面影响之和表示。这里的参考不是任何一个类别,而是所有群均值:下面是所有群均值,然后是群均值。
mtcars %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg))
#> # A tibble: 3 × 2
#> cyl mpg
#> <fct> <dbl>
#> 1 4 26.7
#> 2 6 19.7
#> 3 8 15.1
mtcars %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg)) %>%
select(mpg) %>%
pull %>%
mean
#> [1] 20.50216
在模型摘要中,您可以看到组截距是平均值的平均值。根据上述输出,CCD_ 8的CCD_ 7的平均值为26.7。将cyl1
系数与截距相加得到:20.5+6.2=26.7
。CCD_ 11组的平均值为19.7。我们可以通过在截距20.5 - .8 = 19.7
上加上cyl2
系数来得到这一点。最后,CCD_ 15组的CCD_ 14的平均值为15.1。我们通过以下方式获得:CCD_ 16。因此,我们解释以下系数的方式是,四缸车每加仑的预期里程数比所有平均值的平均值高出约6英里。六缸车预计每加仑行驶里程比所有平均值低0.8英里左右。最后,八缸车预计每加仑行驶里程约为-6.2+0.8英里,比所有组平均值低5.4英里。
mod2 <- lm(mpg ~ cyl, data=mtcars)
summary(mod2)
#>
#> Call:
#> lm(formula = mpg ~ cyl, data = mtcars)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -5.2636 -1.8357 0.0286 1.3893 7.2364
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 20.5022 0.5935 34.543 < 2e-16 ***
#> cyl1 6.1615 0.8167 7.544 2.57e-08 ***
#> cyl2 -0.7593 0.9203 -0.825 0.416
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 3.223 on 29 degrees of freedom
#> Multiple R-squared: 0.7325, Adjusted R-squared: 0.714
#> F-statistic: 39.7 on 2 and 29 DF, p-value: 4.979e-09
创建于2022-11-02由reprex包(v2.0.1(
测试省略组的效果
由于我们知道被省略的组的系数是-cyl1 + -cyl2 = -cyl1 - cyl2
,我们可以使用car
包中的linearHypothesis()
函数来测试这是否与平均值显著不同:
car::linearHypothesis(mod2, "-cyl1 - cyl2")
#> Linear hypothesis test
#>
#> Hypothesis:
#> - cyl1 - cyl2 = 0
#>
#> Model 1: restricted model
#> Model 2: mpg ~ cyl
#>
#> Res.Df RSS Df Sum of Sq F Pr(>F)
#> 1 30 806.86
#> 2 29 301.26 1 505.6 48.67 1.139e-07 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
在这里,我们看到它是。