การใช้ lmer สำหรับวัดซ้ำโมเดลเอฟเฟกต์เชิงเส้นซ้ำ


41

แก้ไข 2: ตอนแรกฉันคิดว่าฉันต้องใช้ ANOVA สองปัจจัยพร้อมมาตรการซ้ำ ๆ บนปัจจัยเดียว แต่ตอนนี้ฉันคิดว่าโมเดลเชิงเส้นผสมเอฟเฟกต์จะทำงานได้ดีขึ้นสำหรับข้อมูลของฉัน ฉันคิดว่าฉันเกือบจะรู้ว่าต้องเกิดอะไรขึ้น แต่ฉันก็ยังสับสนอยู่บ้าง

การทดลองที่ฉันต้องวิเคราะห์มีลักษณะเช่นนี้:

  • อาสาสมัครถูกกำหนดให้กับหนึ่งในหลายกลุ่มการรักษา
  • การวัดแต่ละเรื่องถูกถ่ายในหลายวัน
  • ดังนั้น:
    • ผู้ทดลองถูกทำซ้อนในการรักษา
    • รักษาข้ามกับวัน

(แต่ละวิชาได้รับมอบหมายให้ทำการรักษาเพียงครั้งเดียวเท่านั้นและจะทำการวัดในแต่ละเรื่องในแต่ละวัน)

ชุดข้อมูลของฉันมีข้อมูลต่อไปนี้:

  • Subject = ปัจจัยการปิดกั้น (ปัจจัยสุ่ม)
  • Day = ภายในหัวเรื่องหรือปัจจัยการวัดซ้ำ (ปัจจัยคงที่)
  • การรักษา = ระหว่างปัจจัยเรื่อง (ปัจจัยคงที่)
  • Obs = ตัวแปร (ขึ้นอยู่กับ) ที่วัดได้

อัปเดต ตกลงฉันเลยไปคุยกับนักสถิติ แต่เขาเป็นผู้ใช้ SAS เขาคิดว่าแบบจำลองควรเป็น:

การรักษา + วัน + วิชา (การรักษา) + วัน * วิชา (การรักษา)

เห็นได้ชัดว่าสัญกรณ์ของเขาแตกต่างจากไวยากรณ์ R แต่โมเดลนี้ควรคำนึงถึง:

  • การรักษา (แก้ไข)
  • วัน (คงที่)
  • ปฏิสัมพันธ์ * การรักษาวัน
  • หัวเรื่องซ้อนอยู่ภายในการรักษา (สุ่ม)
  • วันที่ข้ามไปกับ "หัวเรื่องภายในการรักษา" (สุ่ม)

ดังนั้นนี่คือไวยากรณ์ที่ถูกต้องที่จะใช้?

m4 <- lmer(Obs~Treatment*Day + (1+Treatment/Subject) + (1+Day*Treatment/Subject), mydata)

ฉันกังวลเป็นพิเศษเกี่ยวกับว่าวันที่ตัดกับส่วน "หัวเรื่องภายในการรักษา" นั้นถูกต้องหรือไม่ ใครบ้างที่คุ้นเคยกับ SAS หรือมั่นใจว่าพวกเขาเข้าใจว่าเกิดอะไรขึ้นในแบบจำลองของเขาสามารถแสดงความคิดเห็นว่าความพยายามเศร้าของฉันในการจับคู่ไวยากรณ์ R หรือไม่

นี่คือความพยายามก่อนหน้าของฉันในการสร้างแบบจำลองและการเขียนไวยากรณ์ (อธิบายในคำตอบและความคิดเห็น):

m1 <- lmer(Obs ~ Treatment * Day + (1 | Subject), mydata)

ฉันจะจัดการกับความจริงที่ว่ากลุ่มตัวอย่างซ้อนอยู่ภายในการรักษาได้อย่างไร? วิธีการที่ไม่m1แตกต่างจาก:

m2 <- lmer(Obs ~ Treatment * Day + (Treatment|Subject), mydata)
m3 <- lmer(Obs ~ Treatment * Day + (Treatment:Subject), mydata)

และมีm2และm3เทียบเท่า (และถ้าไม่ทำไม)?

นอกจากนี้ฉันต้องใช้ nlme แทน lme4 หรือไม่ถ้าฉันต้องการระบุโครงสร้างความสัมพันธ์ (เช่นcorrelation = corAR1)? ตามการวัดแบบทำซ้ำสำหรับการวิเคราะห์แบบทำซ้ำด้วยการวัดซ้ำในปัจจัยเดียวโครงสร้างความแปรปรวนร่วม (ธรรมชาติของความสัมพันธ์ระหว่างการวัดของเรื่องเดียวกัน) เป็นสิ่งสำคัญ

