たけのこブログ

凡人が頑張って背伸びするブログ

pythonのバージョン更新したらstatsmodelsで分散分析できなくなった件

分散分析ができなくなっちゃった...汗

前回の記事からanacondaのバージョンを上げました。

yukr.hatenablog.com

anaconda3-4.3.0からanaconda3-5.3.0バージョンを更新して、今日は実験の解析でstatmodelsを使って分散分析をしようとしたら、以下のようなエラーが...

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-6-0d5566028b0b> in <module>()
     10 # Make a model
     11 formula = 'percentage' + '~Cond'
---> 12 lm = ols(formula, data = df_group1).fit()
     13 result = sm.stats.anova_lm(lm)
     14 print(result)

あれ、今までできていた統計解析ができない(笑)。 調べたところ、statsmodelsでformulaのparserに使用されるpatsyと呼ばれるライブラリにバグがあったことが原因らしいです。これは、stackoverflowやstatmodelsのissuesにも対策方法が書かれていました。

stackoverflow.com

github.com

Python 3.7.1から発生しているバグみたいですね。肝心の解決方法は案外シンプルでpip install -U patsyでpatsyのバージョンを更新すれば問題ないです。バージョンを更新する前は

In [1]: import patsy

In [2]: patsy.__version__
Out[2]: '0.5.0'

となっていますが、更新すれば0.5.1にバージョンアップされると思います。結果、無事に分散分析できました。0.05<0.07なので、有意傾向みたいです笑

# Make a model
formula = 'percentage' + '~Cond'
lm = ols(formula, data = df_group1).fit()
result = sm.stats.anova_lm(lm)
print(result)
            df        sum_sq        mean_sq         F    PR(>F)
Cond       1.0  2.215560e+05  221556.004523  3.505502  0.075861
Residual  20.0  1.264047e+06   63202.360938       NaN       NaN

分散分析がしたい場合は以下のような記事を参考にすると良いと思います。機会があれば、分散分析や多重比較補正の方法などを本格的に載せようかなと思います。今日はとりあえずここまで。

www.monotalk.xyz