r - 带因子的 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 日创建
解决方案
这不是“正交对比”,而是“完全没有对比”。
关于不正确的 R 平方:summary.lm
无论模型中是否存在显式截距,都以不同的方式计算此数量。在这种情况下,您可能需要手动计算 R 平方:cor(Sepal.Length, fitted(reg2))^2
. 看到这个评论。
推荐阅读
- python - 将数据框保存到excel后,我无法打开excel文件
- react-native - 无论起点如何,都将所有图标对齐页面右侧 React Native
- r - 如何将CSV中的二进制矩阵用于r中的先验算法
- python - 转换为十进制日期和月份时,日期格式字符串无效
- python - 在多个 python 线程上运行 powershell
- android - 更新应用程序后 SQlite“没有这样的表”
- json - Angular 7检查JSON解析是否返回特定对象的正确方法
- php - mysqli_multi_query 是否与多次调用 mysqli_query 相同?
- python - Django Rest Framework 使用子序列化器在父序列化器中创建子对象
- vb.net - 有没有更好的方法在表单中显示 Excel 电子表格?