เมื่อฉันพยายามทำ ANOVA ซ้ำหลายครั้งฉันตัดสินใจใช้ Type II SS สิ่งนี้ยังมีความเกี่ยวข้องอยู่หรือไม่และหากเป็นเช่นนั้นฉันจะระบุได้อย่างไร

นี่คือตัวอย่างของข้อมูลที่มีลักษณะ:

mydata <- data.frame(
  Subject  = c(13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 
               34, 35, 36, 37, 38, 39, 40, 62, 63, 64, 65, 13, 14, 15, 16, 17, 18, 
               19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 
               40, 62, 63, 64, 65, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
               29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 62, 63, 64, 65), 
  Day       = c(rep(c("Day1", "Day3", "Day6"), each=28)), 
  Treatment = c(rep(c("B", "A", "C", "B", "C", "A", "A", "B", "A", "C", "B", "C", 
                      "A", "A", "B", "A", "C", "B", "C", "A", "A"), each = 4)), 
  Obs       = c(6.472687, 7.017110, 6.200715, 6.613928, 6.829968, 7.387583, 7.367293, 
                8.018853, 7.527408, 6.746739, 7.296910, 6.983360, 6.816621, 6.571689, 
                5.911261, 6.954988, 7.624122, 7.669865, 7.676225, 7.263593, 7.704737, 
                7.328716, 7.295610, 5.964180, 6.880814, 6.926342, 6.926342, 7.562293, 
                6.677607, 7.023526, 6.441864, 7.020875, 7.478931, 7.495336, 7.427709, 
                7.633020, 7.382091, 7.359731, 7.285889, 7.496863, 6.632403, 6.171196, 
                6.306012, 7.253833, 7.594852, 6.915225, 7.220147, 7.298227, 7.573612, 
                7.366550, 7.560513, 7.289078, 7.287802, 7.155336, 7.394452, 7.465383, 
                6.976048, 7.222966, 6.584153, 7.013223, 7.569905, 7.459185, 7.504068, 
                7.801867, 7.598728, 7.475841, 7.511873, 7.518384, 6.618589, 5.854754, 
                6.125749, 6.962720, 7.540600, 7.379861, 7.344189, 7.362815, 7.805802, 
                7.764172, 7.789844, 7.616437, NA, NA, NA, NA))

คำตอบ:


18

ฉันคิดว่าวิธีการของคุณถูกต้อง ตัวแบบm1ระบุการสกัดกั้นแยกกันสำหรับแต่ละวิชา แบบจำลองm2จะเพิ่มความชันแยกต่างหากสำหรับแต่ละเรื่อง ความลาดเอียงของคุณข้ามวันเนื่องจากอาสาสมัครเข้าร่วมกลุ่มการรักษาเพียงกลุ่มเดียวเท่านั้น หากคุณเขียนแบบจำลองm2ดังต่อไปนี้จะเห็นได้ชัดว่าคุณวางโมเดลการสกัดกั้นและความชันแยกต่างหากสำหรับแต่ละเรื่อง

m2 <- lmer(Obs ~ Treatment * Day + (1+Day|Subject), mydata)

นี่เทียบเท่ากับ:

m2 <- lmer(Obs ~ Treatment + Day + Treatment:Day + (1+Day|Subject), mydata)

คือผลกระทบหลักของการรักษาวันและการมีปฏิสัมพันธ์ระหว่างคนทั้งสอง

ฉันคิดว่าคุณไม่จำเป็นต้องกังวลเกี่ยวกับการทำรังตราบใดที่คุณไม่ต้องทำซ้ำหัวเรื่องของ ID ภายในกลุ่มการรักษา รูปแบบใดที่ถูกต้องขึ้นอยู่กับคำถามการวิจัยของคุณ มีเหตุผลที่เชื่อได้หรือไม่ว่าความลาดชันของอาสาสมัครนั้นแตกต่างจากผลการรักษาหรือไม่? คุณสามารถเรียกใช้ทั้งสองรุ่นและเปรียบเทียบกับanova(m1,m2)เพื่อดูว่าข้อมูลรองรับทั้งสองแบบหรือไม่

ฉันไม่แน่ใจว่าคุณต้องการแสดงโมเดลm3อะไร ไวยากรณ์รังใช้เช่น/(1|group/subgroup)

ฉันไม่คิดว่าคุณต้องกังวลเกี่ยวกับความสัมพันธ์อัตโนมัติกับจุดเวลาจำนวนเล็กน้อยเช่นนั้น


สิ่งนี้ไม่ถูกต้อง การรักษาเป็นตัวแปรระดับ 2 มันไม่สามารถซ้อนอยู่ในอาสาสมัครได้
Patrick Coulombe

