Как проанализировать этот вывод байесовского анализа - PullRequest
1 голос
/ 21 апреля 2019

Я пытаюсь выполнить байесовский анализ с использованием программного обеспечения pymc3 и bambi.

Моя форма данных 136x5, и верхние 5 строк выглядят следующим образом:

   AGE GENDER  AVAR  BVAR   OUTVAR
0   60      F   0.9     0   8260.0
1   56      F   5.4     1  15888.0
2   55      F   1.2     1  19734.4
3   52      F   1.7     1  15904.2
4   49      F   1.6     0  14848.0

, где OUTVAR - целевая переменная, а другие - предикторы.

Я использовал следующий код Python3:

from bambi import Model
model = Model(bdf)
results = model.fit('OUTVAR ~ AGE + GENDER + AVAR + BVAR', samples=5000, chains=2)
print(results[1000:].summary())

и получил следующий вывод:

Auto-assigning NUTS sampler...
Initializing NUTS using advi...
Average Loss = 1,476.2:  21%|██████████████▊                                                       | 10601/50000 [00:01<00:07, 5542.87it/s]
Convergence achieved at 10700
Interrupted at 10,699 [21%]: Average Loss = 1,520.6
Multiprocess sampling (2 chains in 2 jobs)
NUTS: [OUTVAR_sd, BVAR, AVAR, AGE, GENDER, Intercept]
Sampling 2 chains: 100%|██████████████████████████████████████████████████████████████████████████| 11000/11000 [11:40<00:00, 15.71draws/s]
There were 154 divergences after tuning. Increase `target_accept` or reparameterize.
The chain reached the maximum tree depth. Increase max_treedepth, increase target_accept or reparameterize.
There were 241 divergences after tuning. Increase `target_accept` or reparameterize.
The chain reached the maximum tree depth. Increase max_treedepth, increase target_accept or reparameterize.
The number of effective samples is smaller than 10% for some parameters.

                     mean           sd  hpd0.95_lower  hpd0.95_upper  effective_n  gelman_rubin
AGE              6.936836    81.741918    -158.176468     165.050530          589      1.005245
AVAR           -78.356403   410.942267    -896.068374     718.650196         2414      1.000314
BVAR          2639.993063  2262.101985   -1528.841953    7297.760056          553      1.000544
GENDER[T.M]   -615.092080  1659.905226   -3855.789966    2756.704710         1392      1.003126
Intercept    11739.843222  3591.680335    5239.872556   19053.145349          179      1.007447
OUTVAR_sd     8936.351700   283.640474    8402.347757    9318.495791         6027      1.000028

Как мне анализировать и какой вывод я могу сделать из этой таблицы значений?

Редактировать: Если быть точным, я хочу подтвердить, если mean указывает значения коэффициентов для каждой переменной. Однако в обычной линейной регрессии нет коэффициента для переменной результата, в то время как здесь он указан. Также мне не ясно, что означает значение effective_n для каждой переменной. Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 21 апреля 2019

В этом контексте mean - это среднее значение апостериорного распределения. В таком простом случае, как этот, апостериорные средние значения обычно будут близки к точечным оценкам, которые можно получить из традиционной регрессии наименьших квадратов.

Строка OUTVAR_sd не для конечной переменной; это представляет ошибку модели. Представьте, что истинный балл OUTVAR является суммой предсказанного моделью OUTVAR плюс нормально распределенная ошибка. Тогда OUTVAR_sd является апостериорной оценкой для этого члена ошибки.

effective_n - эвристическая оценка числа независимых выборок в цепочке для каждой переменной. Это почти всегда меньше, чем номинальное число, потому что последовательные выборки коррелируют. См. в этом блоге для краткого объяснения.

...