2017-07-21 32 views
0

我想比較兩個嵌套線性模型,稱它們爲m01和m02,其中m01是簡化模型,m02是完整模型。我想做一個簡單的F-測試,看看這個完整的模型是否會在縮減的模型上增加顯着的效用。如何做一個F檢驗來比較Python中的嵌套線性模型?

這是非常簡單的在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) 

給我下面的輸出:

enter image description here

告訴我,加入上午:重量交互項顯著改進模型。有沒有辦法在Python/sklearn/statsmodels中做類似的事情?

編輯:我看着this question發佈此一前想不通他們怎麼都是一樣的。另一個問題是對兩個向量進行F檢驗。這個問題是關於比較2個嵌套線性模型。

我覺得這是我需要的:

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

但我不知道究竟通過這個功能。如果任何人可以提供或指出一個例子,那將是非常有用的。

+1

您可以嘗試sklearn.model_selection http://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection 從sklearn.feature_selection進口f_regression –

+1

重複的標誌是不正確。正如編輯中提到的,這是兩種不同的f檢驗。 – user333700

+1

爲答案,請參閱statsmodels anova_lm http://www.statsmodels.org/dev/anova。html來比較嵌套模型,OLS結果還有三個compare_xxx_test方法用於直接測試嵌套限制與無限制模型。 http://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.OLSResults.html – user333700

回答

0

適應傑里米的答案以下面的方式讓我得到我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筆記本下面的結果:

enter image description here

我也得到了這些非常奇怪的錯誤:

enter image description here

任何人都知道什麼是產生這些錯誤的線索?

+1

這會更好,作爲一個新問題。簡要回答:您可以忽略這些警告。 F值是和應該是南,但最近numpy和scipy已經開始發佈警告在分佈nans。 – user333700

1

我發現這個book有幫助(「一個與蟒蛇統計概論」 /托馬斯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) 

看看上面的打印結果的書鏈接。

注意:anova_lm有時與參數'typ'一起使用,請嘗試使用不同的可能值來查看哪些適合您。

+0

+1供參考。這是一種不同的方差分析,但是我可以對這個例子做一些小的調整以得到相同的結果。 –