使用anova_lm()和f_oneway()的单向方差分析的不同p值

时间:2018-07-13 13:52:48

标签: python scipy statistics statsmodels

使用statsmodels.stats.anova_lm()scipy.stats.f_oneway()时获得的不同p值

import statsmodels.api as sm
from statsmodels.formula.api import ols
import numpy as np, scipy.stats as st, scipy.spatial as sp

xx = [1.0, 1.0, 0.0, 0.5, 0.75, 0.5, 0.5, 0.25, 1.0, 0.5, 1.0, 1.0,
    1.0, 1.0, 0.5, 1.0, 1.0, 1.0, 0.75, 1.0, 1.0, 1.0, 0.6, 1.0, 1.0, 1.0, 0.5, 1.0, 0.75, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.6666666666666666, 0.4, 1.0, 1.0, 0.6666666666666666, 0.75, 1.0, 0.5, 1.0, 0.0, 0.5, 0.8, 1.0, 0.3333333333333333, 1.0, 1.0, 0.5, 1.0, 0.6, 0.8, 0.6666666666666666, 0.8, 0.8, 0.6666666666666666, 1.0, 1.0, 0.25, 0.5, 0.3333333333333333, 0.75, 0.75, 0.2, 0.3333333333333333, 0.8, 1.0, 0.6666666666666666, 1.0, 0.8, 0.75, 0.6666666666666666, 0.6666666666666666, 1.0, 1.0, 1.0, 0.25, 1.0, 1.0, 0.5, 1.0, 1.0, 1.0, 1.0, 0.8, 1.0, 0.6666666666666666, 1.0, 0.75, 1.0, 0.25, 0.5, 0.4, 0.4, 1.0, 1.0, 1.0, 0.5, 0.75, 1.0, 0.5, 0.3333333333333333, 1.0, 0.75, 0.75, 0.75, 1.0, 1.0, 1.0, 0.5, 1.0, 1.0, 0.75, 0.6666666666666666, 0.2, 1.0, 0.5, 1.0, 0.6666666666666666, 1.0, 1.0, 1.0, 0.8, 1.0, 0.0, 1.0, 0.6666666666666666, 1.0, 1.0, 0.8, 0.6666666666666666, 0.8, 1.0, 1.0, 0.6666666666666666, 1.0, 0.4, 1.0, 0.5, 1.0, 0.6, 0.75, 1.0, 0.75, 0.75, 1.0, 1.0, 1.0, 0.75, 0.6666666666666666, 1.0, 0.75, 0.4, 0.6, 1.0, 0.25, 0.75, 0.5, 1.0, 1.0, 1.0, 1.0, 0.8, 1.0, 1.0, 1.0, 0.6666666666666666, 1.0, 0.6, 1.0, 0.75, 0.75, 1.0, 1.0, 1.0, 0.75, 0.8, 0.6666666666666666, 1.0, 0.5, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

yy = [1.0, 1.0, 0.0, 0.5, 0.75, 0.5, 0.5, 0.25, 1.0, 0.5, 1.0, 1.0,
    1.0, 1.0, 0.5, 1.0, 1.0, 1.0, 0.75, 1.0, 1.0, 1.0, 0.4, 1.0, 1.0, 1.0, 0.5, 1.0, 0.75, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.6666666666666666, 0.4, 1.0, 1.0, 0.6666666666666666, 0.75, 1.0, 0.5, 1.0, 0.0, 0.5, 0.8, 1.0, 0.3333333333333333, 1.0, 1.0, 0.5, 1.0, 0.6, 0.8, 0.6666666666666666, 0.8, 0.8, 0.6666666666666666, 1.0, 1.0, 0.25, 0.5, 0.3333333333333333, 0.75, 0.75, 0.2, 0.3333333333333333, 0.8, 1.0, 0.6666666666666666, 1.0, 0.8, 0.75, 0.6666666666666666, 0.6666666666666666, 1.0, 1.0, 1.0, 0.25, 1.0, 1.0, 0.5, 1.0, 1.0, 1.0, 1.0, 0.8, 1.0, 0.6666666666666666, 1.0, 0.75, 1.0, 0.25, 0.5, 0.4, 0.4, 1.0, 1.0, 1.0, 0.5, 0.75, 1.0, 0.5, 0.3333333333333333, 0.5, 0.75, 0.75, 0.75, 1.0, 1.0, 1.0, 0.5, 1.0, 1.0, 0.75, 0.6666666666666666, 0.2, 1.0, 0.5, 1.0, 0.6666666666666666, 1.0, 1.0, 0.6, 0.8, 0.6666666666666666, 0.0, 1.0, 0.6666666666666666, 1.0, 1.0, 0.8, 0.6666666666666666, 0.8, 0.5, 1.0, 0.3333333333333333, 1.0, 0.4, 1.0, 0.5, 1.0, 0.6, 0.75, 1.0, 0.75, 0.5, 1.0, 1.0, 1.0, 0.75, 0.6666666666666666, 1.0, 0.5, 0.4, 0.6, 1.0, 0.25, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0, 0.8, 1.0, 1.0, 0.75, 0.6666666666666666, 1.0, 0.6, 1.0, 0.25, 0.75, 1.0, 1.0, 1.0, 0.75, 0.6, 0.6666666666666666, 0.75, 0.5, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]


##using scipy
rep_track_err_app = [xx,yy]
f_val, p_val = stats.f_oneway(*rep_track_err_app)
print 'f_Val: {} p_val {}  {}\n'.format( f_val, p_val, '' if p_val > 0.05 else '~~~~~~~~~~~~~~~~~~~SIG')

##using stats model
temp_crap = pd.DataFrame( {'cor_gaze_perc':xx, 'cor_gaze_key_perc':yy })

eqq = '{} ~ {}'.format(p_to_test[0][0], p_to_test[0][1])
eqq = 'cor_gaze_perc ~ cor_gaze_key_perc'
mod = ols(eqq, data=temp_crap).fit()

#aov_table = sm.stats.anova_lm(mod, typ=2)
#esq_sm = aov_table['sum_sq'][0]/(aov_table['sum_sq'][0]+aov_table['sum_sq'][1])
print aov_table

scipy.f_oneway()给出:

  

f_Val: 0.430739819784 p_val 0.512005409956

statsmodel.anova_lm()给出:

                   sum_sq     df            F         PR(>F)
cor_gaze_key_perc  19.006574    1.0  2685.830177  3.992088e-117
Residual            1.401169  198.0          NaN            NaN

p值完全不同。我想念什么?我正在比较两个相同大小的数组,以获得统计差异。它适用于其他数据集,但不适用于此数据集。

我不敢相信这是一个错误。我一定做错了什么。如果有人可以解释,我将非常感激。

0 个答案:

没有答案