Mensimulasikan data untuk regresi logistik dengan variabel kategori


9

Saya mencoba membuat beberapa data uji untuk regresi logistik dan saya menemukan posting ini. Bagaimana mensimulasikan data buatan untuk regresi logistik?

Ini adalah jawaban yang bagus tetapi hanya menciptakan variabel kontinu. Bagaimana dengan variabel kategori x3 dengan 5 level (ABCDE) yang dikaitkan dengan y untuk contoh yang sama seperti pada tautan?


sampel (x = c (1, 2, 3), ukuran = 1, prob = rep (1/3, 3)) menghasilkan salah satu dari "1", "2", atau "3" dengan probabilitas yang sama.
ocram

terima kasih atas komentar Anda, tetapi bagaimana saya menghubungkan probabilitas di sini dengan y dari pos yang saya sebutkan? Saya menyalin beberapa kode dari postingan itu 'code'> set.seed (666)> x1 = rnorm (1000) # beberapa variabel kontinu> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # kombinasi linear dengan bias> pr = 1 / (1 + exp (-z)) # melewati fungsi inv-logit> y = rbinom (1000,1, pr) # bernoulli response variable 'code'
user1301295

Jawaban:


13

Model

Misalkan jika seseorang memiliki kategori "B", dan x B = 0 sebaliknya. Tentukan x C , x D , dan x E similary. Jika x B = x C = x D = x E = 0xB=1xB=0xCxDxExB=xC=xD=xE=0 , maka kita memiliki kategori "A" (yaitu, "A" adalah level referensi). Model Anda kemudian dapat ditulis sebagai

dengan β 0 intersep.

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

Pembuatan data dalam R

(Sebuah)

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

The xvektor memiliki nkomponen (satu untuk setiap individu). Setiap komponen dapat berupa "A", "B", "C", "D", atau "E". Setiap "A", "B", "C", "D", dan "E" memiliki kemungkinan yang sama.

(b)

library(dummies)
dummy(x)

dummy(x)adalah matriks dengan nbaris (satu untuk setiap individu) dan 5 kolom sesuai dengan , x B , x C , x D , dan x E . Prediktor linier (satu untuk setiap individu) kemudian dapat ditulis sebagaixSEBUAHxBxCxDxE

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

(c)

Peluang keberhasilan mengikuti dari model logistik:

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

(d)

sayaTempat sampah(n,hal)n=1hal= pi[i]

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

Beberapa simulasi cepat untuk memeriksa ini 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 
> #---------------------

1
@ocram - dapat memberikan beberapa intuisi untuk pilihan parameter yang baik dan pilihan probabilitas komponen (bagian a)? Bagaimana perubahan ini mempengaruhi latihan?
d_a_c321

@dchandler: Parameter dan probabilitas dipilih secara sewenang-wenang, demi ilustrasi.
ocram

2
@ocram - dipahami. Namun, saya mencari intuisi tentang apa yang akan menjadi koefisien yang baik sehingga saya bisa menjalankan simulasi yang lebih luas. Sebagai contoh, jika saya ingin mensimulasikan regresi laso, saya mungkin tertarik untuk menambahkan variabel yang tidak bermakna (dengan koefisien nol) dan melihat bagaimana # variabel yang tidak berarti dan besarnya koefisien bukan nol pada variabel yang berarti mempengaruhi simulasi.
d_a_c321
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.