trama media y intervalo de confianza - matplotlib
Quiero hacer una trama que divide un conjunto de datos y muestra la cantidad de observaciones por categoría en el eje izquierdo y un intervalo de confianza (por ejemplo, 90%) incluyendo la media para un cierto valor observado en el eje derecho.
Debería parecer así:
Sé cómo usar ax.hist()
o ax.bar()
para el primer trabajo. Un segundo eje se hace fácilmente ax.twinx()
. Sin embargo, después de probar ambos ax.boxplot()
y ax.violinplot()
, creo que ninguno podría hacer el trabajo (plomar el intervalo de confianza + media) correctamente. ¿Alguna sugerencia?
Pregunta hecha hace 3 años, 4 meses, 28 días - Por bytebard
2 Respuestas:
-
Para lograr la trama deseada con el conjunto de datos dividido por categoría en el eje izquierdo y el intervalo de confianza con la media en el eje derecho, puedes seguir los siguientes pasos:
- Utilizar `ax.bar()` o `ax.hist()` para crear la parte izquierda de la gráfica donde se muestra la cantidad de observaciones por categoría.
- Utilizar `ax.errorbar()` para representar el intervalo de confianza junto con la media en el eje derecho.
- Especificar el nivel de confianza deseado en la función `ax.errorbar()`.
Aquí tienes un ejemplo de cómo podrías implementar esto:
python import matplotlib.pyplot as plt import numpy as np
Generar datos de ejemplo
data = np.random.normal(loc=0, scale=1, size=1000) categories = np.random.randint(0, 4, size=1000)Contar observaciones por categoría
unique, counts = np.unique(categories, return_counts=True)Calcular media y error estándar por categoría (para simular intervalo de confianza)
means = [np.mean(data[categories == cat]) for cat in unique] stds = [np.std(data[categories == cat]) for cat in unique]Crear la gráfica
fig, ax1 = plt.subplots()Barra de observaciones por categoría en el eje izquierdo
ax1.bar(unique, counts, color='blue', alpha=0.8) ax1.set_ylabel('Cantidad de Observaciones', color='blue')Crear el segundo eje y representar intervalo de confianza + media en el eje derecho
ax2 = ax1.twinx() ax2.errorbar(unique, means, yerr=1.645*np.array(stds), fmt='o', color='green', ecolor='gray', capsize=5) ax2.set_ylabel('Intervalo de Confianza (90%) + Media', color='green') plt.show()Este ejemplo asume que se están simulando intervalos de confianza del 90% utilizando el valor de z=1.645. Puedes ajustar estos valores según tus necesidades.
Al seguir estos pasos, deberías poder crear una gráfica similar a la que has descrito, con las observaciones por categoría en el eje izquierdo y el intervalo de confianza con la media en el eje derecho.
Respondida el Dec 19, 2020 a las 15:50 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Puedes crear una trama con un eje izquierdo que muestre un histograma o una barra de la cantidad de observaciones por categoría y un eje derecho que muestre la media y el intervalo de confianza para un valor observado específico utilizando las siguientes técnicas:
Paso 1: Crear los datos
Asegúrate de tener un conjunto de datos con las siguientes columnas:
categoria
: La categoría a la que pertenece cada observación.valor
: El valor observado para cada observación.valor_observado
: El valor específico para el que deseas calcular la media y el intervalo de confianza.Paso 2: Crear la trama con el eje izquierdo
Puedes utilizar
matplotlib.pyplot.hist()
omatplotlib.pyplot.bar()
para crear el histograma o la barra en el eje izquierdo.python import matplotlib.pyplot as plt plt.hist(datos['valor'], bins=10) plt.xlabel('Categoría') plt.ylabel('Cantidad de observaciones')
Paso 3: Crear el segundo eje (derecho)
Para crear el segundo eje, utiliza
matplotlib.pyplot.twinx()
para compartir el eje x con el primer eje.python ax2 = plt.twinx()
Paso 4: Calcular y trazar la media y el intervalo de confianza
Puedes utilizar
scipy.stats.t.interval()
para calcular el intervalo de confianza de 90% para la media. Una vez calculado, puedes trazar la media y los límites inferior y superior del intervalo de confianza.python from scipy.stats import t
Calcular el intervalo de confianza
media, intervalo_inferior, intervalo_superior = t.interval(0.9, len(datos) - 1, loc=np.mean(datos[datos['valor_observado'] == valor_observado]['valor']), scale=np.std(datos[datos['valor_observado'] == valor_observado]['valor']))Trazar la media
ax2.plot([valor_observado, valor_observado], [intervalo_inferior, intervalo_superior], color='r', linewidth=3)Trazar el intervalo de confianza
ax2.plot([valor_observado - (intervalo_superior - media), valor_observado + (intervalo_superior - media)], [media, media], color='r', linewidth=3)Paso 5: Etiquetar y finalizar*
Agrega etiquetas al eje derecho y un título a la trama.
python ax2.set_ylabel('Media y intervalo de confianza (90%)') plt.title('Trama de distribución de valores') plt.show()
Esta técnica te permitirá crear una trama de distribución que muestra tanto la distribución de las observaciones como la media y el intervalo de confianza para un valor observado específico.
Respondida el Dec 19, 2020 a las 15:56 - por Gemini
Votos positivos: 0 | Votos negativos: 0