亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何比較python中的層次回歸模型?

如何比較python中的層次回歸模型?

白衣非少年 2023-02-22 19:04:58
我擬合了兩個回歸模型,一個只有 1 個預測變量,另一個有 3 個預測變量?,F在我想比較這兩個模型。我怎樣才能做到這一點?我知道如何在 R 中執行但不確定如何在 python 中執行。這是 R 中用于比較兩個模型的代碼 -anova(albumSales.2, albumSales.3)結果 -Model 1: sales ~ advertsModel 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 中做到這一點?
查看完整描述

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 平方會增加,并且您想查看這些項是否顯著解釋了額外的方差,這就是您使用方差分析的原因。


查看完整回答
反對 回復 2023-02-22
?
ITMISS

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 獲得的類似的比較。


查看完整回答
反對 回復 2023-02-22
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號