ANCOVA в Python со статистикой Scipy / Numpy - PullRequest
7 голосов
/ 27 мая 2010

Я хотел бы знать, как выполнить ANCOVA (анализ ковариации) с использованием Python и scipy. Это в основном статистическое сравнение линий регрессии. Я знаю, что Python может выполнять ANOVA, а также подгонку линий регрессии с помощью Scipy.stats. Я не уверен, как собрать их вместе, чтобы получить эффективную анкову, если это возможно.

1 Ответ

11 голосов
/ 30 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...