【发布时间】:2010-05-26 20:58:56
【问题描述】:
我想知道一种使用 Python 和 scipy 执行 ANCOVA(协方差分析)的方法。它基本上是回归线的统计比较。我知道 Python 可以进行方差分析,它还可以使用 Scipy.stats 进行回归线拟合。不过,如果可能的话,我不确定如何将这些组合在一起以获得有效的 ANCOVA。
【问题讨论】:
标签: scipy statistics
我想知道一种使用 Python 和 scipy 执行 ANCOVA(协方差分析)的方法。它基本上是回归线的统计比较。我知道 Python 可以进行方差分析,它还可以使用 Scipy.stats 进行回归线拟合。不过,如果可能的话,我不确定如何将这些组合在一起以获得有效的 ANCOVA。
【问题讨论】:
标签: scipy statistics
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)]
估计模型
>>> 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)
“所有组具有相同截距的检验假设”
>>> 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>
强烈拒绝,因为截距差异很大
更新(两年半后):
scikits.statsmodels 已重命名为 statsmodels
关于问题:
随着最新版本的statsmodels,使用公式来指定分类效果和交互效果更加方便。 statsmodels 使用 patsy 处理公式并创建设计矩阵。
更多信息,请访问https://stackoverflow.com/a/19495920/333700 中的 statsmodels 文档链接
【讨论】: