如何进行 F 检验以比较 Python 中的嵌套线性模型?

How do I do an F-test to compare nested linear models in Python?

我想比较两个嵌套线性模型,称它们为 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 中做类似的事情?

编辑: 我在发布这篇文章之前查看了 ,但无法弄清楚它们有何相同之处。另一个问题是对两个向量进行 F 检验。这个问题是关于比较 2 个嵌套线性模型。

我想这就是我需要的:

http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.f_regression.html#sklearn.feature_selection.f_regression

但我不确定传递此函数的确切内容。如果有人可以提供或指出示例,那将非常有帮助。

我发现这个 book 很有帮助("An introduction to statistics with python" / Thomas Haslwanter)

这里是相关的代码示例:

import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

df = pd.DataFrame(data, columns=['value', 'treatment'])
model = ols('value ~ C(treatment)', data=df).fit()
anovaResults = anova_lm(model)
print(anovaResults)

打印结果看上面的书link

注意:anova_lm有时与参数'typ'一起使用,请尝试不同的可能值,看看哪个适合您。

以下列方式调整 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 notebook 中给出了以下结果:

我也遇到了这些相当神秘的错误:

有人知道是什么导致了这些错误吗?