ฉันจะทดสอบได้อย่างไรว่าเอฟเฟกต์แบบสุ่มนั้นสำคัญหรือไม่


34

ฉันพยายามเข้าใจว่าควรใช้เอฟเฟกต์แบบสุ่มเมื่อใดและไม่จำเป็น ฉันถูกบอกแล้วว่ากฎง่ายๆคือถ้าคุณมี 4 คนขึ้นไป / กลุ่มที่ฉันทำ (15 ตัวมูซแต่ละตัว) กวางมูซเหล่านี้บางส่วนถูกทดลองใน 2 หรือ 3 ครั้งรวมเป็น 29 การทดลอง ฉันต้องการที่จะรู้ว่าพวกเขาทำงานแตกต่างกันเมื่อพวกเขาอยู่ในภูมิทัศน์ที่มีความเสี่ยงสูงกว่าไม่ ดังนั้นฉันคิดว่าฉันจะตั้งค่าบุคคลเป็นผลสุ่ม อย่างไรก็ตามตอนนี้ฉันถูกบอกว่าไม่จำเป็นต้องรวมบุคคลนั้นเป็นเอฟเฟกต์แบบสุ่มเพราะไม่มีการตอบสนองที่หลากหลาย สิ่งที่ฉันไม่สามารถหาได้คือวิธีการทดสอบว่ามีอะไรบางอย่างที่เป็นจริงเมื่อทำการตั้งค่าบุคคลให้เป็นเอฟเฟกต์แบบสุ่ม อาจเป็นคำถามเริ่มต้น: การทดสอบ / การวินิจฉัยใดที่ฉันสามารถทำได้เพื่อแยกแยะว่าปัจเจกบุคคลเป็นตัวแปรอธิบายที่ดีหรือไม่และควรเป็นผลคงที่ - แปลง qq หรือไม่ histograms? แผนการกระจาย? และสิ่งที่ฉันจะมองหาในรูปแบบเหล่านั้น

ฉันวิ่งโมเดลโดยที่แต่ละคนเป็นเอฟเฟกต์แบบสุ่มและไม่มี แต่ฉันอ่านhttp://glmm.wikidot.com/faqโดยที่พวกเขาระบุว่า:

อย่าเปรียบเทียบโมเดล lmer กับ lm ที่เหมาะสมหรือ glmer / glm; บันทึกความน่าจะเป็นไม่ได้เป็นไปตามความเหมาะสม (กล่าวคือมีเงื่อนไขเพิ่มเติมต่างกัน)

และที่นี่ฉันถือว่านี่หมายความว่าคุณไม่สามารถเปรียบเทียบระหว่างแบบจำลองที่มีเอฟเฟกต์แบบสุ่มหรือแบบไม่มี แต่ฉันไม่รู้ว่าควรเปรียบเทียบอะไรกันแน่

ในโมเดลของฉันที่มีเอฟเฟกต์แบบสุ่มฉันก็พยายามที่จะดูผลลัพธ์เพื่อดูว่าหลักฐานหรือนัยสำคัญชนิดใดที่ RE มี

lmer(Velocity ~ D.CPC.min + FD.CPC + (1|ID), REML = FALSE, family = gaussian, data = tv)

Linear mixed model fit by maximum likelihood 
Formula: Velocity ~ D.CPC.min + FD.CPC + (1 | ID) 
   Data: tv 
    AIC    BIC logLik deviance REMLdev
 -13.92 -7.087  11.96   -23.92   15.39
Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.00000  0.00000 
 Residual             0.02566  0.16019 
Number of obs: 29, groups: ID, 15

Fixed effects:
              Estimate Std. Error t value
(Intercept)  3.287e-01  5.070e-02   6.483
D.CPC.min   -1.539e-03  3.546e-04  -4.341
FD.CPC       1.153e-04  1.789e-05   6.446

Correlation of Fixed Effects:
          (Intr) D.CPC.
D.CPC.min -0.010       
FD.CPC    -0.724 -0.437

คุณเห็นว่าความแปรปรวนและ SD ของฉันจากแต่ละ ID เป็นเอฟเฟกต์แบบสุ่ม = 0 เป็นไปได้อย่างไร 0 หมายถึงอะไร นั่นถูกต้องใช่ไหม? ถ้าอย่างนั้นเพื่อนของฉันที่พูดว่า "เนื่องจากไม่มีการเปลี่ยนแปลงโดยใช้ ID เนื่องจากเอฟเฟ็กต์แบบสุ่มไม่จำเป็น" ถูกต้องเหรอ? ดังนั้นฉันจะใช้มันเป็นเอฟเฟกต์คงที่หรือไม่? แต่ความจริงที่ว่ามีการแปรผันน้อยมากหมายความว่ามันจะไม่บอกเรามากกว่านี้ใช่ไหม?


