Número de goles por partido y equipo en la liga española de fútbol (temporada 2011-2012)

Vamos a contrastar si la distribución de Poisson es un modelo aceptable para el número de goles por partido y equipo en la liga española de fútbol. Para ello, consideramos los datos correspondientes a la temporada 2011-2012 (primera división) y vamos a contrastar la hipótesis nula de que los datos vienen de una distribución de Poisson mediante el test de bondad de ajuste \( \chi^2 \).

Todos los datos

En esta primera parte consideramos todos los datos:

# Lee los datos (Fuente: http://www.lfp.es/Temporada/TablaResultados.aspx)
goles <- c(0, 2, 3, 0, 1, 2, 2, 0, 2, 1, 4, 1, 0, 3, 2, 0, 2, 3, 
    3, 0, 1, 2, 0, 0, 4, 0, 3, 0, 1, 0, 2, 2, 1, 1, 1, 2, 3, 1, 1, 2, 1, 0, 
    1, 3, 3, 0, 3, 0, 3, 2, 1, 1, 1, 2, 2, 1, 3, 0, 0, 3, 2, 1, 3, 0, 2, 1, 
    2, 1, 2, 0, 1, 0, 1, 2, 0, 1, 2, 3, 1, 2, 0, 3, 0, 0, 3, 0, 1, 1, 3, 0, 
    0, 0, 4, 0, 1, 1, 1, 0, 3, 1, 1, 0, 3, 1, 0, 0, 3, 2, 0, 0, 1, 0, 1, 0, 
    3, 0, 2, 1, 2, 0, 2, 1, 0, 2, 2, 1, 4, 1, 0, 0, 2, 0, 1, 1, 5, 0, 3, 0, 
    1, 0, 5, 0, 1, 0, 5, 0, 3, 1, 2, 1, 3, 1, 1, 1, 2, 2, 2, 0, 1, 3, 3, 0, 
    4, 1, 0, 2, 4, 1, 1, 3, 3, 0, 2, 3, 0, 1, 3, 0, 0, 4, 1, 1, 1, 0, 2, 0, 
    2, 4, 1, 0, 4, 1, 0, 1, 0, 4, 0, 3, 0, 0, 3, 1, 4, 1, 1, 0, 0, 0, 2, 2, 
    1, 3, 2, 3, 0, 0, 2, 1, 2, 1, 2, 0, 1, 2, 1, 2, 2, 2, 2, 0, 1, 2, 2, 1, 
    1, 1, 2, 0, 2, 1, 3, 1, 1, 2, 1, 0, 1, 1, 0, 0, 3, 1, 0, 0, 2, 1, 1, 2, 
    1, 4, 1, 0, 0, 1, 1, 2, 0, 3, 1, 1, 0, 1, 1, 3, 2, 2, 3, 1, 1, 0, 0, 0, 
    2, 0, 3, 0, 1, 4, 4, 1, 2, 0, 1, 2, 1, 2, 1, 2, 3, 1, 1, 3, 2, 3, 0, 1, 
    2, 1, 0, 0, 0, 4, 2, 2, 1, 0, 0, 1, 3, 0, 3, 0, 2, 1, 0, 0, 2, 0, 1, 1, 
    2, 1, 0, 0, 3, 3, 0, 2, 0, 2, 1, 0, 2, 2, 2, 1, 1, 0, 1, 5, 3, 1, 3, 0, 
    2, 1, 1, 0, 2, 0, 1, 2, 0, 1, 1, 2, 1, 0, 4, 1, 4, 0, 2, 3, 1, 0, 2, 2, 
    0, 1, 3, 4, 1, 0, 2, 0, 0, 3, 2, 0, 3, 0, 2, 1, 2, 0, 0, 0, 0, 1, 0, 0, 
    0, 1, 0, 4, 2, 0, 1, 0, 2, 2, 4, 1, 1, 2, 0, 0, 2, 0, 5, 1, 1, 0, 1, 1, 
    4, 0, 2, 0, 2, 0, 7, 0, 6, 1, 3, 0, 1, 0, 6, 1, 0, 1, 4, 1, 2, 3, 1, 0, 
    8, 1, 2, 0, 4, 2, 2, 1, 1, 2, 4, 1, 0, 3, 0, 1, 0, 0, 1, 1, 1, 2, 1, 0, 
    0, 0, 2, 0, 1, 3, 1, 1, 2, 1, 2, 0, 3, 2, 1, 0, 1, 1, 2, 2, 1, 0, 2, 2, 
    1, 0, 1, 1, 2, 0, 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 2, 0, 0, 1, 2, 1, 1, 3, 
    0, 0, 2, 0, 1, 0, 0, 2, 1, 1, 2, 4, 2, 0, 1, 0, 2, 1, 1, 1, 1, 3, 1, 1, 
    0, 2, 3, 0, 1, 0, 1, 0, 1, 2, 1, 0, 2, 1, 2, 1, 2, 3, 2, 0, 1, 2, 1, 0, 
    0, 1, 2, 1, 1, 3, 0, 2, 2, 1, 0, 0, 1, 0, 3, 5, 1, 0, 1, 0, 3, 2, 1, 3, 
    1, 1, 2, 2, 2, 1, 1, 2, 1, 0, 4, 0, 0, 3, 3, 1, 4, 3, 1, 0, 1, 1, 1, 3, 
    1, 0, 4, 1, 0, 0, 0, 0, 1, 2, 1, 2, 2, 6, 1, 1, 3, 0, 3, 1, 3, 1, 1, 3, 
    2, 0, 3, 2, 2, 2, 1, 3, 3, 2, 0, 8, 2, 3, 1, 1, 0, 1, 1, 1, 1, 1, 3, 2, 
    3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0, 1, 0, 3, 0, 0, 1, 1, 2, 1, 3, 3, 
    0, 1, 2, 0, 2, 0, 0, 0, 4, 3, 2, 0, 2, 1, 1, 2, 3, 6, 1, 0, 0, 0, 3, 0, 
    1, 1, 0, 1, 2, 1, 5, 0, 2, 0, 4, 1, 4, 2, 0, 1, 2, 1, 1, 0, 0, 1, 1, 1, 
    1, 0, 4, 0, 3, 1, 1, 3, 2, 0, 1, 1, 2, 1, 1, 0, 1, 0, 2, 0, 1, 1)

