Kategorik bir değişkenle lojistik regresyon için veri simülasyonu


9

Lojistik regresyon için bazı test verileri oluşturmaya çalışıyordum ve bu yazıyı buldum Lojistik regresyon için yapay veriler nasıl simüle edilir?

Güzel bir cevap ama sadece sürekli değişkenler yaratıyor. Bağlantıdaki ile aynı örnek için y ile ilişkili 5 seviyeli (ABCDE) kategorik bir x3 değişkenine ne dersiniz?


örnek (x = c (1, 2, 3), boyut = 1, prob = rep (1/3, 3)) eşit olasılıkla "1", "2" veya "3" ten birini üretir.
ocram

Yorumunuz için teşekkürler, ancak buradaki olasılıkları bahsettiğim yazının y'si ile nasıl ilişkilendirebilirim? Bu kod 'kod' sonrası bazı kodları kopyalarım> set.seed (666)> x1 = rnorm (1000) # bazı sürekli değişkenler> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # doğrusal kombinasyon bir önyargı ile> pr = 1 / (1 + exp (-z)) # inv-logit işlevinden geçiyor> y = rbinom (1000,1, pr) # bernoulli yanıt değişkeni 'kod'
user1301295

Yanıtlar:


13

Model

Let tek "B" kategorisi vardır ve eğer aksi. , ve tanımlayın . Eğer , o zaman "A" kategorisi vardır (yani, "A" referans düzeyi). Daha sonra modeliniz şu şekilde yazılabilir:xB=1xB=0xCxDxExB=xC=xD=xE=0

logit(π)=β0+βBxB+βCxC+βDxD+βExE
ile .β0

R de veri üretimi

(A)

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

xVektörüne sahip nbileşenler (her birey için bir tane). Her bileşen "A", "B", "C", "D" veya "E" dir. "A", "B", "C", "D" ve "E" nin her biri eşit derecede olasıdır.

(B)

library(dummies)
dummy(x)

dummy(x)bir matris nsatır ve karşılık gelen 5 sütun (her bir için bir tane) , , , ve . Doğrusal öngörücüler (her birey için bir tane) daha sonra şu şekilde yazılabilir:xAxBxCxDxE

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

(C)

Başarı olasılıkları lojistik modelden gelir:

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

(D)

Şimdi ikili yanıt değişkenini üretebiliriz. inci yanıt rasgele değişken gelir ile ve :iBin(n,p)n=1p= pi[i]

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

Bunu kontrol etmek için bazı hızlı simülasyonlar sorun değil

> #------ 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 
> #---------------------

1
@ocram - parametrelerin iyi seçimleri ve bileşenlerin olasılık seçimi için biraz sezgi verebilir mi (bölüm a)? Bunlarda yapılan değişiklikler egzersizi nasıl etkiler?
d_a_c321

@dchandler: Parametreler ve olasılıklar örnekleme amacıyla keyfi olarak seçildi.
ocram

2
@ocram - anlaşıldı. Ancak, daha kapsamlı simülasyonlar yapabilmem için iyi katsayıların ne olacağına dair sezgi arıyorum. Örneğin, kement regresyonlarını simüle etmek istersem, anlamsız değişkenler (sıfır katsayılı) eklemek ve anlamsız değişkenlerin # sayısının ve sıfır olmayan katsayıların anlamlı değişkenler üzerindeki büyüklüğünün simülasyonu nasıl etkilediğini görmekle ilgilenebilirim.
d_a_c321
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.