Symulacja danych dla regresji logistycznej za pomocą zmiennej jakościowej

9

Próbowałem utworzyć dane testowe dla regresji logistycznej i znalazłem ten post Jak symulować sztuczne dane dla regresji logistycznej?

To ładna odpowiedź, ale tworzy tylko zmienne ciągłe. Co powiesz na zmienną kategorialną x3 z 5 poziomami (ABCDE) powiązanymi zy dla tego samego przykładu, co w łączu?

użytkownik1301295
źródło
próbka (x = c (1, 2, 3), rozmiar = 1, prob = rep (1/3, 3)) generuje jedno z „1”, „2” lub „3” z jednakowym prawdopodobieństwem.
ocram
dziękuję za komentarz, ale jak powiązać tu prawdopodobieństwa z y postu, o którym wspomniałem? Kopiuję trochę kodu z tego „kodu” pocztowego> set.seed (666)> x1 = rnorm (1000) # niektóre ciągłe zmienne> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # kombinacja liniowa z odchyleniem> pr = 1 / (1 + exp (-z)) # przejść przez funkcję inv-logit> y = rbinom (1000,1, pr) # bernoulli zmienna odpowiedzi 'kod'
użytkownik1301295

Odpowiedzi:

13

Model

Niech jeśli ktoś ma kategorię „B”, a przeciwnym razie. Zdefiniuj , i . Jeśli , to mamy kategorię „A” (tzn. „A” jest poziomem odniesienia). Twój model można następnie zapisać jakoxB=1xB=0xCxDxExB=xC=xD=xE=0

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

Generowanie danych w R.

(za)

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

xWektor ma nskładniki (jeden dla każdego osobnika). Każdy element to „A”, „B”, „C”, „D” lub „E”. Każde z „A”, „B”, „C”, „D” i „E” jest równie prawdopodobne.

(b)

library(dummies)
dummy(x)

dummy(x)jest macierzą z nwierszami (po jednej dla każdej osoby) i 5 kolumnami odpowiadającymi , , , i . Predyktory liniowe (jeden dla każdej osoby) można następnie zapisać jakoxAxBxCxDxE

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

(do)

Prawdopodobieństwa sukcesu wynikają z modelu logistycznego:

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

(re)

Teraz możemy wygenerować zmienną odpowiedzi binarnej. th odpowiedź pochodzi z dwustronną zmiennej losowej z , a :iBin(n,p)n=1p= pi[i]

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

Kilka szybkich symulacji, aby to sprawdzić, jest w porządku

> #------ 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
źródło
1
@ocram - czy może dać trochę intuicji dla dobrego wyboru parametrów i wyboru prawdopodobieństwa składników (część a)? Jak zmiany w nich wpłyną na ćwiczenie?
d_a_c321,
@dchandler: Parametry i prawdopodobieństwa zostały wybrane arbitralnie, dla ilustracji.
ocram
2
@ocram - zrozumiany. Jednak szukam intuicji na temat dobrych współczynników, aby móc przeprowadzić bardziej rozbudowane symulacje. Na przykład, jeśli chciałbym zasymulować regresję lasso, być może chciałbym dodać zmienne bez znaczenia (w / współczynniki zerowe) i zobaczyć, jak liczba zmiennych bez znaczenia i wielkość niezerowych współczynników znaczących zmiennych wpływa na symulację.
d_a_c321,