Se calculan las frecuencias observadas y esperadas bajo la hipótesis nula (se agrupan los datos mayores o iguales que 5 para que las frecuencias no sean demasiado bajas y la distribución \( \chi^2 \) aproxime adecuadamente la distribución del estadístico del test)

lambda <- mean(goles)  # Estimación del parametro de la distribución de Poisson
obs <- table(goles)  # Frecuencias observadas
prob <- dpois(0:8, lambda)

obs <- c(obs[1:5], sum(obs[6:9]))
prob <- c(dpois(0:4, lambda), 1 - sum(dpois(0:4, lambda)))  # Probabilidades esperadas bajo H0 estimadas

Representación gráfica y tabla de las frecuencias observadas y esperadas bajo el modelo de Poisson:

matriz <- rbind(length(goles) * prob, obs)
colnames(matriz) <- seq(0, 5)
rownames(matriz) <- c("Poisson", "Frecuencias Obs.")
barplot(matriz, beside = TRUE, names.arg = c(0:5), legend.text = TRUE, 
    col = c("blue", "red"))
title("Goles por partido y equipo")

plot of chunk unnamed-chunk-3

round(print(matriz), 1)
##                      0     1     2     3    4      5
## Poisson          192.9 264.5 181.3 82.87 28.4  9.987
## Frecuencias Obs. 216.0 252.0 158.0 88.00 32.0 14.000
##                      0     1     2    3    4  5
## Poisson          192.9 264.5 181.3 82.9 28.4 10
## Frecuencias Obs. 216.0 252.0 158.0 88.0 32.0 14

Se calcula el p-valor del contraste teniendo en cuenta que se pierde un grado de libertad por haber estimado el parámetro de la distribución de Poisson:

T = chisq.test(obs, p = prob)$statistic  # Calcula el estadistico
pvalor = 1 - pchisq(T, 4)  # Calcula el p-valor
pvalor
## X-squared 
##     0.068

Al nivel de significación habitual \( \alpha = 0.05 \) no se rechaza la hipótesis nula (es decir, el modelo de Poisson es aceptable) aunque el p valor está muy próximo al nivel de significación.

Todos los datos, menos los partidos del R. Madrid y Barcelona

Dada la gran diferencia que hubo la temporada 2011-12 entre Real Madrid y Barcelona y el resto de equipos, puede ser de interés repetir los cálculos excluyendo los datos correspondientes a estos dos equipos:

# Lee los datos (Fuente: http://www.lfp.es/Temporada/TablaResultados.aspx)
goles.sinByRM <- c(0, 2, 3, 0, 2, 0, 2, 1, 4, 1, 0, 3, 2, 0, 2, 3, 
    3, 0, 0, 0, 4, 0, 3, 0, 1, 0, 2, 2, 1, 1, 1, 2, 3, 1, 1, 2, 1, 0, 3, 0, 
    3, 0, 3, 2, 1, 1, 1, 2, 2, 1, 3, 0, 2, 1, 3, 0, 2, 1, 2, 1, 2, 0, 1, 0, 
    1, 2, 0, 1, 2, 3, 1, 2, 0, 0, 3, 0, 1, 1, 3, 0, 0, 0, 4, 0, 1, 1, 3, 1, 
    1, 0, 3, 1, 0, 0, 3, 2, 0, 0, 1, 0, 1, 0, 1, 1, 2, 2, 2, 0, 3, 0, 4, 1, 
    0, 2, 4, 1, 1, 3, 3, 0, 0, 1, 3, 0, 0, 4, 1, 1, 1, 0, 2, 0, 2, 4, 1, 0, 
    4, 1, 0, 1, 0, 4, 0, 0, 3, 1, 4, 1, 1, 0, 0, 0, 2, 2, 2, 3, 0, 0, 2, 1, 
    2, 1, 2, 0, 1, 2, 1, 2, 2, 2, 2, 0, 1, 2, 2, 1, 2, 0, 2, 1, 3, 1, 1, 2, 
    1, 0, 1, 1, 3, 1, 0, 0, 2, 1, 1, 2, 1, 4, 1, 0, 0, 1, 1, 2, 0, 3, 1, 1, 
    0, 1, 2, 2, 3, 1, 1, 0, 0, 0, 2, 0, 3, 0, 4, 1, 2, 0, 1, 2, 1, 2, 1, 2, 
    3, 1, 1, 3, 2, 3, 0, 1, 2, 1, 0, 0, 2, 2, 1, 0, 0, 1, 3, 0, 3, 0, 2, 1, 
    2, 0, 1, 1, 2, 1, 0, 0, 3, 3, 0, 2, 0, 2, 1, 0, 2, 2, 2, 1, 1, 0, 3, 1, 
    3, 0, 2, 1, 1, 0, 2, 0, 1, 2, 1, 2, 1, 0, 4, 1, 4, 0, 2, 3, 1, 0, 2, 2, 
    0, 1, 3, 4, 1, 0, 2, 0, 2, 0, 3, 0, 2, 1, 2, 0, 0, 0, 0, 1, 0, 1, 0, 4, 
    2, 0, 1, 0, 2, 2, 4, 1, 1, 2, 0, 0, 2, 1, 1, 2, 4, 1, 0, 1, 0, 0, 1, 1, 
    1, 2, 1, 0, 0, 0, 2, 0, 1, 1, 2, 1, 2, 0, 3, 2, 1, 0, 1, 1, 2, 2, 1, 0, 
    2, 2, 1, 0, 2, 0, 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 2, 0, 2, 1, 1, 3, 0, 0, 
    2, 0, 1, 0, 0, 2, 1, 1, 2, 4, 2, 0, 1, 0, 1, 1, 1, 3, 1, 1, 0, 2, 3, 0, 
    1, 0, 1, 0, 1, 0, 2, 1, 2, 1, 2, 3, 2, 0, 1, 2, 1, 0, 0, 1, 2, 1, 1, 3, 
    2, 1, 0, 0, 1, 0, 3, 5, 1, 0, 1, 0, 3, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 0, 
    4, 0, 0, 3, 3, 1, 4, 3, 1, 0, 1, 3, 1, 0, 4, 1, 0, 0, 0, 0, 1, 2, 1, 2, 
    1, 1, 3, 0, 3, 1, 3, 1, 1, 3, 2, 0, 3, 2, 2, 2, 1, 3, 3, 2, 2, 3, 1, 1, 
    0, 1, 1, 1, 1, 1, 3, 2, 3, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0, 1, 0, 3, 0, 0, 
    1, 1, 2, 1, 3, 3, 2, 0, 2, 0, 0, 0, 4, 3, 2, 0, 2, 1, 1, 2, 1, 0, 0, 0, 
    3, 0, 1, 1, 0, 1, 2, 1, 5, 0, 2, 0, 4, 1, 4, 2, 2, 1, 1, 0, 0, 1, 1, 1, 
    1, 0, 4, 0, 3, 1, 2, 0, 1, 1, 2, 1, 1, 0, 1, 0, 2, 0, 1, 1)
goles <- goles.sinByRM

Se calculan las frecuencias observadas y esperadas (se agrupan los datos mayores o iguales que 4 para que las frecuencias no sean demasiado bajas y la aproximación asintótica de la distribución \( \chi^2 \) sea más apropiada)

lambda <- mean(goles)  # Estimación del parametro de la distribución de Poisson
obs <- table(goles)  # Frecuencias observadas
prob <- dpois(0:5, lambda)

obs <- c(obs[1:4], sum(obs[5:6]))
prob <- c(dpois(0:3, lambda), 1 - sum(dpois(0:3, lambda)))  # Probabilidades esperadas bajo H0 estimadas

Representación gráfica de las frecuencias esperadas y observadas:

matriz <- rbind(length(goles) * prob, obs)
colnames(matriz) <- seq(0, 4)
rownames(matriz) <- c("Poisson", "Frecuencias Obs.")
barplot(matriz, beside = TRUE, names.arg = c(0:4), legend.text = TRUE, 
    col = c("blue", "red"))
title("Goles por partido y equipo")

plot of chunk unnamed-chunk-7

round(print(matriz), 1)
##                      0     1     2     3     4
## Poisson          166.1 216.6 141.2 61.39 26.61
## Frecuencias Obs. 174.0 204.0 138.0 68.00 28.00
##                      0     1     2    3    4
## Poisson          166.1 216.6 141.2 61.4 26.6
## Frecuencias Obs. 174.0 204.0 138.0 68.0 28.0

Se calcula el p-valor del contraste teniendo en cuenta que se pierde un grado de libertad por haber estimado el parámetro de la distribución de Poisson:

T = chisq.test(obs, p = prob)$statistic  # Calcula el estadistico
pvalor = 1 - pchisq(T, 3)  # Calcula el p-valor
pvalor
## X-squared 
##    0.5792

En este caso el p-valor es mucho mayor que en el caso en que se toman en cuenta todos los equipos.