เกี่ยวกับความสัมพันธ์อัตโนมัติและจำนวนเวลา: ฉันแสดงเพียงสามในข้อมูลตัวอย่างนี้ แต่ข้อมูลจริงของฉันมีการสังเกตใน 8 วันที่แตกต่างกันดังนั้นฉันคิดว่ามันอาจจะเป็นปัญหา ความคิดใดที่จะนำสิ่งนั้นไปใช้?
phosphorelated

1
นอกจากนี้ฉันค่อนข้างสับสนเกี่ยวกับการทำรัง (1 + การรักษา | วิชา) แตกต่างจาก (1 การรักษา + / เรื่อง)? "|" คืออะไร หมายถึงภาษาอังกฤษธรรมดา? ฉันไม่เข้าใจคำอธิบายที่ฉันอ่าน
phosphorelated

สวัสดี อะไรคือ "ความชันแยกสำหรับแต่ละวิชา" เพราะหัวเรื่องเป็นตัวแปรปัจจัยไม่ใช่ตัวแปรต่อเนื่อง
skan

12

ฉันรู้สึกไม่สะดวกสบายพอที่จะแสดงความคิดเห็นเกี่ยวกับปัญหาข้อผิดพลาดที่เกี่ยวข้องโดยอัตโนมัติ (หรือเกี่ยวกับการใช้งานที่แตกต่างกันใน lme4 กับ nlme) แต่ฉันสามารถพูดกับส่วนที่เหลือได้

โมเดลของคุณm1เป็นรูปแบบการสกัดกั้นแบบสุ่มซึ่งคุณได้รวมการทำงานข้ามระดับระหว่างการรักษาและวัน (เอฟเฟกต์ของวันนั้นได้รับอนุญาตให้เปลี่ยนแปลงระหว่างกลุ่มการรักษา) เพื่อที่จะอนุญาตให้มีการเปลี่ยนแปลงตลอดเวลาที่จะแตกต่างกันไปเข้าร่วม (เช่นอย่างชัดเจนรูปแบบที่แตกต่างกันในแต่ละเปลี่ยนแปลงตลอดเวลา), คุณยังต้องเพื่อให้มีผลบังคับใช้วันที่จะสุ่ม หากต้องการทำสิ่งนี้คุณจะระบุ:

m2 <- lmer(Obs ~ Day + Treatment + Day:Treatment + (Day | Subject), mydata)

ในรุ่นนี้:

  • จุดตัดหากคะแนนที่คาดการณ์ไว้สำหรับหมวดหมู่อ้างอิงการรักษา ณ วันที่ = 0
  • ค่าสัมประสิทธิ์สำหรับวันเป็นการเปลี่ยนแปลงที่คาดการณ์เมื่อเวลาผ่านไปสำหรับการเพิ่มขึ้น 1 หน่วยในแต่ละวันสำหรับหมวดอ้างอิงการรักษา
  • สัมประสิทธิ์สำหรับรหัสจำลองสองตัวสำหรับกลุ่มการรักษา (สร้างขึ้นโดยอัตโนมัติ) คือความแตกต่างที่คาดการณ์ระหว่างกลุ่มการรักษาที่เหลืออยู่แต่ละกลุ่มและหมวดหมู่อ้างอิงในวันที่ = 0
  • ค่าสัมประสิทธิ์สำหรับคำศัพท์ทั้งสองนั้นมีความแตกต่างในผลของเวลา (วัน) ในการทำนายคะแนนระหว่างหมวดหมู่อ้างอิงและกลุ่มการรักษาที่เหลืออยู่

ทั้งการสกัดกั้นและผลกระทบของคะแนนต่อวันนั้นเป็นแบบสุ่ม (แต่ละวิชาได้รับอนุญาตให้มีคะแนนทำนายที่แตกต่างกันในวันที่ = 0 และการเปลี่ยนแปลงเชิงเส้นที่แตกต่างกันตามเวลา) ความแปรปรวนร่วมระหว่างดักและความลาดชันก็ถูกจำลองเช่นกัน

