Simulación de datos para regresión logística con una variable categórica

9

Estaba tratando de crear algunos datos de prueba para la regresión logística y encontré esta publicación ¿Cómo simular datos artificiales para la regresión logística?

Es una buena respuesta, pero solo crea variables continuas. ¿Qué pasa con una variable categórica x3 con 5 niveles (ABCDE) asociada con y para el mismo ejemplo que en el enlace?

usuario1301295
fuente
sample (x = c (1, 2, 3), size = 1, prob = rep (1/3, 3)) genera uno de "1", "2" o "3" con la misma probabilidad.
ocram
gracias por tu comentario, pero ¿cómo asocio las probabilidades aquí con la y de la publicación que mencioné? Copio algún código de esa publicación 'código'> set.seed (666)> x1 = rnorm (1000) # algunas variables continuas> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # combinación lineal con un sesgo> pr = 1 / (1 + exp (-z)) # pasar a través de una función inv-logit> y = rbinom (1000,1, pr) # variable de respuesta bernoulli 'código'
usuario1301295

Respuestas:

13

El modelo

Sea si uno tiene la categoría "B", y x B = 0 en caso contrario. Definir x C , x D , y x E similary. Si x B = x C = x D = x E = 0 , entonces tenemos la categoría "A" (es decir, "A" es el nivel de referencia). Su modelo se puede escribir comoXsi=1Xsi=0 0XCXreXmiXsi=XC=Xre=Xmi=0 0

con β 0 una intersección.

logit(π)=β0 0+βsiXsi+βCXC+βreXre+βmiXmi
β0 0

Generación de datos en R

(una)

x <- sample(x=c("A","B", "C", "D", "E"), 
              size=n, replace=TRUE, prob=rep(1/5, 5))

El xvector tiene ncomponentes (uno para cada individuo). Cada componente es "A", "B", "C", "D" o "E". Cada uno de "A", "B", "C", "D" y "E" es igualmente probable.

(si)

library(dummies)
dummy(x)

dummy(x)nXUNAXsiXCXreXmi

linpred <- cbind(1, dummy(x)[, -1]) %*% c(beta0, betaB, betaC, betaD, betaE)

(C)

Las probabilidades de éxito se desprenden del modelo logístico:

pi <- exp(linpred) / (1 + exp(linpred))

(re)

yoCompartimiento(norte,pag)norte=1pag= pi[i]

y <- rbinom(n=n, size=1, prob=pi)

Algunas simulaciones rápidas para verificar esto están bien

> #------ parameters ------
> n <- 1000 
> beta0 <- 0.07
> betaB <- 0.1
> betaC <- -0.15
> betaD <- -0.03
> betaE <- 0.9
> #------------------------
> 
> #------ initialisation ------
> beta0Hat <- rep(NA, 1000)
> betaBHat <- rep(NA, 1000)
> betaCHat <- rep(NA, 1000)
> betaDHat <- rep(NA, 1000)
> betaEHat <- rep(NA, 1000)
> #----------------------------
> 
> #------ simulations ------
> for(i in 1:1000)
+ {
+   #data generation
+   x <- sample(x=c("A","B", "C", "D", "E"), 
+               size=n, replace=TRUE, prob=rep(1/5, 5))  #(a)
+   linpred <- cbind(1, dummy(x)[, -1]) %*% c(beta0, betaB, betaC, betaD, betaE)  #(b)
+   pi <- exp(linpred) / (1 + exp(linpred))  #(c)
+   y <- rbinom(n=n, size=1, prob=pi)  #(d)
+   data <- data.frame(x=x, y=y)
+   
+   #fit the logistic model
+   mod <- glm(y ~ x, family="binomial", data=data)
+   
+   #save the estimates
+   beta0Hat[i] <- mod$coef[1]
+   betaBHat[i] <- mod$coef[2]
+   betaCHat[i] <- mod$coef[3]
+   betaDHat[i] <- mod$coef[4]
+   betaEHat[i] <- mod$coef[5]
+ }
> #-------------------------
> 
> #------ results ------
> round(c(beta0=mean(beta0Hat), 
+         betaB=mean(betaBHat), 
+         betaC=mean(betaCHat), 
+         betaD=mean(betaDHat), 
+         betaE=mean(betaEHat)), 3)
 beta0  betaB  betaC  betaD  betaE 
 0.066  0.100 -0.152 -0.026  0.908 
> #---------------------
ocram
fuente
1
@ocram - ¿podría dar alguna intuición para buenas elecciones de parámetros y elección de probabilidades de componentes (parte a)? ¿Cómo afectarían los cambios a estos el ejercicio?
d_a_c321
@dchandler: los parámetros y las probabilidades se eligieron arbitrariamente, en aras de la ilustración.
ocram
2
@ocram - entendido. Sin embargo, estoy buscando intuición sobre cuáles serían buenos coeficientes para poder ejecutar simulaciones más extensas. Por ejemplo, si quisiera simular regresiones de lazo, me interesaría agregar variables sin sentido (con coeficientes cero) y ver cómo el número de variables sin sentido y la magnitud de los coeficientes distintos de cero en variables significativas afectan la simulación.
d_a_c321