วิธีการทำการวิเคราะห์ความแปรปรวนแบบผสมขนาด 4 คูณ 4 ด้วยความแตกต่างระหว่างและภายในเรื่องโดยใช้ R?


11

ผู้ใช้ระดับเริ่มต้นของ R ที่นี่ต้องดิ้นรนกับมาตรการ ANOVA ซ้ำ ๆ

ฉันมีชุดข้อมูลที่ประกอบด้วยหนึ่งระหว่างปัจจัยของกลุ่มวิชาที่มี 4 ระดับ (เขียนเป็นตัวแปรเดียวที่เรียกว่า 'กลุ่ม') และอีกหนึ่งรายการอยู่ในกลุ่มวิชาที่มี 4 ระดับ (เขียนเป็นตัวแปรแยกกันสี่ชุดคือ 'DV1', 'DV2', 'DV3 ',' DV4 ')

ฉันมีวัตถุประสงค์ดังต่อไปนี้:

  1. ใช้มาตรการ ANOVA ซ้ำ ๆ โดยรวม
  2. เปรียบเทียบกลุ่มโดยใช้ความแตกต่างที่กำหนดเอง (เช่นในคำสั่ง LMATRIX ใน SPSS)
  3. เปรียบเทียบระดับต่างๆของ DV โดยใช้ความแตกต่างที่กำหนดเอง (เช่นในคำสั่ง MMATRIX ใน SPSS)
  4. ทำการรวมกันของ 2) และ 3) พร้อมกันดังนั้นฉันจึงเปรียบเทียบเฉพาะบางกลุ่มในระดับที่แน่นอนของปัจจัยภายในเรื่อง
  5. ใช้ชุดความแตกต่างที่ไม่รวมกับศูนย์

ฉันรู้ว่าฉันสามารถทำสิ่งนี้ใน SPSS ได้โดยไม่มีปัญหา แต่ฉันไม่สามารถเข้าใจวิธีการทำเช่นนี้ได้ใน R. ฉันเห็นว่าส่วนนี้สามารถทำงานในแพ็คเกจที่แตกต่างกันได้อย่างไร แต่ฉันก็ไม่ได้ เห็นได้ชัดว่าสิ่งนี้สามารถทำงานได้ในขั้นตอนเดียวหรือชุดของขั้นตอนที่เกี่ยวข้องใน R

คำตอบ:


18

