如何比较python中的层次回归模型?

我拟合了两个回归模型,一个只有 1 个预测变量,另一个有 3 个预测变量。现在我想比较这两个模型。我怎样才能做到这一点?我知道如何在 R 中执行但不确定如何在 python 中执行。这是 R 中用于比较两个模型的代码 -


anova(albumSales.2, albumSales.3)

结果 -


Model 1: sales ~ adverts

Model 2: sales ~ adverts + airplay + attract

  Res.Df    RSS Df Sum of Sq      F    Pr(>F)    

1    198 862264                                  

2    196 434575  2    427690 96.447 < 2.2e-16 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

基于以上结果,我们可以看到,与 albumSales.2 相比,albumSales.3 显着提高了模型对数据的拟合度,F(2, 196) = 96.44,p < .001。


我怎样才能在 python 中做到这一点?


白衣非少年
浏览 151回答 2
2回答

蝴蝶刀刀

在 anova 中,您基本上计算 RSS 的差异。您可以在 statsmodels 中的方差分析小插图下查看更多内容:import pandas as pdimport seaborn as snsimport numpy as npiris = sns.load_dataset('iris')from statsmodels.formula.api import olsfrom statsmodels.stats.anova import anova_lmiris.head()&nbsp; &nbsp; sepal_length&nbsp; &nbsp; sepal_width petal_length&nbsp; &nbsp; petal_width species0&nbsp; &nbsp;5.1 3.5 1.4 0.2 setosa1&nbsp; &nbsp;4.9 3.0 1.4 0.2 setosa2&nbsp; &nbsp;4.7 3.2 1.3 0.2 setosa3&nbsp; &nbsp;4.6 3.1 1.5 0.2 setosa4&nbsp; &nbsp;5.0 3.6 1.4 0.2 setosa我们运行两个模型并进行方差分析:full_lm = ols("sepal_length ~ petal_length+petal_width", data=iris).fit()reduced_lm = ols("sepal_length ~ petal_length", data=iris).fit()anova_lm(reduced_lm,full_lm)&nbsp; &nbsp; df_resid&nbsp; &nbsp; ssr df_diff ss_diff F&nbsp; &nbsp;Pr(>F)0&nbsp; &nbsp;148.0&nbsp; &nbsp;24.525034&nbsp; &nbsp;0.0 NaN NaN NaN1&nbsp; &nbsp;147.0&nbsp; &nbsp;23.880694&nbsp; &nbsp;1.0 0.64434 3.9663&nbsp; 0.048272它会发出一些警告(您可以在我上面链接的网站上看到它)因为对于第一行它无法计算 F 等。请注意,这与其他答案中建议的计算 Rsquare 不同。需要注意的一个重要问题是,如果您包含更多项,理论上您的 R 平方会增加,并且您想查看这些项是否显着解释了额外的方差,这就是您使用方差分析的原因。

ITMISS

我不知道有哪个函数可以像 R 中的示例那样直接比较两个模型,但是Scikit-Learn包是数据科学和机器学习中非常常用的 Python 包。它支持与回归模型相关的各种指标,允许您创建自己的比较。例如,它支持 R&nbsp;2度量。以下示例来自 Scikit关于 R&nbsp;2的文档:>>> from sklearn.metrics import r2_score>>> y_true = [3, -0.5, 2, 7]>>> y_pred = [2.5, 0.0, 2, 8]>>> r2_score(y_true, y_pred)0.948...>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]>>> y_pred = [[0, 2], [-1, 2], [8, -5]]>>> r2_score(y_true, y_pred,...&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; multioutput='variance_weighted')0.938...>>> y_true = [1, 2, 3]>>> y_pred = [1, 2, 3]>>> r2_score(y_true, y_pred)1.0>>> y_true = [1, 2, 3]>>> y_pred = [2, 2, 2]>>> r2_score(y_true, y_pred)0.0>>> y_true = [1, 2, 3]>>> y_pred = [3, 2, 1]>>> r2_score(y_true, y_pred)-3.0通过对您的两个模型执行此操作,您可以获得与从 R 获得的类似的比较。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python