Estoy trabajando con este conjunto de datos WNBA aquí. Estoy analizando la variable Height, y debajo hay una tabla que muestra la frecuencia, el porcentaje acumulativo y la frecuencia acumulada para cada valor de altura registrado:

img

De la tabla puedo concluir fácilmente que el primer cuartil (el percentil 25) no puede ser mayor que 175.

Sin embargo, cuando uso Series.describe(), me dicen que el percentil 25 es 176.5. ¿Por qué es así?

wnba.Height.describe()
count    143.000000
mean     184.566434
std        8.685068
min      165.000000
25%      176.500000
50%      185.000000
75%      191.000000
max      206.000000
Name: Height, dtype: float64
5
Alex 28 feb. 2018 a las 11:35

3 respuestas

La mejor respuesta

Hay varias formas de estimar los cuantiles.
175.0 vs 176.5 se relaciona con dos métodos diferentes:

  1. Incluye el Q1 (esto da 176.5) y
  2. Excluye el Q1 (da 175.0).

La estimación difiere de la siguiente manera

#1
h = (N − 1)*p + 1 #p being 0.25 in your case
Est_Quantile =  x⌊h⌋ + (h − ⌊h⌋)*(x⌊h⌋ + 1 − x⌊h⌋)

#2
h = (N + 1)*p   
x⌊h⌋ + (h − ⌊h⌋)*(x⌊h⌋ + 1 − x⌊h⌋) 
4
David Leon 28 feb. 2018 a las 09:54

Este es un problema de estadísticas. Hay muchas definiciones de percentil. Aquí hay una explicación de por qué agregaría 1 al calcular su índice del percentil 25:

Una respuesta intuitiva es que el promedio de los números del 1 al n no es n / 2 sino más bien (n + 1) / 2. Esto le da una pista de que simplemente usando p * n produciría valores que son un poco demasiado pequeños.

Recursos:

1
jpp 28 feb. 2018 a las 09:03

Esto se debe a que, por defecto, describe() realiza una interpolación lineal.

Entonces, no pandas no muestra el percentil incorrecto
(simplemente no muestra el percentil que desea ver).

Para obtener lo que espera, puede usar .quantile() en la serie Height, especificando la interpolación a 'lower':

df = pd.read_csv('../input/WNBA Stats.csv')
df.Height.quantile(0.25,interpolation='lower') #interpolation lower to get what you expect

Consulte documentación para obtener más opciones.


Tenga en cuenta que, como @jpp dijo:

Hay muchas definiciones de percentil.

Puede ver esta respuesta también que habla sobre las diferencias entre numpy y pandas cálculo de percentiles, por ejemplo .

0
David Leon 28 feb. 2018 a las 09:38