¿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!