按组回归[重复]

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是什么? lmlist 是列类型吗?如果是这样,这些是该代码所期望的类型,因此您需要更清楚地解释您正在获得什么以及您正在寻找什么。 【参考方案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

【讨论】:

以上是关于按组回归[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas 数据框中按组回归并添加带有预测值和 beta/t-stats 的列

python pandas中的分组回归

R中的约束线性回归系数[重复]

R中的子集回归[重复]

逻辑回归结果总结[重复]

回归测试?