Simulieren von Daten für die logistische Regression mit einer kategorialen Variablen

9

Ich habe versucht, einige Testdaten für die logistische Regression zu erstellen, und diesen Beitrag gefunden. Wie simuliere ich künstliche Daten für die logistische Regression?

Es ist eine schöne Antwort, aber es werden nur kontinuierliche Variablen erstellt. Was ist mit einer kategorialen Variablen x3 mit 5 Ebenen (ABCDE), die y für dasselbe Beispiel wie im Link zugeordnet sind?

user1301295
quelle
Probe (x = c (1, 2, 3), Größe = 1, prob = rep (1/3, 3)) erzeugt mit gleicher Wahrscheinlichkeit eine von "1", "2" oder "3".
Ocram
Vielen Dank für Ihren Kommentar, aber wie verbinde ich die Wahrscheinlichkeiten hier mit dem y des Beitrags, den ich erwähnt habe? Ich kopiere einen Code aus diesem Beitrag 'code'> set.seed (666)> x1 = rnorm (1000) # einige stetige Variablen> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # lineare Kombination mit einem Bias> pr = 1 / (1 + exp (-z)) # eine Inv-Logit-Funktion durchlaufen> y = rbinom (1000,1, pr) # bernoulli Antwortvariable 'code'
user1301295

Antworten:

13

Das Model

Sei wenn man die Kategorie "B" hat, und sonst x B = 0 . Definieren Sie x C , x D und x E ähnlich. Wenn x B = x C = x D = x E = 0 ist , haben wir die Kategorie "A" (dh "A" ist der Referenzpegel). Ihr Modell kann dann als geschrieben werdenxB.=1xB.=0xC.xD.xE.xB.=xC.=xD.=xE.=0

mit β 0 als Achsenabschnitt.

logit(π)=β0+βB.xB.+βC.xC.+βD.xD.+βE.xE.
β0

Datengenerierung in R.

(ein)

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

Der xVektor hat nKomponenten (eine für jedes Individuum). Jede Komponente ist entweder "A", "B", "C", "D" oder "E". Jedes von "A", "B", "C", "D" und "E" ist gleich wahrscheinlich.

(b)

library(dummies)
dummy(x)

dummy(x)nxEINxB.xC.xD.xE.

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

(c)

Die Erfolgswahrscheinlichkeiten ergeben sich aus dem Logistikmodell:

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

(d)

ichBehälter(n,p)n=1p= pi[i]

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

Einige schnelle Simulationen, um dies zu überprüfen, sind in Ordnung

> #------ 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
quelle
1
@ocram - könnte eine Intuition für eine gute Auswahl von Parametern und Wahrscheinlichkeiten von Komponenten geben (Teil a)? Wie würden sich Änderungen an diesen auf die Übung auswirken?
d_a_c321
@dchandler: Die Parameter und Wahrscheinlichkeiten wurden zur Veranschaulichung willkürlich ausgewählt.
Ocram
2
@ocram - verstanden. Ich suche jedoch nach einer Intuition für gute Koeffizienten, damit ich umfangreichere Simulationen durchführen kann. Wenn ich beispielsweise Lasso-Regressionen simulieren wollte, könnte ich daran interessiert sein, bedeutungslose Variablen (mit Null-Koeffizienten) hinzuzufügen und zu sehen, wie sich die Anzahl der bedeutungslosen Variablen und die Größe der Nicht-Null-Koeffizienten für bedeutungsvolle Variablen auf die Simulation auswirken.
d_a_c321