ข้อผิดพลาดมาตรฐานของเอฟเฟกต์แบบสุ่มใน R (lme4) vs Stata (xtmixed)


19

โปรดพิจารณาข้อมูลนี้:

dt.m <- structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), occasion = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("g1", "g2"), class = "factor"),     g = c(12, 8, 22, 10, 10, 6, 8, 4, 14, 6, 2, 22, 12, 7, 24, 14, 8, 4, 5, 6, 14, 5, 5, 16)), .Names = c("id", "occasion", "g"), row.names = c(NA, -24L), class = "data.frame")

เราพอดีกับโมเดลส่วนประกอบความแปรปรวนแบบง่าย ใน R เรามี:

require(lme4)
fit.vc <- lmer( g ~ (1|id), data=dt.m )

จากนั้นเราผลิตพล็อตหนอน:

rr1 <- ranef(fit.vc, postVar = TRUE)
dotplot(rr1, scales = list(x = list(relation = 'free')))[["id"]]

หนอนผีเสื้อแปลงจาก R

ตอนนี้เราพอดีกับรุ่นเดียวกันใน Stata ก่อนเขียนถึงรูปแบบ Stata จาก R:

require(foreign)
write.dta(dt.m, "dt.m.dta")

ในสตาตา

use "dt.m.dta"
xtmixed g || id:, reml variance

เอาต์พุตเห็นด้วยกับเอาต์พุต R (ไม่แสดง) และเราพยายามสร้างพล็อตแบบหนอนเดียวกัน:

predict u_plus_e, residuals
predict u, reffects
gen e = u_plus_e – u
predict u_se, reses

egen tag = tag(id)
sort u
gen u_rank = sum(tag)

serrbar u u_se u_rank if tag==1, scale(1.96) yline(0)

ป้อนคำอธิบายรูปภาพที่นี่

Clearty Stata ใช้ข้อผิดพลาดมาตรฐานที่แตกต่างกับ R ในความเป็นจริง Stata ใช้ 2.13 ในขณะที่ R ใช้ 1.32

จากสิ่งที่ฉันสามารถบอกได้ 1.32 ใน R มาจาก

> sqrt(attr(ranef(fit.vc, postVar = TRUE)[[1]], "postVar")[1, , ])
 [1] 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977

แม้ว่าฉันจะไม่สามารถบอกได้ว่าฉันเข้าใจสิ่งที่กำลังทำอยู่ มีคนอธิบายได้ไหม

และฉันไม่มีความคิดว่า 2.13 จาก Stata มาจากที่ไหนยกเว้นว่าถ้าฉันเปลี่ยนวิธีการประมาณค่าให้เป็นโอกาสสูงสุด:

xtmixed g || id:, ml variance

.... ดูเหมือนว่าจะใช้ 1.32 เป็นข้อผิดพลาดมาตรฐานและให้ผลลัพธ์เหมือนกับ R ....

ป้อนคำอธิบายรูปภาพที่นี่

.... แต่จากนั้นค่าประมาณสำหรับความแปรปรวนของผลแบบสุ่มจะไม่เห็นด้วยกับ R (35.04 เทียบกับ 31.97)

ดังนั้นดูเหมือนว่าจะมีบางอย่างที่เกี่ยวข้องกับ ML vs REML: ถ้าฉันเรียกใช้ REML ในทั้งสองระบบโมเดลเอาท์พุทตกลง แต่ข้อผิดพลาดมาตรฐานที่ใช้ในตัวแปลงหนอนไม่เห็นด้วยในขณะที่ถ้าฉันใช้ REML ใน R และ ML ใน Stata พล็อตตัวหนอนนั้นเห็นด้วย แต่ตัวแบบประมาณไม่ได้

ใครสามารถอธิบายสิ่งที่เกิดขึ้น?


โรเบิร์ตคุณเคยดูวิธีการและสูตรของ Stata [XT] xtmixedและ / หรือยัง[XT] xtmixed postestimation? พวกเขาอ้างถึง Pinheiro และ Bates (2000) ดังนั้นอย่างน้อยบางส่วนของคณิตศาสตร์จะต้องเหมือนกัน
StasK

@StasK ฉันเห็นการอ้างอิงถึง Pinheiro และ Bates ก่อนหน้านี้ แต่ด้วยเหตุผลบางอย่างฉันไม่สามารถหาได้ตอนนี้! ฉันเคยเห็นหมายเหตุด้านเทคนิคเกี่ยวกับการทำนายผลแบบสุ่ม มันใช้ "ทฤษฎีมาตรฐานของความน่าจะเป็นสูงสุด" และผลลัพธ์ที่กำหนดว่าเมทริกซ์ความแปรปรวนแบบเชิงเส้นสำหรับการกลับเป็นลบของ Hessian แต่บอกตามตรงนี่ไม่ได้ช่วยอะไรฉันจริงๆ! [อาจเป็นเพราะการขาดความเข้าใจของฉัน]
Robert Long

นี่อาจเป็นองศาที่อิสระในการแก้ไขที่แตกต่างกันใน Stata vs R หรือไม่? ฉันแค่คิดออกมาดัง ๆ
StasK

@ STASK ฉันคิดเช่นนั้น แต่ฉันได้ข้อสรุปว่าความแตกต่าง - 1.32 vc 2.13 - ยอดเยี่ยมเกินไป แน่นอนว่านี่เป็นตัวอย่างขนาดเล็ก - กลุ่มเล็กจำนวนน้อยและจำนวนการสังเกตต่อกลุ่มดังนั้นฉันจึงไม่แปลกใจที่จะรู้ว่าสิ่งที่มันเป็นสาเหตุทำให้มันถูกขยายโดยขนาดของกลุ่มตัวอย่าง
Robert Long

คำตอบ:


6

ตาม[XT]คู่มือสำหรับ Stata 11:

ββ

β

จากคำถามของคุณคุณได้ลอง REML ทั้ง Stata และ R และ ML ใน Stata ด้วย REML ใน R หากคุณลอง ML ทั้งคู่คุณควรได้ผลลัพธ์เดียวกันทั้งคู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.