具有因子的R回归:获得级别的系数,而不是与截距的差异?

时间:2019-05-01 17:17:00

标签: r statistics regression linear-regression lm

说我想用lm()估算k个组上y的均值,其中组由一个因子定义。

如果我只运行lm(y ~ factor),这将给我一个截距,以及k-1个因子的系数,但表示为与截距的差。我想直接拥有这些手段的价值。

是否有一种方法可以对contrast中的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 package(v0.2.1)于2019-05-01创建

1 个答案:

答案 0 :(得分:3)

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

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