【问题标题】:Statsmodels gives different ANOVA results to SPSSStatsmodels 为 SPSS 提供不同的方差分析结果
【发布时间】:2017-06-28 20:08:30
【问题描述】:

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

我选择我的模型如下:

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结果如下:

谁能帮忙解释一下区别?可能是在引擎盖下对不同的样本量进行了不同的处理吗?还是我选错了型号?

任何帮助表示赞赏!

【问题讨论】:

  • 看起来您在 statsmodels 中使用类型 2 ANOVA,在 SPSS 中使用类型 3。尝试在 statsmodels 中也使用类型 3 Anova。请注意,在具有正交设计的平衡数据集中,ANOVA 的类型都给出相同的结果,但在非正交设计中则不然。
  • 感谢您的回答。我尝试改变这一点,但并不高兴:结果仍然不同。还尝试在将数据帧传递给 statsmodels 和 SPSS 之前删除 nan 值——仍然没有乐趣!
  • 我在一个来自我自己的数据集的不同示例中遇到了完全相同的问题,差不多一年后 - 我想你没有找到原因吗?与 SPSS 有非常不同的值让我有点紧张
  • 不,恐怕我从来没有找到这个问题的根源!如果您这样做,请回帖...

标签: python pandas statistics statsmodels


【解决方案1】:

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

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

你的模型应该是:

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

【讨论】:

    猜你喜欢
    • 2015-06-04
    • 1970-01-01
    • 2021-03-10
    • 2016-02-20
    • 1970-01-01
    • 2020-08-20
    • 2014-12-02
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多