【问题标题】:Can I do anova with only one replication?我可以只做一次复制吗?
【发布时间】:2018-10-01 18:28:01
【问题描述】:
def anova_analysis():
  datafile = "test3.csv"

  data = pd.read_csv(datafile, header=0)
  print(data)
  moore_lm = ols('Y ~ C(A, Sum)*C(B, Sum)',
               data=data).fit()

  table = sm.stats.anova_lm(moore_lm, typ=2)  # Type 2 ANOVA DataFrame
  print(table)
  return table

Y   A   B   AB
28  -1  -1  1
36  1   -1  -1
18  -1  1   -1
31  1   1   1
25  -1  -1  1
32  1   -1  -1
19  -1  1   -1
30  1   1   1
27  -1  -1  1
32  1   -1  -1
23  -1  1   -1
29  1   1   1

为什么这些数据只适用于 >4 行数据? 如果我设计一个 2 因子全阶乘表并且只进行 1 次复制,它将看起来像这样

Y   A   B   AB
28  -1  -1  1
36  1   -1  -1
18  -1  1   -1
31  1   1   1

但是 statsmodel 失败了

文件 “/home/dsb_mac/anaconda2/envs/bayes/lib/python2.7/site-packages/numpy/lib/function_base.py”, 第 1033 行,在 asarray_chkfinite 中 “数组不得包含 infs 或 NaNs”) ValueError: 数组不能包含 infs 或 NaNs

【问题讨论】:

    标签: python numpy statistics statsmodels


    【解决方案1】:

    通过 4 次观察,您将完全符合案例。通过交互效果,您有 4 个参数,因此您可以完美地拟合 4 个单元格。在完美拟合的情况下,剩余方差为零,并且 nan 或 inf 最有可能来自 ZeroDivision。

    只有主效应的类型 2 ANOVA 应该可以工作,但很可能没有代码路径来处理完美拟合模型中的极端情况。

    要获得主效应方差分析,您可以使用没有交互效应的公式

    'Y ~ C(A, Sum) + C(B, Sum)'

    【讨论】:

    • 非常感谢。是否可以显示类似于this的交互效果?这是具有交互作用的 4 个因素/2 个水平,1 个复制。分析由 Statistica 输出。我在另一个带有虚拟数据的文件上尝试了 'Y ~ C(A, Sum)*C(B, Sum)*C(C, Sum)' 但它返回了 TypeError: 'Series' object is not callable
    • 我猜你的意思是 statsmodels 而不是 Statistica。 C 不是一个好的变量名,patsy 中的公式解释不知道 C 应该是编码命令还是解释变量,并且基于 TypeError 将 C 解释为变量名。 Quoting 可能会有所帮助。
    • 我认为不可能得到任何推论统计,例如完美拟合案例中的标准错误。通过交互效应,您实际上是在通过单个观察来估计平均值。
    • 如果我正确解释了链接中的 Statistica 输出,那么他们不会使用所有交互模型,即 R 平方小于 1。我的猜测是,他们只关注 4 因子模型中的成对交互,但不包括 3 和 4 因子之间的交互。这在 statsmodels 中也应该是可能的。
    • 感谢您的意见。如果我只是复制并粘贴观察 Y 数据以获得 8 个值,我会得到基本相同的分析但避免错误吗?
    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 2016-10-05
    • 2020-09-11
    • 1970-01-01
    • 2016-10-19
    • 2015-06-21
    • 2011-01-02
    • 2019-04-15
    相关资源
    最近更新 更多