ภาพร่างของโซลูชันหนึ่ง (สำหรับอีกวิธีดูด้านล่าง):

  1. ข้อมูลความต้องการที่จะอยู่ในรูปแบบยาว (เช่นมูลค่าต่อแถว) แทนในรูปแบบที่หลากหลายเช่นเดียวกับในโปรแกรม SPSS (เช่นเรื่องใดเรื่องหนึ่งต่อแถว) ดูแพคเกจ Reshape ?reshapeหรือ ซึ่งรวมถึงต้องมีตัวแปรที่ระบุตัวระบุหัวเรื่อง (เช่น subject id)
  2. ปัจจัยทั้งหมด (รวมถึงตัวระบุหัวเรื่อง) จะต้องเป็นปัจจัยระดับ (เรียกใช้strบนกรอบข้อมูลของคุณเพื่อตรวจสอบสิ่งนี้) หากคุณไม่ทำเช่นนี้ผลลัพธ์ของคุณจะผิด
  3. หากคุณต้องการได้รับผลบวกของสี่เหลี่ยมจัตุรัส Type-III ตั้งค่าความคมชัดเริ่มต้นเพื่อให้การเข้ารหัสมีผล:
    options(contrasts=c("contr.sum","contr.poly"))
  4. ระบุรุ่นที่ต้องการด้วยlmeจากnlmeแพ็คเกจ (ติดตั้งและโหลดแพ็กเกจก่อนมือผ่านinstall.packages("nlme")และlibrary(nlme)) โดยใช้โครงสร้างความสัมพันธ์แบบสมมาตรแบบ Compund ดูคำตอบและโดยเฉพาะความคิดเห็นของฉันต่อคำตอบที่ได้รับการยอมรับสำหรับคำถามนี้ ในกรณีของคุณที่อาจเป็นสิ่งที่ชอบ (ถ้าคุณจะให้ข้อมูลตัวอย่างซึ่งแนะนำอย่างยิ่งคุณจะได้รับรหัสที่ถูกต้อง):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. ใช้anovaฟังก์ชั่นทั่วไปเพื่อให้ได้ตาราง anova (ดู?anova.lme):
    anova(my.anova)
    หากต้องการรับผลบวกของประเภทสี่เหลี่ยมจัตุรัส III ให้ใช้anovaคำสั่งที่มีtypeชุดอาร์กิวเมนต์เป็น"marginal"(ใช้งานได้เฉพาะในกรณีที่ความคมชัดถูกตั้งค่าเป็นเอฟเฟกต์การเข้ารหัสดูจุด 3):
    anova(my.anova, type = "marginal")
  6. lmeขณะนี้วัตถุที่ติดตั้งประเภทช่วยให้ฟังก์ชั่นที่หลากหลายในการดำเนินการตัดกัน วิธีการแก้ปัญหาที่ยืดหยุ่นที่สุด (แต่เป็นวิธีที่ค่อนข้างไม่ค่อยสะดวก) คือการLโต้แย้งในการเรียกไปที่anova.lme(ดูอีกครั้ง?anova.lme)
    โซลูชันอื่น ๆ ยังต้องการlmeวัตถุที่มีการติดตั้งเป็นอาร์กิวเมนต์:
    นอกจากนี้ยังมีความยืดหยุ่นมากคือestimableฟังก์ชั่นจากแพคเกจgmodels แพคเกจนี้ยังมีfit.contrastsฟังก์ชั่น multcompแพคเกจช่วยให้ความแตกต่างโดยใช้การปรับอัลฟาข้อผิดพลาด ( แต่คุณเท่านั้นที่สามารถดำเนินการแตกต่างโดยใช้ปัจจัยหนึ่งของคุณ) โดยใช้ฟังก์ชั่น วิธีการใหม่และมีแนวโน้มเป็นแพคเกจความคมชัดแต่จนถึงขณะนี้ก็ดูเหมือนจะไม่ขัดแย้งกับความเป็นไปได้ทั้งหมด
    glht

โซลูชันทางเลือกคือการใช้การวิเคราะห์ความแปรปรวนมาตรฐานผ่านการรวมกันของafexและlsmeansตามที่ระบุไว้ใน-vignetteafex


(+1) การตอบสนองที่ยอดเยี่ยมและให้คำแนะนำอย่างมาก กำลังรอสำหรับการโพสต์บล็อก ...
CHL

?anova.lmeไม่ทำงานสำหรับฉันและmethods(anova)แสดงว่าเป็นฟังก์ชั่นที่มองไม่เห็น
จอห์น

@ จอห์นคุณโหลดnlmeมาก่อนหรือไม่ ถ้าไม่ทำงานให้รันlibrary(nlme)แล้วมันน่าจะใช้ได้ หากยังไม่สามารถใช้งานได้install.packages("nlme")อันดับแรก
Henrik

อา ... ฉันไม่ได้เห็นได้ชัดแค่ lme4
จอห์น

@ Henrick ฉันสามารถไปถึงขั้นตอนที่ 5 ได้ แต่ฉันไม่สามารถตั้งค่าความเปรียบต่างเปรียบเทียบปัจจัยเฉพาะระหว่างเรื่องในระดับปัจจัยภายในเรื่องได้ เอกสารออนไลน์ทั้งหมดที่ฉันเคยเห็นเกี่ยวข้องกับการทดสอบความแตกต่างในระดับต่าง ๆ ของปัจจัยระหว่างวิชา คุณมีรหัสตัวอย่างหรือไม่? ฉันแค่รอโพสต์บล็อกหากคุณกำลังจะครอบคลุมที่นั่น
aquadhere
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.