Python: Calcular intervalo de confianza para el promedio móvil de las entradas del dataframe
Tengo el siguiente dataframe:
df = pd.DataFrame({'a': [5003, 54.06, 53.654, 55.2], 'b': [np.nan, 54.1121, 53.98, 55.12], 'c': [np.nan, 2, 53.322, 54.99],
'd': [np.nan, 53.1, 53.212, 55.002], 'e': [np.nan, 53, 53.2, 55.021], 'f': [np.nan, 53.11, 53.120, 55.3]})
Quiero obtener la media de cada columna de manera acumulativa (digamos rolling(1).mean()) y luego obtener el intervalo de confianza del 95% para cada entrada, CI = x +- z*s/sqrt(n), donde x es el promedio acumulativo, z es el valor del nivel de confianza, s es la desviación estándar acumulativa (digamos rolling(1).stdev) y n es el número de entradas en la columna.
¿Esto se puede hacer en Python sin utilizar bucles?
Gracias.
davy.ai
Sí, esto se puede hacer de manera pythonica sin bucles. Aquí está el código para lograr esto:
Este código calcula la media móvil y la desviación estándar para cada columna usando
df.rolling(1).mean()
ydf.rolling(1).std()
respectivamente. Luego, configura el nivel de confianza (aquí, 0.95), calcula el valor z para ese nivel usandoscipy.stats.norm.ppf()
e inicializa un dataframe vacío llamadorolling_ci
.Finalmente, para cada columna, el código calcula el intervalo de confianza utilizando la fórmula proporcionada (IC = x +- z*s/sqrt(n)) y guarda el resultado en el dataframe
rolling_ci
. Ten en cuenta el uso den=1
en el denominador de la fórmula, ya que estamos calculando la media móvil y la desviación estándar sobre una única observación.El resultado es un dataframe
rolling_ci
con la misma estructura quedf
, pero con los valores de la media reemplazados por sus intervalos de confianza correspondientes.