¿Victoria o diferencia de puntos? ¿lm o glm?

Supongamos que queremos construir un modelo para predecir quién ganará un determinado partido de baloncesto basándonos en datos diversos. Y en un histórico, por supuesto.

Podemos utilizar una regresión logística así:

set.seed(1234)
 
my.coefs <- -2:2
n <- 200
train.n <- floor(2*n/3)
 
test.error.glm <- function(){
  X <- matrix(rnorm(n*5), n, 5)
  Y <- (0.2 + X %*% my.coefs + rnorm(n)) > 0
 
  train <- sample(1:n, train.n)
 
  X <- as.data.frame(X)
  X$Y <- Y
 
  mod.glm <- glm(Y ~ ., data = X[train,], family = binomial)
 
  glm.pred <- predict(mod.glm, X[-train,], type = "response")
 
  error <- length(glm.pred) - sum(diag(table(glm.pred > 0.5, Y[-train,])))
}
 
errores.glm <- replicate(1000, test.error.glm())

El código anterior hace lo siguiente:

  • Crea las variables aleatorias X (unos predictores) e Y (el resultado de los partidos).
  • Ajusta un modelo logístico a un subconjunto de los datos.
  • Predice sobre el complementario de dichos datos, el conjunto de prueba.
  • Mide el error cometido.
  • Itera el proceso anterior y guarda los errores de clasificación cometidos.

Nótese que la variable objetivo es binaria por construcción.

Alternativamente podemos utilizar el modelo lineal para estimar una variable alternativa (y conocida): la diferencia de puntos entre los equipos. El código es similar al anterior:

test.error.lm <- function(){
  X <- matrix(rnorm(n*5), n, 5)
  Y <- 0.2 + X %*% my.coefs + rnorm(n)
 
  train <- sample(1:n, train.n)
 
  X <- as.data.frame(X)
  X$Y <- Y
 
  mod.lm <- lm(Y ~ ., data = X[train,])
 
  lm.pred <- predict(mod.lm, X[-train,])
 
  error <- length(lm.pred) - sum(diag(table(lm.pred > 0, Y[-train,] > 0)))
}
 
errores.lm <- replicate(1000, test.error.lm())

La única diferencia reside en que se estima primero la diferencia en los marcadores y luego se mira a ver si es positiva o negativa para determinar el ganador. Es decir, se binariza después de la predicción.

Y ahora el ejercicio:

  • Comprarar los errores cometidos en uno y otro caso.
  • Después, solo después, leer esto.
  • ¡Dejar un comentario explicando los resultados obtenidos!

5 comentarios sobre “¿Victoria o diferencia de puntos? ¿lm o glm?

  1. José Luis 4 marzo, 2014 10:35

    Parece más natural modelar la diferencia de puntos, de hecho, en tu simulación tanto la media como la varianza de los errores es menor en el lm .

    Pero también es cierto, que muchas veces sólo se tiene el dato binario (éxito, fracaso) y hay que tirar por glm u similar..
    En el post que enlazas ponen el ejemplo de estimar el ganador en unas elecciones, y de hecho se suele hacer así, y más en España, dónde hay reparto de diputados por circunscripciones. Creo que en las elecciones presidenciales en USA, el ganador en un estado se lleva todos los votos electorales de ese estado, ¿no? y por tanto un glm para predeicir el ganador sería más equiparable a un lm para predecir diferencia de votos.

  2. Carlos J. Gil Bellosta 4 marzo, 2014 10:39

    La cuestión es que al binarizar descartas información (¿mucha?) y que eso debería manifestarse en el modelo de alguna forma. ¿Debería predecir peor dado que tiene menos información? ¿No confunde la binarización una «paliza» y una victoria «por los pelos»?

  3. José Luis 4 marzo, 2014 13:18

    Cuando hablas de binarización te refieres al glm, no? Si que sorprende que el glm no sea tan malo comparado con la estimación por lm. Es como si no importara tanto cuando se «binariza», y que al binarizar al final también se está descartando información. Curioso

  4. sergio 4 marzo, 2014 13:48

    Supongo que también ayuda que el modelo «real» de la diferencia de puntos sea lineal Y <- 0.2 + X %*% my.coefs + rnorm(n). En el caso de no serlo, ¿Podría ser mejor un modelo binario al que no le importan los detalles?

  5. Carlos J. Gil Bellosta 4 marzo, 2014 13:59

    La idea no es esa –si los datos son lineales o no–. Si no lo fuesen, la comparación sería entre un modelo que se ajustase a esos datos subyacentes (posiblemente no lineales) sin binarizar y un modelo que binarizara primero. El asunto es la cantidad de información que uno mete en el modelo.

Los comentarios están desabilitados.