我可以只用一次复制做anova吗?

时间:2018-04-21 02:20:18

标签: python numpy statistics statsmodels

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

1 个答案:

答案 0 :(得分:1)

通过4次观察,你可以完美地适应这种情况。通过交互效果,您有4个参数,因此您可以完美地适应4个单元格。通过完美拟合,残差方差为零,而nan或inf最有可能来自ZeroDivision。

只有主效应的2型方差分析才有效,但很可能没有代码路径来处理完美拟合模型中的角点情况。

要获得主要效果ANOVA,您可以使用没有交互效果的公式

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