การทดสอบหลังเลิกเรียนใน multcomp :: glht สำหรับโมเดลเอฟเฟกต์แบบผสม (lme4) พร้อมการโต้ตอบ


10

ฉันกำลังทำการทดสอบแบบโพสต์เฉพาะกิจในโมเดลผสมผลกระทบเชิงเส้นในR( lme4แพ็คเกจ) ฉันใช้multcompแพคเกจ ( glht()ฟังก์ชั่น) เพื่อทำการทดสอบหลังการทำงาน

การออกแบบการทดลองของฉันคือการวัดซ้ำพร้อมเอฟเฟกต์บล็อกแบบสุ่ม รูปแบบที่ระบุไว้เป็น:

mymod <- lmer(variable ~ treatment * time + (1|block), data = mydata, REML = TRUE)

แทนที่จะแนบข้อมูลของฉันที่นี่ฉันกำลังทำงานของข้อมูลที่เรียกว่าwarpbreaksภายในmultcompแพ็คเกจ

data <- warpbreaks
warpbreaks$rand <- NA

ฉันได้เพิ่มตัวแปรสุ่มพิเศษเพื่อเลียนแบบเอฟเฟกต์ "บล็อก" ของฉัน:

warpbreaks$rand <- rep(c("foo", "bar", "bee"), nrow(warpbreaks)/3)

นี่เป็นการเลียนแบบโมเดลของฉัน:

mod <- lmer(breaks ~ tension * wool + (1|rand), data = warpbreaks) 

ฉันรู้ตัวอย่างใน " Multcomp เพิ่มเติม Examples- 2 Way Anova"woolตัวอย่างนี้จะนำคุณไปเปรียบเทียบระดับของความตึงเครียดในระดับที่

ถ้าฉันต้องการทำสิ่งที่ตรงกันข้าม - เปรียบเทียบระดับของwoolภายในระดับของtension? (ในกรณีของฉันนี่จะเป็นการเปรียบเทียบระดับการรักษา (สอง - 0, 1) ภายในระดับเวลา (สาม - มิถุนายนกรกฎาคมกรกฎาคมสิงหาคม)

ฉันคิดรหัสต่อไปนี้ขึ้นมา แต่ดูเหมือนจะใช้งานไม่ได้ (ดูข้อความแสดงข้อผิดพลาดด้านล่าง)

ครั้งแรกจากตัวอย่าง (ด้วยwoolและtensionเปลี่ยนสถานที่):

tmp <- expand.grid(wool = unique(warpbreaks$wool), tension = unique(warpbreaks$tension))
X <- model.matrix(~ tension * wool, data = tmp)
glht(mod, linfct = X)

Tukey <- contrMat(table(warpbreaks$wool), "Tukey")

K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)))
rownames(K1) <- paste(levels(warpbreaks$tension)[1], rownames(K1), sep = ":")

K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(warpbreaks$tension)[2], rownames(K2), sep = ":")

จากที่นี่ถึงล่างสุดรหัสของฉัน:

K3 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(warpbreaks$tension)[3], rownames(K3), sep = ":")

K <- rbind(K1, K2, K3)
colnames(K) <- c(colnames(Tukey), colnames(Tukey))

> summary(glht(mod, linfct = K %*% X))
Error in summary(glht(mod, linfct = K %*% X)) : 
  error in evaluating the argument 'object' in selecting a method for function 'summary': Error in K %*% X : non-conformable arguments

คำตอบ:


6

มันง่ายกว่ามากที่จะใช้แพ็คเกจ lsmeans

library(lsmeans)
lsmeans(mod, pairwise ~ tension | wool)
lsmeans(mod, pairwise ~ wool | tension)

เยี่ยมเลยใช้งานได้! ขอบคุณ หมายเหตุ: รหัสนี้ใช้ได้กับข้อมูลของฉันเท่านั้นหลังจากเปลี่ยนตัวแปรทำซ้ำจากค่าตัวเลข (3 & 6) เป็นค่าตัวอักษร (A & B)

นั่นสำคัญมาก! เพราะมันเป็นรูปแบบที่แตกต่างกันและtimeเป็นตัวทำนายตัวเลข ฉันสงสัยว่าคุณต้องการเป็นปัจจัย
Russ Lenth

ฉันจะพูดคุยกับนักทำนายมากขึ้นได้อย่างไร? ถ้าเช่นฉันมี 3 ตัวทำนายมันทำงานอย่างไร
ขอให้สนุก

1
@havefun กรุณาดูที่และhelp("lsmeans", package = "lsmeans") vignette("using-lsmeans")มีเอกสารจำนวนมากและตัวอย่างมากมาย
Russ Lenth

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