Statsmodels给SPSS提供了不同的ANOVA结果

时间:2017-02-10 12:59:48

标签: python pandas statistics statsmodels

我熟悉Statsmodels,以便将我更复杂的统计数据完全转移到python。但是,我很谨慎,所以我用SPSS交叉检查我的结果,只是为了确保我没有犯任何明显的错误。大多数时候,没有区别,但我有一个双向ANOVA的例子,它在Statsmodels和SPSS中抛出了截然不同的测试统计数据。 (相关观点:ANOVA中的样本量不匹配,因此ANOVA可能不是此处的适当模型。)

我按照以下方式选择我的模型:

import pandas as pd
import scipy as sp
import numpy as np
import statsmodels.api as sm
import seaborn as sns
import statsmodels
import statsmodels.api as sm
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt

Body = pd.read_csv(filepath)

Body = Body.dropna()

Body_lm = ols('Effect ~ C(Fiction) + C(Condition) + C(Fiction)*C(Condition)', data = Body).fit()

table = sm.stats.anova_lm(Body_lm, typ=2)

Statsmodels输出如下:

                            sum_sq     df           F        PR(>F)
C(Fiction)               278.176684    1.0  307.624463  1.682042e-55
C(Condition)               4.294764    1.0    4.749408  2.971278e-02
C(Fiction):C(Condition)   10.776312    1.0   11.917092  5.970123e-04
Residual                 520.861599  576.0         NaN           NaN

相应的SPSS结果如下:

SPSS

任何人都可以帮助解释这种差异吗?或许是不同的样本大小在引擎盖下被区别对待?或者我选择了错误的模型?

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

比较变量的均值时,应使用sum coding。 顺便说一句,如果使用* multiply operator,则不需要指定交互项中的每个变量:

“:”将新列与其他两列的乘积一起添加到设计矩阵中。
“ *”还将包括相乘在一起的各个列。

您的模型应为:

Body_lm = ols('Effect ~ C(Fiction, Sum)*C(Condition, Sum)', data = Body).fit()