Statsmodels Построение средних доверительных интервалов на основе гетероскедастических согласованных стандартных ошибок

Этот вопрос похож на доверительные интервалы и интервалы прогнозирования с StatsModels, но с дополнительным нюансом. :

Мои данные гетероскедастичны, и я хотел бы построить доверительный интервал для среднего, используя любую из гетероскедастических согласованных стандартных ошибок, которые предоставляет statsmodels (HC0_se, HC1_se и т. Д.). Я не могу найти легкий доступ к этой информации для каждого подобранного значения (хотя довольно легко получить интервалы для каждого коэффициента). Кроме того, похоже, что он не содержится в сводной таблице результатов в stats.outliers в том же смысле, что и данные стандартного среднего доверительного интервала.

Два вопроса:

  1. Кто-нибудь знает, как я могу это сделать?
  2. Для чего обычно используются ковариационные матрицы с гетероскедастической согласованностью, которые также доступны в объекте результатов линейной регрессии? Почему это доступно?

Большое спасибо


person AllenQ    schedule 28.01.2014    source источник
comment
Я не совсем понимаю твой второй вопрос. Это: почему мы используем устойчивые ковариации гетероскедастичности?   -  person Josef    schedule 28.01.2014
comment
второй вопрос - вопрос новичка. например: для чего мне использовать ковариационную матрицу hc? (вероятно, не подходит для SO, поскольку это не совсем о программировании)?   -  person AllenQ    schedule 28.01.2014
comment
Да, это скорее вопрос по stats.stackexchange. Добавлю краткий ответ.   -  person Josef    schedule 28.01.2014


Ответы (2)


Устойчивые стандартные ошибки или ковариации еще не полностью интегрированы в модели. В настоящее время они в основном являются надстройками, чтобы получить их после оценки модели.

Мы сможем изменить ковариацию по умолчанию на любую из доступных надежных оценок ковариации в следующей версии statsmodels, которая уже находится в текущем мастере для OLS. Тогда все дополнительные результаты, t_test, wald_test и т. Д., Будут использовать устойчивую или ненадежную ковариацию, которая была определена по умолчанию. текущая версия: http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.get_robustcov_results.html

Для стандартных ошибок прогноза:

Я думаю, что вычисления такие же, когда cov_params является надежным оценщиком сэндвичей, но я не проверял это на Stata. см. последнюю часть моего ответа в Математический фон statsmodels wls_prediction_std

Таким образом, в statsmodels 0.5 невозможно напрямую получить ошибки прогнозирования с надежными ковариациями, вам нужно скопировать функцию, чтобы использовать желаемый cov_params.

Почему мы используем надежные ковариации

Если наблюдается гетероскедастичность или корреляция наблюдений, то OLS имеет согласованные или несмещенные оценки параметров, но стандартная ковариационная матрица оценок параметров «неверна». Итак, нам нужно получить ковариационную матрицу, устойчивую к гетероскедастичности, корреляции или и тем, и другим.

Многие современные учебники по эконометрике рекомендуют всегда использовать надежные оценки ковариации, когда мы не уверены в правильности спецификации гетероскедастичности или корреляции между наблюдениями. Что почти всегда имеет место в экономике.

Самый простой случай - это просто гетероскедастичность http://en.wikipedia.org/wiki/Heteroscedasticity-consistent_standard_errors но в временных рядах у нас может быть автокорреляция, которую мы не включили в модель, в повторяющихся измерениях или панельных данных мы часто имеем корреляцию внутри кластеров или панелей. В этих случаях робастные ковариации дают нам последовательные стандартные ошибки.

То же самое может относиться к другим моделям, например, кластерным устойчивым стандартным ошибкам в модели Пуассона или модели Логита в обобщенных оценочных уравнениях (GEE).

person Josef    schedule 28.01.2014
comment
отличное объяснение. Меня интересовал параметр pred_mean, который использовался в сообщении SO, на которое я ссылался. код в statsmodels.stats.outliers_influence использует pred_mean_se = np.sqrt (infl.hat_matrix_diag * res.mse_resid). эта стандартная ошибка неверна, если есть гетероскедастичность? если бы я хотел отрегулировать это mean_se для гетероскедастичности, как бы мне отрегулировать код? - person AllenQ; 28.01.2014
comment
Использование шляпной матрицы OLS неверно, поскольку в ней не используется надежная ковариация. Если мы используем covb напрямую, как в wls_prediction_std и в ответе Винсента, тогда мы можем использовать любую устойчивую ковариацию, подходящую для наших данных, как covb в расчетах. Я предполагаю, что есть поправка к матрице элементов OLS, которую можно было бы использовать напрямую, но я никогда не пробовал. - person Josef; 28.01.2014
comment
Для predict_mean нам нужна только вторая часть predvar (в ответе Винсента) - person Josef; 28.01.2014
comment
просто хочу подтвердить, что я понимаю: используя predvar = (exog * np.dot (covb, exog.T) .T) .sum (1) для вычисления predstd и tppf, я могу затем рассчитать интервал predstd_mean как: fit_values ​​+/- tppf * predstd, где fit_values ​​берется из объекта результатов OLS (например: results.fitted_values ​​()). это верно? - person AllenQ; 28.01.2014

Я не верю, что есть способ указать, какую ковариационную матрицу вы хотите использовать для расчета стандартных ошибок прогноза. Обратите внимание, что код прогноза все еще находится в папке «песочницы» в репозитории statsmodels. Я уверен, что запросы на вытягивание Github будут приветствоваться :)

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

Затем вы можете использовать тот же лакомый кусочек matplotlib, который вы видели в другом сообщении SO.

https://github.com/statsmodels/statsmodels/blob/master/statsmodels/sandbox/regression/predstd.py#L27

predvar = res.mse_resid/weights + (exog * np.dot(covb, exog.T).T).sum(1)
predstd = np.sqrt(predvar)
tppf = stats.t.isf(alpha/2., res.df_resid)
interval_u = predicted + tppf * predstd
interval_l = predicted - tppf * predstd
return predstd, interval_l, interval_u
person Vincent    schedule 28.01.2014