使用Scipy/Numpy统计数据的Python中的ANCOVA

Sha*_*hax 7 statistics scipy

我想知道一种使用Python和scipy执行ANCOVA(协方差分析)的方法.它基本上是回归线的统计比较.我知道Python可以做ANOVA,它也可以用Scipy.stats进行回归线拟合.如果有可能的话,我不知道如何将它们放在一起以获得有效的ANCOVA.

Jos*_*sef 11

ANCOVA可以通过设计矩阵中的虚拟变量进行回归,以获得依赖于分类变量的效果.

一个简单的例子是 http://groups.google.com/group/pystatsmodels/browse_thread/thread/aaa31b08f3df1a69?hl=en 使用scikits.statsmodels中的OLS类

设计矩阵xg的构造的相关部分包括组号/标号,x1是连续的解释变量

>>> dummy = (xg[:,None] == np.unique(xg)).astype(float)
>>> X = np.c_[x1, dummy[:,1:], np.ones(nsample)]
Run Code Online (Sandbox Code Playgroud)

估计模型

>>> res2 = sm.OLS(y, X).fit()
>>> print res2.params
[ 1.00901524  3.08466166 -2.84716135  9.94655423]
>>> print res2.bse
[ 0.07499873  0.71217506  1.16037215  0.38826843]
>>> prstd, iv_l, iv_u = wls_prediction_std(res2)
Run Code Online (Sandbox Code Playgroud)

"测试假设所有群体都有相同的拦截"

>>> R = [[0, 1, 0, 0],
...      [0, 0, 1, 0]]

>>> print res2.f_test(R)
<F test: F=array([[ 91.69986847]]), p=[[  8.90826383e-17]],
df_denom=46, df_num=2>
Run Code Online (Sandbox Code Playgroud)

强烈拒绝,因为拦截的差异非常大

更新(两年半后):

scikits.statsmodels 已重命名为 statsmodels

以及问题:

使用最新版本的statsmodel,使用公式指定分类效果和交互效果会更方便.statsmodels使用patsy处理公式并创建设计矩阵.

有关详细信息,请参阅/sf/answers/1364714431/中 statsmodels文档的链接.