使用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值完全不同。我想念什么?我正在比较两个相同大小的数组,以获得统计差异。它适用于其他数据集,但不适用于此数据集。
我不敢相信这是一个错误。我一定做错了什么。如果有人可以解释,我将非常感激。