การจำลองข้อมูลสำหรับการถดถอยโลจิสติกด้วยตัวแปรเด็ดขาด


9

ฉันพยายามสร้างข้อมูลทดสอบสำหรับการถดถอยโลจิสติกส์และพบบทความนี้จะจำลองข้อมูลปลอมสำหรับการถดถอยโลจิสติกอย่างไร

มันเป็นคำตอบที่ดี แต่มันสร้างตัวแปรต่อเนื่องเท่านั้น สิ่งที่เกี่ยวกับตัวแปรเด็ดขาด x3 ที่มี 5 ระดับ (ABCDE) ที่เกี่ยวข้องกับ y สำหรับตัวอย่างเช่นเดียวกับในลิงค์?


ตัวอย่าง (x = c (1, 2, 3), ขนาด = 1, prob = ตัวแทน (1/3, 3)) สร้างหนึ่งใน "1", "2" หรือ "3" ที่มีความน่าจะเป็นเท่ากัน
ocram

ขอบคุณสำหรับความคิดเห็นของคุณ แต่ฉันจะเชื่อมโยงความน่าจะเป็นที่นี่กับ y ของโพสต์ที่ฉันพูดถึงได้อย่างไร ฉันคัดลอกโค้ดบางส่วนจากโพสต์ 'code'> set.seed (666)> x1 = rnorm (1000) # ตัวแปรต่อเนื่องบางอย่าง> x2 = rnorm (1000)> z = 1 + 2 * x1 + 3 * x2 # ชุดค่าผสมเชิงเส้น ด้วย bias> pr = 1 / (1 + exp (-z)) # ผ่านฟังก์ชัน inv-logit> y = rbinom (1,000,1, pr) # bernoulli การตอบสนองตัวแปร 'code'
1301295

คำตอบ:


13

นางแบบ

ให้หากมีหมวดหมู่ "B" และอย่างอื่น กำหนด ,และ similary หากเรามีหมวดหมู่ "A" (เช่น "A" เป็นระดับอ้างอิง) โมเดลของคุณสามารถเขียนเป็นxB=1xB=0xCxDxExB=xC=xD=xE=0

logit(π)=β0+βBxB+βCxC+βDxD+βExE
พร้อมกับการสกัดกั้นβ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แถว (หนึ่งรายการสำหรับแต่ละรายการ) และ 5 คอลัมน์ที่สอดคล้องกับxA, xB, xC, xDและ xE. ตัวทำนายเชิงเส้น (หนึ่งสำหรับแต่ละบุคคล) นั้นสามารถเขียนเป็น

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

(ค)

ความน่าจะเป็นของความสำเร็จดังต่อไปนี้จากโมเดลโลจิสติก:

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

(ง)

ตอนนี้เราสามารถสร้างตัวแปรตอบกลับแบบไบนารี iการตอบสนองที่ th มาจากตัวแปรสุ่มแบบทวินาม Bin(n,p) กับ n=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 - ให้ปรีชาสำหรับการเลือกพารามิเตอร์ที่ดีและการเลือกความน่าจะเป็นขององค์ประกอบ (ส่วนหนึ่ง) การเปลี่ยนแปลงเหล่านี้มีผลต่อการฝึกอย่างไร
d_a_c321

@dchandler: พารามิเตอร์และความน่าจะเป็นได้รับการคัดเลือกโดยพลการเพื่อภาพประกอบ
ocram

2
@ocram - เข้าใจ อย่างไรก็ตามฉันกำลังมองหาสัญชาตญาณในสิ่งที่จะเป็นค่าสัมประสิทธิ์ที่ดีเพื่อให้ฉันสามารถเรียกใช้การจำลองที่กว้างขวางมากขึ้น ตัวอย่างเช่นถ้าฉันต้องการจำลองการถดถอยแบบ Lasso ฉันอาจสนใจที่จะเพิ่มตัวแปรที่ไม่มีความหมาย (สัมประสิทธิ์ w / ศูนย์) และดูว่า # ของตัวแปรไร้ความหมายและขนาดของสัมประสิทธิ์ที่ไม่เป็นศูนย์ต่อตัวแปรที่มีความหมายมีผลต่อการจำลองอย่างไร
d_a_c321
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.