เกี่ยวกับการได้รับที่แน่นอน 0 ความแปรปรวนของผลการสุ่มเห็นstats.stackexchange.com/questions/115090
อะมีบาพูดว่า Reinstate Monica

คำตอบ:


21

ค่าประมาณIDของความแปรปรวน = 0 บ่งชี้ว่าระดับความแปรปรวนระหว่างกลุ่มไม่เพียงพอที่จะรับประกันการรวมเอฟเฟกต์แบบสุ่มในโมเดล กล่าวคือ โมเดลของคุณแย่ลง

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

  1. คุณสามารถเปรียบเทียบ (ใช้REML = Fเสมอ) AIC (หรือ IC ที่คุณชื่นชอบโดยทั่วไป) ระหว่างโมเดลที่มีและไม่มีเอฟเฟกต์แบบสุ่มและดูว่าสิ่งนี้จะเกิดขึ้นได้อย่างไร
  2. คุณจะดูanova()ผลลัพธ์ของทั้งสองรุ่น
  3. คุณสามารถใช้ bootstrap แบบพารามิเตอร์โดยใช้การกระจายด้านหลังที่กำหนดโดยรุ่นดั้งเดิม

ในใจคุณเลือกที่ 1 และ 2 มีปัญหา: คุณกำลังตรวจสอบบางสิ่งที่มันอยู่ในขอบเขตของพื้นที่พารามิเตอร์ดังนั้นที่จริงแล้วพวกเขาไม่ได้ฟังทางเทคนิค ต้องบอกว่าผมไม่คิดว่าคุณจะได้รับข้อมูลเชิงลึกที่ไม่ถูกต้องจากพวกเขาและผู้คนจำนวนมากใช้พวกเขา (เช่น. ดักลาสเบตส์หนึ่งในนักพัฒนา lme4 ของใช้พวกเขาในของเขาหนังสือแต่อย่างชัดเจนระบุข้อแม้นี้เกี่ยวกับค่าพารามิเตอร์การทดสอบ บนขอบเขตของชุดค่าที่เป็นไปได้) ตัวเลือก 3 เป็นสิ่งที่น่าเบื่อที่สุดของ 3 แต่ให้ความคิดที่ดีที่สุดเกี่ยวกับสิ่งที่เกิดขึ้นจริง ๆ บางคนถูกล่อลวงให้ใช้ bootstrap ที่ไม่ใช่พารามิเตอร์เช่นกัน แต่ฉันคิดว่าเนื่องจากข้อเท็จจริงที่ว่าคุณกำลังตั้งสมมติฐานเกี่ยวกับพารามิเตอร์เพื่อเริ่มต้นกับคุณเช่นกัน


6
แพ็คเกจ RLRsim เป็นวิธีที่สะดวกมากในการทดสอบเอฟเฟกต์แบบสุ่มโดยใช้การทดสอบอัตราส่วนความน่าจะเป็นตามสถานการณ์จำลอง
atrichornis

@atrichornis: +1 แพ็คเกจที่น่าสนใจ ฉันไม่รู้เกี่ยวกับมัน ฉันเพิ่งดูรหัสของมันค่อนข้างตรงไปตรงมาฉันอาจพูดว่า ฉันหวังว่าพวกเขาจะรวมมัน (หรืออะไรทำนองนั้น) lme4โดยเฉพาะอย่างยิ่งตอนนี้ที่mcmcsamp()พังและผู้คนก็เหลือเพียงการปรับใช้ bootstrap แบบเฉพาะกิจของพวกเขาเองเพื่อรับค่า p ที่เหมาะสมและอื่น ๆ
usεr11852พูดว่า Reinstate Monic

ทรูมูฟโมเดลผสมไม่ตรงไปตรงมาในอาร์การประมาณจำนวนมากและวิธีแก้ไขปัญหา ... แม้ว่าฉันจะรวบรวม SAS และอื่น ๆ เพียงแค่คัดค้านความไม่แน่นอนบางอย่างที่เหมือนกัน Ben Bolker เป็นผู้เขียนร่วมในทั้งสองแพ็คเกจเขาอาจมีเหตุผลในการไม่รวมเข้าด้วยกัน อาจเป็นเวลา!
atrichornis

