วิธีทำโมเดลเชิงเส้นทั่วไปที่มีตัวแปรตามหลายตัวใน R?


17

ฉันมีตัวแปรตามหกตัว (นับข้อมูล) และตัวแปรอิสระหลายตัวฉันเห็นว่าใน MMR สคริปต์จะเป็นดังนี้:

my.model <- lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn)

แต่เนื่องจากข้อมูลของฉันมีการนับฉันต้องการใช้โมเดลเชิงเส้นแบบทั่วไปและฉันลองทำสิ่งนี้:

my.model <- glm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn, family="poisson")

และปรากฏข้อความข้อผิดพลาดนี้:

Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  : 
  (subscript) logical subscript too long`

ใครช่วยอธิบายฉันข้อความผิดพลาดนี้หรือวิธีการแก้ปัญหาของฉันได้อย่างไร


ติดตามคำตอบของ @Giorgio Spedicato: เราจะสมมติว่าคุณต้องการชุดของแบบจำลองที่ปฏิบัติต่อตัวแปรตามแต่ละตัวแยกกันเช่นเดียวกับlmเมื่อคุณให้เมทริกซ์?
conjugateprior

ฉันคิดถึงส่วนที่สองของการวิเคราะห์ ใน MMR (Multivariate Multiple Regression) หลังจาก: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) ฉันต้อง
Juan

ฉันอาจเพิ่งปรับคำตอบเพื่อตอบคำถามนี้ นอกจากนี้อย่าลืมกด return ในความคิดเห็น :-)
conjugateprior

ฉันคิดถึงส่วนที่สองของการวิเคราะห์ ใน MMR (หลายตัวแปรถดถอย) หลัง: lm(cbind(DV1,DV2,DV3,DV4,DV5,DV6) ~ IV1 + IV2 + ... + IVn) ฉันต้องใช้คำสั่ง manova () ดังนี้: summary(manova(my.model)) เพื่อทำการวิเคราะห์ความแปรปรวนหลายตัวแปรและเห็นความสำคัญของตัวแปรอิสระแต่ละตัว นั่นคือเป้าหมายสุดท้าย
Juan

ทั้ง manova และ anova นั้นไม่ได้ถูกกำหนดไว้สำหรับข้อมูลประเภทนี้ดังนั้นจึงไม่มีการนำเสนอ แต่ถ้าคุณต้องการที่จะเห็นผลกระทบของแต่ละ IV แล้วตารางการถดถอยให้summaryจะมอบให้คุณสำหรับแต่ละ DV
conjugateprior

คำตอบ:


11

คำตอบสั้น ๆ ก็คือมันใช้glmไม่ได้ผล lmจะสร้างmlmวัตถุถ้าคุณให้มันเมทริกซ์ แต่นี้ไม่ได้รับการสนับสนุนอย่างกว้างขวางใน generics และอยู่แล้วไม่สามารถได้อย่างง่ายดายคุยไปglmเนื่องจากผู้ใช้จะต้องมีความสามารถที่จะระบุคอลัมน์คู่ตัวแปรสำหรับรูปแบบการถดถอยโลจิสติก

วิธีแก้ไขคือให้พอดีกับรุ่นแยกกัน สมมติว่า IV และ DV ของคุณอาศัยอยู่ใน data.frame ชื่อddและมีป้ายกำกับว่าพวกเขาเป็นอย่างไรในคำถามของคุณ รหัสต่อไปนี้สร้างรายการรุ่นที่มีการติดตั้งซึ่งจัดทำดัชนีโดยชื่อของตัวแปรตามที่ใช้:

models <- list()
dvnames <- paste("DV", 1:6, sep='')
ivnames <- paste("IV", 1:n, sep='') ## for some value of n

for (y in dvnames){
  form <- formula(paste(y, "~", ivnames))
  models[[y]] <- glm(form, data=dd, family='poisson') 
}

หากต้องการตรวจสอบผลลัพธ์เพียงห่อฟังก์ชันตามปกติของคุณใน a lapplyดังนี้:

lapply(models, summary) ## summarize each model

ไม่ต้องสงสัยเลยว่าวิธีการที่สง่างามกว่านี้ในการทำ R แต่มันควรจะใช้ได้


6

ฉันได้รับแจ้งว่ามีโมเดล Multivariate Generalized Linear (แบบผสม) หลายตัวที่จัดการปัญหาของคุณได้ ฉันไม่ใช่ผู้เชี่ยวชาญเกี่ยวกับเรื่องนี้ แต่ฉันจะดูเอกสารประกอบของ SABERและหนังสือเล่มนี้เกี่ยวกับ GLM แบบหลายตัวแปร บางทีพวกเขาช่วย ...


2
คุณได้ประเด็นที่น่าสนใจ (+1) มี GLM หลายตัวแปรอย่างแน่นอน บนมืออื่น ๆ ให้lmเมทริกซ์สำหรับตัวแปรตามควรอาจจะเห็นมากขึ้นเป็นน้ำตาลประโยคกว่าการแสดงออกของรูปแบบหลายตัวแปร: ถ้ามันเป็นหลายตัวแปร (ปกติ) รูปแบบมันจะเป็นหนึ่งที่ผิดพลาดได้ ' ทรงกลม 'คือหนึ่งที่คุณสามารถเรียกใช้การถดถอยแยกต่างหากในแต่ละองค์ประกอบของตัวแปรตามและได้คำตอบเดียวกัน
conjugateprior
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.