我想比较两个嵌套线性模型,将它们称为 m01 和 m02,其中 m01 是简化模型,m02 是完整模型。我想做一个简单的 F 检验,看看完整模型是否比简化模型增加了显着的效用。
这在 R 中非常简单。例如:
mtcars <- read.csv("https://raw.githubusercontent.com/focods/WonderfulML/master/data/mtcars.csv")
m01 <- lm(mpg ~ am + wt, mtcars)
m02 <- lm(mpg ~ am + am:wt, mtcars)
anova(m01, m02)
给我以下输出:
这告诉我添加am: wt交互项显着改善了模型。有没有办法在 Python/sklearn/statsmodels 中做类似的事情?
Edit:我在看这个问题 https://stackoverflow.com/questions/45243802/how-do-i-do-an-f-test-to-compare-nested-linear-models-in-python在发布这个之前,无法弄清楚它们是如何相同的。另一个问题是对两个向量进行 F 检验。这个问题是关于比较 2 个嵌套线性模型。
我想这就是我需要的:
http://scikit-learn.org/stable/modules/ generated/sklearn.feature_selection.f_regression.html#sklearn.feature_selection.f_regression http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.f_regression.html#sklearn.feature_selection.f_regression
但我不确定到底要传递什么函数。如果有人可以提供或指出一个例子,那将非常有帮助。
通过以下方式调整 Jeremy 的答案使我能够得到与在 R 中获得的相同结果:
import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
cars_df = pd.read_csv("https://raw.githubusercontent.com/focods/WonderfulML/master/data/mtcars.csv")
m01 = ols('mpg ~ am + wt', data=cars_df).fit()
m02 = ols('mpg ~ am + wt + am:wt', data=cars_df).fit()
anovaResults = anova_lm(m01, m02)
print(anovaResults)
这在我的 jupyter 笔记本中给出了以下结果:
我还遇到了这些相当神秘的错误:
任何人都知道是什么产生了这些错误?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)