ANCOVA можно сделать с помощью регрессии, используя фиктивные переменные в матрице проектирования для эффектов, которые зависят от категориальной переменной.
Простой пример на
http://groups.google.com/group/pystatsmodels/browse_thread/thread/aaa31b08f3df1a69?hl=en
используя класс OLS из scikits.statsmodels
Соответствующая часть построения проектной матрицы
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 для обработки формул и создает матрицы дизайна.
Дополнительную информацию можно получить по ссылкам на документацию statsmodels в https://stackoverflow.com/a/19495920/333700