说我想用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创建
答案 0 :(得分:3)
这不是“正交对比”,而是“完全没有对比”。
关于不正确的R平方:summary.lm
以不同的方式计算此数量,无论模型中是否明确存在截距。在这种情况下,您可能需要手动计算R平方:cor(Sepal.Length, fitted(reg2))^2
。参见this comment。