使用统计模型的MANOVA

时间:2018-12-08 23:12:00

标签: python statsmodels manova

我正在寻找statsmodels MANOVA实现的示例。我无法制作Statsmodels website for MANOVA的首尾。我已经达到了:

endog, exog = np.asarray(pre_post[feats_list]), np.asarray(pre_post[features])
man = sm.MANOVA(endog,exog).fit()

但是使用.fit()我得到一个错误:

NotImplementedError: 

如果我在.fit()中输入任何形式的信息,它会告诉我参数太多。

TypeError: fit() takes 1 positional argument but 2 were given

我确实读过this post,并设法复制了相同的错误

man = sm.MANOVA(endog,exog)
man.mv_test()

但是似乎那里也没有解决方案。

就编程问题而言,我知道这是一种基本的知识,但是我想向任何能够提供关于如何使MANOVA工作以及如何在模型拟合后如何从模型中获得结果的见解的人敬上。 它似乎不是Python中流行的软件包,我在网上找不到任何示例。非常感谢。

2 个答案:

答案 0 :(得分:0)

我只花了大约一个小时来了解他们的文档。设法以正确的格式获取我的数据,只是获取了NotImplementedError ...该模块尚未实现,尽管它假装是..

在编辑中添加: 查看statsmodels glm。可以非常类似地使用它。这是docs

答案 1 :(得分:0)

这是一个小例子,展示了如何使用该功能!

import numpy as np
from statsmodels.multivariate.manova import MANOVA

n_samples = 20
n_dim = 5
n_classes = 3

X = np.random.randn(n_samples, n_dim)
y = np.random.randint(n_classes, size=n_samples)

manova = MANOVA(endog=X, exog=y)
print(manova.mv_test())

输出

                 Multivariate linear model
============================================================

------------------------------------------------------------
           x0           Value  Num DF  Den DF F Value Pr > F
------------------------------------------------------------
          Wilks' lambda 0.3681 4.0000 16.0000  6.8678 0.0020
         Pillai's trace 0.6319 4.0000 16.0000  6.8678 0.0020
 Hotelling-Lawley trace 1.7170 4.0000 16.0000  6.8678 0.0020
    Roy's greatest root 1.7170 4.0000 16.0000  6.8678 0.0020
============================================================

有关显示如何使用from_formula界面的示例,请参见此blog post