Saltar al contenido

intervalos de confianza y predicción con StatsModels

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()

ingrese la descripción de la imagen aquí

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *