Моделювання даних для логістичної регресії з категоричною змінною


9

Я намагався створити деякі тестові дані для логістичної регресії, і я знайшов цей пост. Як імітувати штучні дані для логістичної регресії?

Це хороша відповідь, але вона створює лише постійні змінні. Що з категоричною змінною x3 з 5 рівнями (ABCDE), пов'язаними з y, для того ж прикладу, що і у посиланні?


зразок (x = c (1, 2, 3), розмір = 1, prob = rep (1/3, 3)) генерує один із "1", "2" або "3" з однаковою ймовірністю.
окрам

дякую за ваш коментар, але як я пов’язую ймовірності тут з y посадою, яку я згадав? Я копіюю якийсь код з цієї посади 'code'> set.seed (666)> x1 = rnorm (1000) # деякі безперервні змінні> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # лінійна комбінація з ухилом> pr = 1 / (1 + exp (-z)) # пройти через функцію inv-logit> y = rbinom (1000,1, pr) # змінна відповіді bernoulli 'code'
user1301295

Відповіді:


13

Модель

Дозволяє хБ=1 якщо у вас є категорія "B", і хБ=0інакше. ВизначтехС, хD, і хЕподібність. ЯкщохБ=хС=хD=хЕ=0, тоді у нас є категорія "А" (тобто "А" - еталонний рівень). Потім вашу модель можна записати як

logit(π)=β0+βБхБ+βСхС+βDхD+βЕхЕ
з β0 перехоплення.

Генерація даних в R

(а)

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

xВектор має nкомпоненти (один для кожної людини). Кожен компонент або "A", "B", "C", "D", або "E". Кожен з "A", "B", "C", "D" і "E" однаково вірогідний.

(b)

library(dummies)
dummy(x)

dummy(x)являє собою матрицю з nрядками (по одному для кожної окремої людини) та 5 стовпцями, що відповідаютьхА, хБ, хС, хD, і хЕ. Лінійні предиктори (по одному для кожної людини) можуть бути записані як

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

(c)

Імовірність успіху випливає з логістичної моделі:

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

(г)

Тепер ми можемо генерувати змінну двійкової відповіді. Thei-я відповідь надходить від біноміальної випадкової величини Урни(н,p) з н=1 і p= pi[i]:

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

Деякі швидкі симуляції, щоб перевірити це, все в порядку

> #------ 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 - міг би дати деяку інтуїцію для гарного вибору параметрів та вибору ймовірностей компонентів (частина a)? Як зміни на них вплинуть на вправу?
d_a_c321

@dchandler: Параметри та ймовірності були обрані довільно, для ілюстрації.
окрам

2
@ocram - зрозумів. Однак я шукаю інтуїцію щодо того, які були б хороші коефіцієнти, щоб я міг запускати більш масштабні симуляції. Наприклад, якщо я хотів би імітувати регресії ласо, мені може бути цікаво додати безглузді змінні (w / нульові коефіцієнти) та побачити, як # безглузді змінні та величина ненульових коефіцієнтів на змістовні змінні впливають на моделювання.
d_a_c321
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.