อย่างที่คุณเห็นการตีความสัมประสิทธิ์ของตัวแปรจำลองทั้งสองนั้นมีเงื่อนไขในวันที่ = 0 พวกเขาจะบอกคุณว่าคะแนนที่ทำนายไว้ที่ Day = 0 สำหรับหมวดหมู่อ้างอิงนั้นแตกต่างจากกลุ่มการรักษาที่เหลืออยู่สองกลุ่มหรือไม่ ดังนั้นที่คุณตัดสินใจที่จะจัดให้ตัวแปรวันของคุณอยู่ตรงกลางเป็นสิ่งสำคัญ หากคุณอยู่ตรงกลางในวันที่ 1 ค่าสัมประสิทธิ์จะบอกคุณว่าคะแนนที่คาดการณ์สำหรับหมวดหมู่อ้างอิงในวันที่ 1นั้นแตกต่างจากคะแนนทำนายของทั้งสองกลุ่มที่เหลือ วิธีนี้คุณอาจจะดูว่ามีความแตกต่างที่มีอยู่ก่อนระหว่างกลุ่ม หากคุณอยู่ตรงกลางในวันที่ 3 ค่าสัมประสิทธิ์จะบอกคุณว่าคะแนนที่ทำนายสำหรับหมวดหมู่อ้างอิงในวันที่ 3แตกต่างอย่างมีนัยสำคัญจากคะแนนทำนายของทั้งสองกลุ่มที่เหลือ ด้วยวิธีนี้คุณสามารถดูว่ามีความแตกต่างระหว่างกลุ่มในตอนท้ายของการแทรกแซงหรือไม่

ในที่สุดโปรดทราบว่าหัวเรื่องไม่ซ้อนอยู่ภายในการรักษา การรักษาทั้งสามแบบของคุณไม่ใช่ระดับสุ่มของประชากรในระดับที่คุณต้องการสรุปผลลัพธ์ของคุณ - ตามที่คุณกล่าวถึงระดับของคุณจะได้รับการแก้ไขและคุณต้องการสรุปผลลัพธ์ของคุณในระดับเหล่านี้เท่านั้น (ไม่ต้องพูดถึงคุณไม่ควรใช้การสร้างแบบจำลองหลายระดับหากคุณมีหน่วยระดับบนเพียง 3 หน่วยเท่านั้นดูที่ Maas & Hox, 2005) การรักษาเป็นตัวทำนายระดับ 2 ซึ่งก็คือตัวทำนายที่ใช้ค่าเดียวในหลายวัน (ระดับ -1 หน่วย) สำหรับแต่ละเรื่อง ดังนั้นมันจึงถูกรวมเป็นเพียงตัวทำนายในโมเดลของคุณ

การอ้างอิง:
Maas, CJM, & Hox, JJ (2005) ขนาดตัวอย่างที่เพียงพอสำหรับการสร้างแบบจำลองหลายระดับ ระเบียบวิธี: วารสารวิธีการวิจัยยุโรปสำหรับพฤติกรรมศาสตร์และสังคมศาสตร์ , 1 , 86-92


1
มันไม่สามารถประมาณได้โดย lmer เพราะจำนวนของ obs <= จำนวนผลกระทบแบบสุ่มและความแปรปรวนที่เหลืออาจจะไม่สามารถพิสูจน์ได้
Shuguang

โครงสร้างสูตรในคำตอบนั้นถูกต้อง เพื่อที่จะแทนที่ข้อผิดพลาดดังกล่าวโดย @Shuguang ...,control=lmerControl(check.nobs.vs.nRE="ignore")คุณจะต้องเพิ่ม ดูลิงค์นี้สำหรับคำอธิบายเพิ่มเติมโดย Ben Bolker
NiuBiBang

คำอธิบายที่ดี คุณช่วยอธิบายเพิ่มเติมหน่อยได้ไหมว่าทำไม "หัวเรื่องไม่ซ้อนอยู่ในการรักษา" และทำไมคุณไม่สร้างคำผิดพลาด + (การรักษา | เรื่อง) และทำไมไม่เพียงแค่ (1 | เรื่อง) หรือแม้กระทั่ง (1 | การรักษา * วัน )?
skan

ในทางเทคนิคคุณสามารถสร้างรังของอาสาสมัครในการรักษาอย่างไรก็ตามหากผู้ทำนายนั้นเป็นคนเดียวกันไม่ว่าคุณจะทำการทดลองกี่ครั้งมันควรจะมีผลคงที่ (ไม่ใช่แบบสุ่ม) ปัจจัยที่จะแตกต่างกันทุกครั้งที่คุณทำการทดสอบเช่นลักษณะเฉพาะของบุคคล - เช่นค่าเริ่มต้นหรือการตอบสนองต่อการเปลี่ยนแปลงในการรักษาเมื่อเวลาผ่านไป - เป็นผลแบบสุ่ม (1 + Day|Subject)หมายถึงรูปแบบความลาดชันแบบสุ่มซึ่งอนุญาตให้ค่าเริ่มต้นของแต่ละคน (สกัด) และอัตราการเปลี่ยนแปลงของผลลัพธ์ที่แตกต่างกัน
llewmills
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.