Mô phỏng dữ liệu cho hồi quy logistic với một biến phân loại


9

Tôi đã cố gắng tạo một số dữ liệu thử nghiệm cho hồi quy logistic và tôi đã tìm thấy bài đăng này Làm thế nào để mô phỏng dữ liệu nhân tạo cho hồi quy logistic?

Đó là một câu trả lời hay nhưng nó chỉ tạo ra các biến liên tục. Điều gì về một biến phân loại x3 với 5 cấp độ (ABCDE) được liên kết với y cho ví dụ tương tự như trong liên kết?


mẫu (x = c (1, 2, 3), size = 1, prob = rep (1/3, 3)) tạo ra một trong số "1", "2" hoặc "3" với xác suất bằng nhau.
ocram

cảm ơn bình luận của bạn, nhưng làm thế nào để tôi liên kết các xác suất ở đây với y của bài đăng tôi đã đề cập? Tôi sao chép một số mã từ bài đăng đó 'code'> set.seed (666)> x1 = rnorm (1000) # một số biến liên tục> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # kết hợp tuyến tính với độ lệch> pr = 1 / (1 + exp (-z)) # chuyển qua hàm inv-logit> y = rbinom (1000,1, pr) # bernoulli biến phản ứng 'code'
user1301295

Câu trả lời:


13

Ngươi mâu

Đặt nếu ai đó có loại "B" và x B = 0 nếu không. Xác định x C , x Dx E similary. Nếu x B = x C = x D = x E = 0 , thì chúng ta có loại "A" (nghĩa là "A" là mức tham chiếu). Mô hình của bạn sau đó có thể được viết làxB= =1xB= =0xCxDxExB= =xC= =xD= =xE= =0

với β 0 một đánh chặn.

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

Tạo dữ liệu trong R

(a)

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

Các xvector có ncác thành phần (một cho mỗi cá nhân). Mỗi thành phần là "A", "B", "C", "D" hoặc "E". Mỗi "A", "B", "C", "D" và "E" đều có khả năng như nhau.

(b)

library(dummies)
dummy(x)

dummy(x)nxMộtxBxCxDxE

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

(c)

Xác suất thành công theo mô hình logistic:

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

(d)

TôiThùng rác(n,p)n= =1p= = pi[i]

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

Một số mô phỏng nhanh để kiểm tra điều này là 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 - có thể đưa ra một số trực giác cho các lựa chọn tốt về tham số và lựa chọn xác suất của các thành phần (phần a)? Làm thế nào để thay đổi những điều này ảnh hưởng đến bài tập?
d_a_c321

@dframler: Các tham số và xác suất được chọn tùy ý, vì mục đích minh họa.
ocram

2
@ocram - đã hiểu. Tuy nhiên, tôi đang tìm kiếm trực giác về những gì sẽ là hệ số tốt để tôi có thể chạy các mô phỏng mở rộng hơn. Ví dụ, nếu tôi muốn mô phỏng hồi quy lasso, tôi có thể quan tâm đến việc thêm các biến vô nghĩa (hệ số w / zero) và xem # các biến vô nghĩa và độ lớn của các hệ số khác không trên các biến có ý nghĩa ảnh hưởng đến mô phỏng.
d_a_c321
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.