4
บูตบนขอบของพื้นที่พารามิเตอร์มีชุดของตัวเองของปัญหาและปัญหาที่นำไปสู่ความไม่สอดคล้องกัน bootstrap ไม่ใช่ยาครอบจักรวาลและไม่ควรโยนลงในถุงเบา ๆ โดยสมมติว่ามันจะแก้ปัญหาทุกอย่าง
StasK

2
ลองดูสิข้อโต้แย้งนั้นลึกซึ้งมาก เท่าที่ฉันจำได้มันทำให้ความจริงที่ว่าคุณทำบู๊ตสแตรปจากการกระจายที่แตกต่างจากโมฆะ และการแจกแจงที่ไม่ได้มาตรฐานที่ได้รับในขอบเขตเงื่อนไขความสม่ำเสมอถูกละเมิดและการกระจาย bootstrap ไม่ได้มาบรรจบกับเป้าหมาย ฉันคิดว่า bootstrap ที่ไม่ใช่พารามิเตอร์ยังสามารถสร้างได้ที่นี่ อย่างไรก็ตามด้วยการละเมิดความเป็นอิสระของการสังเกตระหว่างกลุ่มอาจเกิดภาวะแทรกซ้อนอีกชั้นหนึ่ง
StasK

3

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

ข้อเสนอของฉันคือการสร้างคอลัมน์เพิ่มเติมในข้อมูลของคุณที่มีค่าคงที่ 1:

IDconst <- factor(rep(1, each = length(tv$Velocity)))

จากนั้นคุณสามารถสร้างแบบจำลองที่ใช้คอลัมน์นี้เป็นเอฟเฟกต์แบบสุ่มของคุณ:

fm1 <- lmer(Velocity ~ D.CPC.min + FD.CPC + (1|IDconst), 
  REML = FALSE, family = gaussian, data = tv)

ณ จุดนี้คุณสามารถเปรียบเทียบ (AIC) โมเดลดั้งเดิมของคุณกับเอฟเฟกต์แบบสุ่มID(ลองเรียกมันว่าfm0) กับโมเดลใหม่ที่ไม่ได้คำนึงถึงIDเพราะIDconstมันเหมือนกันสำหรับข้อมูลทั้งหมดของคุณ

anova(fm0,fm1)

ปรับปรุง

user11852 กำลังขอตัวอย่างเพราะในความเห็นของเขา / เธอวิธีการข้างต้นจะไม่ได้ดำเนินการ ในทางตรงกันข้ามฉันสามารถแสดงให้เห็นว่าวิธีการทำงาน (อย่างน้อยกับlme4_0.999999-0ที่ฉันกำลังใช้)

set.seed(101)
dataset <- expand.grid(id = factor(seq_len(10)), fac1 = factor(c("A", "B"),
  levels = c("A", "B")), trial = seq_len(10))
dataset$value <- rnorm(nrow(dataset), sd = 0.5) +
      with(dataset, rnorm(length(levels(id)), sd = 0.5)[id] +
      ifelse(fac1 == "B", 1.0, 0)) + rnorm(1,.5)
    dataset$idconst <- factor(rep(1, each = length(dataset$value)))

library(lme4)
fm0 <- lmer(value~fac1+(1|id), data = dataset)
fm1 <- lmer(value~fac1+(1|idconst), data = dataset)

anova(fm1,fm0)

เอาท์พุท:

  Data: dataset
  Models:
  fm1: value ~ fac1 + (1 | idconst)
  fm0: value ~ fac1 + (1 | id)

      Df    AIC    BIC  logLik  Chisq Chi Df Pr(>Chisq)
  fm1  4 370.72 383.92 -181.36                      
  fm0  4 309.79 322.98 -150.89 60.936      0  < 2.2e-16 ***

จากการทดสอบครั้งล่าสุดนี้เราควรเก็บเอฟเฟกต์แบบสุ่มไว้เพราะfm0แบบจำลองนั้นมีค่า AIC ที่ต่ำที่สุดและ BIC

อัปเดต 2

โดยวิธีการเดียวกันนี้นำเสนอโดย NW Galwey ใน 'บทนำสู่การสร้างแบบจำลองผสม: เกินการถดถอยและการวิเคราะห์ความแปรปรวน' ในหน้า 213-214


