Как получить CI для прогнозируемого суммарного значения после регрессии в Python? - PullRequest
2 голосов
/ 10 июля 2020

Я пытаюсь получить доверительные интервалы вокруг прогнозируемых суммарных значений после регрессии и не могу понять, как это сделать в python. Я знаю, как получить прогноз и CI для каждого предмета, но не для сводной меры. Используя следующий пример, мой вопрос: «Каков средний уровень gre для кого-то с gpa 3:»

import pandas as pd
import statsmodels.formula.api as sm
import numpy as np
df=pd.read_stata('https://stats.idre.ucla.edu/stat/stata/dae/binary.dta', convert_categoricals=False)
regresult = sm.ols(formula='gre~gpa', data=df).fit()
pred=regresult.get_prediction(df.assign(gpa=3))
predtable=pred.summary_frame()
print(predtable)
print(np.mean(predtable['mean']))

Я знаю, как получить итоговую меру [например, np.mean (predtable [ 'mean'])], но не о том, как получить CI.

В основном я хочу воспроизвести соответствующий вывод Stata полей, но не знаю, как:

use http://stats.idre.ucla.edu/stat/stata/dae/binary.dta
regress gre gpa
margins, at(gpa=3)

. margins, at(gpa=3)

RESULT:
Adjusted predictions                              Number of obs   =        400
Model VCE    : OLS

Expression   : Linear prediction, predict()
at           : gpa             =           3

------------------------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       _cons |   542.2223   7.648634    70.89   0.000     527.1855    557.2591
------------------------------------------------------------------------------

Как получить CI 527.1855 - 557.2591 в Python?

Best

ОБНОВЛЕНИЕ: как указывает Перли Спенсер, в вышеупомянутом примере соответствующие значения можно увидеть в predtable. Однако это больше не работает, если указана категориальная переменная:

regresult = sm.ols(formula='gre~gpa+C(rank)', data=df).fit()
pred=regresult.get_prediction(df.assign(gpa=3))
predtable=pred.summary_frame()
print(predtable)
print(np.mean(predtable['mean']))

Поля команд Stata вычисляют прогнозируемую вероятность для кого-то с gpa = 3 при установке ранга на его среднем уровне.

. regress gre gpa i.rank
. margins, at(gpa=3)

Predictive margins                                Number of obs   =        400
Model VCE    : OLS

Expression   : Linear prediction, predict()
at           : gpa             =           3

------------------------------------------------------------------------------
             |            Delta-method
             |     Margin   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       _cons |   541.9911   7.640092    70.94   0.000     526.9707    557.0114
------------------------------------------------------------------------------

Это равно: margins, at (gpa = 3) atmeans

In Python print (np.mean (predtable ['mean'])) дает правильное значение 541,9911. Однако я не знаю, как рассчитать CI. Возможно, он будет работать с использованием pred = regresult.get_prediction (df.assign (gpa = 3)) и каким-то образом включать среднее значение ранга после gpa = 3, но я не мог заставить его работать, потому что только rank = 1, rank = 2, Допустимы rank = 3 и rank = 4, так как rank используется в уравнении в качестве категориальной переменной.

...