首页 > 解决方案 > 带因子的 R 回归:获取级别的系数,而不是与 Intercept 的差异?

问题描述

假设我想用超过 k 个组lm()的方法进行估计y,其中组由一个因子定义。

如果我只是运行lm(y ~ factor),这会给我一个截距,以及 k-1 因子的系数,但表示为与截距的差异。相反,我希望获得手段的直接价值。

contrast有没有办法用in干净地做到这一点lm()?我不确定这种对比如何被称为......正交?我显然可以删除截距:lm(y ~ -1+ factor)但这会给我错误的 R2 值

reg1 <- lm(Sepal.Length~ Species, data=  iris)
reg2 <- lm(Sepal.Length~ -1 + Species, data=  iris)

## get coefs
coef(reg1) # not what I want
#>       (Intercept) Speciesversicolor  Speciesvirginica 
#>             5.006             0.930             1.582
coef(reg2) # whay I want
#>     Speciessetosa Speciesversicolor  Speciesvirginica 
#>             5.006             5.936             6.588

## THe models are equivalent:
all.equal(fitted(reg1), fitted(reg2))
#> [1] TRUE


# but the -1 trick will create problems for some stats, such as R2
summary(reg1)$r.squared
#> [1] 0.6187057
summary(reg2)$r.squared
#> [1] 0.9925426

reprex 包(v0.2.1)于 2019 年 5 月 1 日创建

标签: rstatisticsregressionlinear-regressionlm

解决方案


这不是“正交对比”,而是“完全没有对比”。

关于不正确的 R 平方:summary.lm无论模型中是否存在显式截距,都以不同的方式计算此数量。在这种情况下,您可能需要手动计算 R 平方:cor(Sepal.Length, fitted(reg2))^2. 看到这个评论


推荐阅读