按组回归[重复]
Posted
技术标签:
【中文标题】按组回归[重复]【英文标题】:Regression by Groups [duplicate] 【发布时间】:2018-12-04 15:19:17 【问题描述】:我有一张桌子:
CityData ->
City Price Bathrooms Bedrooms Porch
Milwaukee 2300 2 3 yes
Chicago 3400 3 2 yes
Springfield 2300 1 1 no
Chicago 2390 2 1 yes
我想对每个城市(每个城市多行)进行回归,以提供每个城市的系数。我想对其他混杂变量(浴室、卧室、门廊)的价格进行回归。
我尝试了 dplyr 库:
library(dplyr)
fitted_models = CityData %>%
group_by(CityData$City) %>%
do(model = lm(CityData$Price ~ CityData$Bathrooms +
CityData$Porch + CityData$Bedrooms, data = CityData))
但输出只是
14 lm list
14 lm list
14 lm list
有什么建议吗?
【问题讨论】:
您想要每个城市的不同截距,还是每个城市的卧室、浴室等的不同系数集?此外,为了使您的示例可重现,您将必须提供足够的数据来运行回归(比预测变量更多的行)。 我想为 Porch 变量设置一个不同的系数。 从lm(Price ~ City + Bathrooms + Porch + Bedrooms, CityData)
开始,然后根据需要从那里变得更复杂。另外,不要在公式或 dplyr/tidy eval 函数中使用 $
子集——只使用裸变量名。
我不明白这个输出是什么。 14是什么? lm
和 list
是列类型吗?如果是这样,这些是该代码所期望的类型,因此您需要更清楚地解释您正在获得什么以及您正在寻找什么。
【参考方案1】:
你可以试试这样的。这里我以 mtcars 数据为例。
df <- mtcars
models <- df %>% group_by(cyl) %>% summarise(mod = list(lm(mpg ~ wt)))
这将为您提供一个新的变量 mod,其中包含您模型的所有信息。您可以将系数称为:
models$mod[[1]]$coefficients
(Intercept) wt
39.571196 -5.647025
您也可以使用它变得更复杂。
models <- df %>% group_by(cyl) %>% summarise(mod = list(lm(mpg ~ wt + hp)))
models$mod[[1]]$coefficients
(Intercept) wt hp
45.83607319 -5.11506233 -0.09052672
当然models
也会保留群组的信息
models$cyl
[1] 4 6 8
【讨论】:
以上是关于按组回归[重复]的主要内容,如果未能解决你的问题,请参考以下文章