คุณทดสอบความคิดของคุณแล้วหรือยัง? โปรดพิสูจน์ว่าฉันผิด แต่ฉันคิดว่าความคิดของคุณจะไม่ได้ดำเนินการ หากIDconstเหมือนกันกับข้อมูลทั้งหมดของคุณคุณจะไม่มีการจัดกลุ่มใด ๆ คุณต้องมีปัจจัยการจัดกลุ่มเพื่อให้มีอย่างน้อยหนึ่งระดับตัวอย่างและวิธีที่คุณตั้งค่าแบบจำลองมันไม่มีเลย ฉันอาจจะเชื่อเหตุผลของการใช้ "การจัดกลุ่มแบบสุ่ม" แต่นั่นเป็นเกมบอลที่แตกต่างกันทั้งหมด ทดสอบวิธีการของคุณด้วยข้อมูลจำลอง ฉันเชื่ออย่างยิ่งว่าด้วยการตั้งค่าที่คุณเสนอlmer()จะไม่ทำงาน (ฉันใช้lme4_0.99999911-1)
usεr11852พูดว่า Reinstate Monic

@ user11852 โปรดดูการอัปเดตของฉันและแจ้งให้เราทราบว่าวิธีการนี้ใช้ได้หรือlme4_0.99999911-1ไม่
VLC

ไม่มันไม่ทำงาน และฉันก็พูดว่า " ไม่ควร " เพราะโดยพื้นฐานแล้วคุณไม่มีโมเดลมิกซ์ตั้งแต่แรก (ขออภัยฉันอาจฟังดูก้าวร้าวในความคิดเห็นก่อนหน้าของฉัน) ฉันเดาว่าสิ่งที่คุณต้องการที่จะบรรลุคือตั้งค่าเมทริกซ์ให้เป็นเวกเตอร์รวม แต่ถ้าคุณไม่พบวิธีที่จะทำอย่างชัดเจนใน R (เช่น ฟังก์ชั่นการเบี่ยงเบนของตัวเอง) คุณกำลังโชคดี Z
usεr11852พูดว่า Reinstate Monic

3
ใช่ฉันทำในสิ่งที่คุณแนะนำ มันจะไม่ทำงาน / คำนวณ Error in lFormula(formula = value ~ fac1 + (1 | idconst), data = dataset) : grouping factors must have at least 1 sampled level. และอย่างที่ฉันพูดแล้วความคิดมันผิด ไม่ใช่เรื่องของการหลอกลวงซอฟต์แวร์เพื่อให้ตัวเลขบางอย่างมันเป็นเรื่องถ้าสิ่งที่คุณพูดมันสมเหตุสมผล คุณไม่มีรูปแบบผสมที่สองเพื่อเปรียบเทียบกับถ้าในรูปแบบนั้นเอฟเฟกต์แบบสุ่มคือการสร้างค่าคงที่ คุณอาจยกเว้นและลองใช้โมเดลเชิงเส้นแทน
usεr11852พูดว่า Reinstate Monic

1
ปรับปรุง concerting lme4กำหนดกลุ่มเดียวในตัวแปรสุ่ม control=lmerControl(check.nlev.gtr.1="ignore")ซึ่งสามารถทำได้ถ้าคุณตั้งค่าตัวเลือก: เบน Bolker กล่าวได้ที่นี่: github.com/lme4/lme4/issues/411
Robin Beaumont

1

ฉันต้องการตอบคำถาม 'เริ่มต้น' เพิ่มเติม

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

รูปแบบ Heteroskedasticity

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

Boxplot เพื่อตรวจสอบ heteroskedasticity

จากที่นี่คำตอบข้างต้นตอบคำถามหลักของคุณ นอกจากนี้ยังมีการทดสอบการตรวจสอบว่าสำหรับ heteroskedasticity หนึ่งดังกล่าวเป็นที่นี่ - https://dergipark.org.tr/download/article-file/94971 แต่ฉันไม่แน่ใจว่ามีการทดสอบใด ๆ เพื่อตรวจสอบ heteroskedasticity ระดับกลุ่มหรือไม่


โปรดใช้ฟิลด์ "คำตอบของคุณ" เพื่อให้คำตอบสำหรับคำถามของ OP CV เป็นเว็บไซต์ถาม - ตอบที่เข้มงวดไม่ใช่ฟอรัมสนทนา ส่วนหลังที่เป็นตัวหนาของโพสต์ของคุณเป็นคำถามใหม่ไม่ใช่คำตอบสำหรับคำถามนี้ หากคุณมีคำถามใหม่ให้คลิกที่สีเทาASK QUESTIONที่ด้านบนและถามคำถามที่นั่น เนื่องจากคุณใหม่ที่นี่คุณอาจต้องการเข้าชมทัวร์ของเราซึ่งมีข้อมูลสำหรับผู้ใช้ใหม่
gung - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.