2 回答

TA貢獻1801條經驗 獲得超8個贊
在 anova 中,您基本上計算 RSS 的差異。您可以在 statsmodels 中的方差分析小插圖下查看更多內容:
import pandas as pd
import seaborn as sns
import numpy as np
iris = sns.load_dataset('iris')
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
iris.head()
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 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)
df_resid ssr df_diff ss_diff F Pr(>F)
0 148.0 24.525034 0.0 NaN NaN NaN
1 147.0 23.880694 1.0 0.64434 3.9663 0.048272
它會發出一些警告(您可以在我上面鏈接的網站上看到它)因為對于第一行它無法計算 F 等。
請注意,這與其他答案中建議的計算 Rsquare 不同。需要注意的一個重要問題是,如果您包含更多項,理論上您的 R 平方會增加,并且您想查看這些項是否顯著解釋了額外的方差,這就是您使用方差分析的原因。

TA貢獻1871條經驗 獲得超8個贊
我不知道有哪個函數可以像 R 中的示例那樣直接比較兩個模型,但是Scikit-Learn包是數據科學和機器學習中非常常用的 Python 包。它支持與回歸模型相關的各種指標,允許您創建自己的比較。
例如,它支持 R 2度量。以下示例來自 Scikit關于 R 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,
... 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 獲得的類似的比較。
添加回答
舉報