【发布时间】:2017-05-07 21:42:44
【问题描述】:
我正在阅读有关公式和线性回归的信息,但我无法理解如何解释 lm 的输出以用于具有多个参数和分类变量的线性回归。
我想我了解如何解释简单 y = 的输出 a + bx 公式(如果我在下面说的有误,请纠正我)。
#library(tidyverse)
#library(modelr)
require(ggplot2)
require(dplyr)
diamonds2 <- diamonds %>%
mutate(lprice = log2(price), lcarat = log2(carat))
mod <- lm(
lprice ~ lcarat,
data = diamonds2
)
#diamonds2 %>% modelr::add_predictions(mod, "pred_price")
diamonds2$pred_price <- predict(mod, diamonds2) # if you don't have modelr
型号(mod)是
Call:
lm(formula = lprice ~ lcarat, data = diamonds2)
Coefficients:
(Intercept) lcarat
12.189 1.676
据我了解,这意味着当我添加预测时,我生成预测的公式是
pred_price = 12.189 + (1.676 * lcarat)
当我将分类变量添加到我的公式时,我感到困惑
diamonds2 <- diamonds %>%
mutate(lprice = log2(price), lcarat = log2(carat))
mod <- lm(
lprice ~ lcarat + cut, # I added a categorical variable here
data = diamonds2
)
diamonds2 %>%
add_predictions(mod, "pred_price")
现在模型是
Call:
lm(formula = lprice ~ lcarat + cut, data = diamonds2)
Coefficients:
(Intercept) lcarat cut.L cut.Q cut.C cut^4
12.10711 1.69577 0.32364 -0.09583 0.07631 0.02688
我对一些事情感到困惑。
1) diamonds$cut 有五个可能的值(一般、良好、非常好、优质、理想),那么为什么模型只显示四个切割值?
2) 据我了解,R 在线性回归方程中将分类变量视为 1 或 0,因此在评估数据行时,每个“切割”系数将乘以 1 或 0。对吗?
3) 我如何根据上面给出的系数写出y = a_0 + (a_1 * x_1) + (a_2 * x_2)...?在这种情况下可能吗?
【问题讨论】:
-
统计问题在CrossValidated 上更热门
-
你不需要modelr,那行应该是
diamonds2$pred_price <- predict(mod, diamonds2) -
啊,这是根本原因:如果您输入
options(contrasts),您将看到分类对比的默认行为是unordered:"contr.treatment" ordered:"contr.poly" -
我完全同意。 R 功能强大时经常令人抓狂,而且很少的错误消息无济于事(或主动误导)。我会先用
diamonds$cut.ordered <- diamonds$cut保存旧的有序分类值。我希望技术上正确的答案是将options(contrasts)修改为ordered也为contr.treatment -
一些您可能喜欢的进一步阅读:Setting and Keeping Contrasts。底线是您可以将
options('contrasts')设置为您想要的两个对比函数名称的任何字符串列表。 (你甚至可以写一个自定义的对比函数,比如说你想控制contr.treatment中基线水平的选择)
标签: r regression linear-regression lm categorical-data