De nuevo volvemos a la entrada de ayer para replicar el código SAS utilizado en R. Se trata de realizar tres modelos de regresión logística con R para estudiar cómo influyen en los parámetros el uso de un conjunto de datos con sobremuestreo o el uso de un conjunto de datos donde asignamos pesos a las observaciones. El programa es sencillo pero tiene un uso interesante de la librería sampling. Aquí tenéis el código:

# Regresión logística perfecta
num <- 100000
x <- rnorm(num)
y <- rnorm(num)
p <- 1 / (1 + exp(-(-5.5 + 2.55 * x - 1.2 * y)))
z <- rbinom(num, 1, p)

datos_ini <- data.frame(x, y, z)
table(datos_ini$z)

# Modelo base
modelo.1 <- glm(z ~ x + y, data = datos_ini, family = binomial)
summary(modelo.1)

El mismo modelo que planteamos con SAS en la anterior entrada nos permite realizar una regresión logística perfecta. Veamos cómo se plantea la realización del sobremuestreo con R:

# Realizamos el sobremuestreo con la librería sampling
library(sampling)

selec <- strata(datos_ini,
                stratanames = c("z"),
                size = c(5000, 5000), 
                method = "srswr")

table(selec$z)

# Modelo con sobremuestreo
modelo.2 <- glm(z ~ x + y, data = datos_ini[selec$ID_unit, ], 
                family = binomial)
summary(modelo.2)

Habrá que volver sobre el tema del muestreo para analizar las posibilidades de la librería sampling; en este caso, realizamos muestreo estratificado con la función strata y muestreo aleatorio con reemplazamiento. Replicamos el proceso asignando pesos:

# Realizamos el proceso asignando pesos
pct <- sum(datos_ini$z) / num
datos_ini$peso <- ifelse(datos_ini$z == 1, 0.5 / pct, 0.5 / (1 - pct))

# Comprobamos la suma de pesos por grupo
tapply(datos_ini$peso, datos_ini$z, sum)

# Modelo con pesos
modelo.3 <- glm(z ~ x + y, data = datos_ini, 
                family = binomial, weights = peso)
summary(modelo.3)

Y obtenemos los mismos resultados (qué sorpresa). Saludos.