Solución:
actualizar vea la segunda respuesta que es más reciente. Algunos de los modelos y clases de resultados tienen ahora un get_prediction
método que proporciona información adicional que incluye intervalos de predicción y / o intervalos de confianza para la media predicha.
vieja respuesta:
iv_l
y iv_u
darle los límites del intervalo de predicción para cada punto.
El intervalo de predicción es el intervalo de confianza para una observación e incluye la estimación del error.
Creo que el intervalo de confianza para la predicción media aún no está disponible en statsmodels
. (En realidad, el intervalo de confianza para los valores ajustados se esconde dentro de la tabla de resumen de influence_outlier, pero necesito verificar esto).
Los métodos de predicción adecuados para modelos de estadísticas están en la lista TODO.
Adición
Los intervalos de confianza existen para OLS, pero el acceso es un poco torpe.
Para ser incluido después de ejecutar su script:
from statsmodels.stats.outliers_influence import summary_table
st, data, ss2 = summary_table(re, alpha=0.05)
fittedvalues = data[:, 2]
predict_mean_se = data[:, 3]
predict_mean_ci_low, predict_mean_ci_upp = data[:, 4:6].T
predict_ci_low, predict_ci_upp = data[:, 6:8].T
# Check we got the right things
print np.max(np.abs(re.fittedvalues - fittedvalues))
print np.max(np.abs(iv_l - predict_ci_low))
print np.max(np.abs(iv_u - predict_ci_upp))
plt.plot(x, y, 'o')
plt.plot(x, fittedvalues, '-', lw=2)
plt.plot(x, predict_ci_low, 'r--', lw=2)
plt.plot(x, predict_ci_upp, 'r--', lw=2)
plt.plot(x, predict_mean_ci_low, 'r--', lw=2)
plt.plot(x, predict_mean_ci_upp, 'r--', lw=2)
plt.show()
Esto debería dar los mismos resultados que SAS, http://jpktd.blogspot.ca/2012/01/nice-thing-about-seeing-zeros.html
Para los datos de prueba, puede intentar utilizar lo siguiente.
predictions = result.get_prediction(out_of_sample_df)
predictions.summary_frame(alpha=0.05)
Encontré el método summary_frame () enterrado aquí y puedes encontrar el método get_prediction () aquí. Puede cambiar el nivel de significancia del intervalo de confianza y el intervalo de predicción modificando el parámetro “alfa”.
Estoy publicando esto aquí porque esta fue la primera publicación que surge cuando se busca una solución para los intervalos de confianza y predicción, aunque esto se refiere más bien a los datos de prueba.
Aquí hay una función para tomar un modelo, nuevos datos y un cuantil arbitrario, usando este enfoque:
def ols_quantile(m, X, q):
# m: OLS model.
# X: X matrix.
# q: Quantile.
#
# Set alpha based on q.
a = q * 2
if q > 0.5:
a = 2 * (1 - q)
predictions = m.get_prediction(X)
frame = predictions.summary_frame(alpha=a)
if q > 0.5:
return frame.obs_ci_upper
return frame.obs_ci_lower
summary_frame
y summary_table
funcionan bien cuando se necesitan resultados exactos para un solo cuantil, pero no se vectorizan bien. Esto proporcionará una aproximación normal del intervalo de predicción (no intervalo de confianza) y funciona para un vector de cuantiles:
def ols_quantile(m, X, q):
# m: Statsmodels OLS model.
# X: X matrix of data to predict.
# q: Quantile.
#
from scipy.stats import norm
mean_pred = m.predict(X)
se = np.sqrt(m.scale)
return mean_pred + norm.ppf(q) * se