Simulação de dados para regressão logística com uma variável categórica

9

Eu estava tentando criar alguns dados de teste para regressão logística e encontrei este post Como simular dados artificiais para regressão logística?

É uma boa resposta, mas cria apenas variáveis ​​contínuas. Que tal uma variável categórica x3 com 5 níveis (ABCDE) associada a y para o mesmo exemplo que no link?

user1301295
fonte
A amostra (x = c (1, 2, 3), tamanho = 1, prob = rep (1/3, 3)) gera um de "1", "2" ou "3" com igual probabilidade.
Ocram
obrigado pelo seu comentário, mas como associo as probabilidades aqui ao y da publicação que mencionei? Eu copio algum código dessa postagem 'code'> set.seed (666)> x1 = rnorm (1000) # algumas variáveis ​​contínuas> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # combinação linear com um viés> pr = 1 / (1 + exp (-z)) # passa por uma função inv-logit> y = rbinom (1000,1, pr) # variável de resposta bernoulli 'code'
user1301295

Respostas:

13

O modelo

Deixe se alguém tiver a categoria "B" e caso contrário. Defina , e . Se , temos a categoria "A" (ou seja, "A" é o nível de referência). Seu modelo pode ser escrito comoxB=1xB=0xCxDxExB=xC=xD=xE=0

logit(π)=β0+βBxB+βCxC+βDxD+βExE
com uma interceptação.β0

Geração de dados em R

(uma)

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

O xvetor possui ncomponentes (um para cada indivíduo). Cada componente é "A", "B", "C", "D" ou "E". Cada um de "A", "B", "C", "D" e "E" é igualmente provável.

b)

library(dummies)
dummy(x)

dummy(x)é uma matriz com nlinhas (uma para cada indivíduo) e 5 colunas correspondentes a , , , e . Os preditores lineares (um para cada indivíduo) podem ser escritos comoxAxBxCxDxE

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

c)

As probabilidades de sucesso seguem o modelo logístico:

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

d)

Agora podemos gerar a variável de resposta binária. O th resposta vem de uma variável aleatória binomial com e :iBin(n,p)n=1p= pi[i]

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

Algumas simulações rápidas para verificar isso estão OK

> #------ 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
fonte
11
@ram - poderia dar alguma intuição para boas escolhas de parâmetros e probabilidades de componentes (parte a)? Como as mudanças nelas afetariam o exercício?
d_a_c321 12/08
@dchandler: Os parâmetros e probabilidades foram escolhidos arbitrariamente, para fins de ilustração.
Ocram 12/08/2014
2
@ram - compreendido. No entanto, estou procurando intuição sobre o que seriam bons coeficientes para que eu pudesse executar simulações mais extensas. Por exemplo, se eu quiser simular regressões de laço, posso estar interessado em adicionar variáveis ​​sem sentido (com coeficientes zero / zero) e ver como o número de variáveis ​​sem sentido e a magnitude dos coeficientes diferentes de zero em variáveis ​​significativas afetam a simulação.
d_a_c321