Моделирование данных для логистической регрессии с категориальной переменной

9

Я пытался создать некоторые тестовые данные для логистической регрессии, и я нашел этот пост Как имитировать искусственные данные для логистической регрессии?

Это хороший ответ, но он создает только непрерывные переменные. Как насчет категориальной переменной x3 с 5 уровнями (ABCDE), связанной с y для того же примера, что и в ссылке?

user1301295
источник
sample (x = c (1, 2, 3), size = 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) # переменная ответа
бернулли

Ответы:

13

Модель

Пусть если есть категория «B», и x B = 0 в противном случае. Определите x C , x D и x E аналогично. Если x B = x C = x D = x E = 0 , то у нас есть категория «A» (т. Е. «A» - контрольный уровень). Ваша модель может быть записана какИксВзнак равно1ИксВзнак равно0ИксСИксDИксЕИксВзнак равноИксСзнак равноИксDзнак равноИксЕзнак равно0

с β 0 перехват.

логит(π)знак равноβ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» одинаково вероятна.

(Б)

library(dummies)
dummy(x)

dummy(x)nИксAИксВИксСИксDИксЕ

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

(С)

Вероятности успеха вытекают из логистической модели:

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

(Д)

ямусорное ведро(N,п)Nзнак равно1пзнак равно 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 
> #---------------------
ocram
источник
1
@ocram - могли бы дать некоторую интуицию для хорошего выбора параметров и выбора вероятностей компонентов (часть а)? Как изменения в них повлияют на упражнение?
d_a_c321
@dchandler: параметры и вероятности были выбраны произвольно, для иллюстрации.
Октябрь
2
@окрам - понял. Тем не менее, я ищу интуицию о том, что было бы хорошими коэффициентами, чтобы я мог проводить более обширные моделирования. Например, если я хотел симулировать регрессии Лассо, меня может заинтересовать добавление бессмысленных переменных (с нулевыми коэффициентами) и просмотр того, как количество бессмысленных переменных и величина ненулевых коэффициентов для значимых переменных влияют на симуляцию.
d_a_c321