MANOVA 使用统计模型

MANOVA using stats models

我正在寻找 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 似乎不是一个流行的包,我在网上找不到任何例子。非常感谢。

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

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

下面是一个展示如何使用函数的小例子:

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