【发布时间】:2018-07-15 06:04:50
【问题描述】:
假设我有 2 个(分类)变量和一个连续变量:
library(tidyverse)
set.seed(123)
ds <- data.frame(
depression=rnorm(90,10,2),
schooling_dummy=c(0,1,2),
sex_dummy=c(0,1)
)
当我回归对性的抑郁(0或1)时,截距为10.0436,sex = 0的平均值是多少。好的!
ds %>% group_by(sex_dummy) %>%
+ summarise(formatC(mean(depression),format="f", digits=4))
# A tibble: 2 x 2
sex_dummy `formatC(mean(depression), format = "f", digits = 4)`
<dbl> <chr>
1 0 10.0436
2 1.00 10.1640
当我回归对学校教育的抑郁时,也会发生同样的事情。截距值为10.4398。学校教育的平均值 = 0 是一样的。
ds %>% group_by(schooling_dummy) %>%
+ summarise(formatC(mean(depression),format="f", digits=4))
# A tibble: 3 x 2
schooling_dummy `formatC(mean(depression), format = "f", digits = 4)`
<dbl> <chr>
1 0 10.4398
2 1.00 9.7122
3 2.00 10.1593
现在,当我计算一个包含两个变量的模型时,为什么当两个组 = 0 时截距不是均值?回归**截距为 10.3796,但当性别 = 0,学校教育 = 0 时的平均值为 10.32548:
ds %>% group_by(schooling_dummy,sex_dummy) %>%
+ summarise(formatC(mean(depression),format="f", digits=5))
# A tibble: 6 x 3
# Groups: schooling_dummy [?]
schooling_dummy sex_dummy `formatC(mean(depression), format = "f", digits = 5)`
<dbl> <dbl> <chr>
1 0 0 10.32548
2 0 1.00 10.55404
3 1.00 0 9.59305
4 1.00 1.00 9.83139
5 2.00 0 10.21218
6 2.00 1.00 10.10648
当我预测模型都为0时:
predict(mod3, data.frame(sex_dummy=0, schooling_dummy=0))
1
10.37956
这个结果与抑郁症有关(当然......)但仍然不是我所期待的,因为: (参考:https://www.theanalysisfactor.com/interpret-the-intercept/)
这个previous forum post有什么相同之处 我知道我的变量是分类的,我正在调整我的脚本,因为您可以使用下面的代码重现: 谢谢
library(tidyverse)
set.seed(123)
ds <- data.frame(
depression=rnorm(90,10,2),
schooling_dummy=c(0,1,2),
sex_dummy=c(0,1)
)
mod <- lm(data=ds, depression ~ relevel(factor(sex_dummy), ref = "0"))
summary(mod)
ds %>% group_by(sex_dummy) %>%
summarise(formatC(mean(depression),format="f", digits=4))
mod2 <- lm(data=ds, depression ~ relevel(factor(schooling_dummy), ref = "0"))
summary(mod2)
ds %>% group_by(schooling_dummy) %>%
summarise(formatC(mean(depression),format="f", digits=4))
mod3 <- lm(data=ds, depression ~ relevel(factor(sex_dummy), ref = "0") +
relevel(factor(schooling_dummy), ref = "0"))
summary(mod3)
ds %>% group_by(schooling_dummy,sex_dummy) %>%
summarise(formatC(mean(depression),format="f", digits=5))
predict(mod3, data.frame(sex_dummy=0, schooling_dummy=0))
【问题讨论】:
标签: r regression lm tidyverse intercept