R因子的回归:得到水平的系数,而不是与拦截的差异?

问题描述 投票:0回答:1

假设我想用lm()估计y超过k组的平均值,其中组由一个因子定义。

如果我只运行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创建于2019-05-01(v0.2.1)

r statistics regression linear-regression lm
1个回答
3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.