Я пытаюсь получить доверительные интервалы вокруг прогнозируемых суммарных значений после регрессии и не могу понять, как это сделать в 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 используется в уравнении в качестве категориальной переменной.