ฉันจะระบุขนาดตัวอย่างด้วย matchit() ใน R ได้อย่างไร

ฉันมีกรอบข้อมูลที่มีผู้เข้าร่วมการทดลอง 120 ราย และตัวควบคุม 147 รายการ ฉันต้องการให้ 100 สองกลุ่มตรงกับอายุ เพศ และ BMI

การใช้แพ็คเกจ MatchIt:

match.it <- matchit(group ~ age + sex + bmi , data, method="nearest", ratio=1)
summary(match.it)$nn  #return sample sizes
          Control Treated
All           147     120
Matched       120     120
Unmatched      27       0
Discarded       0       0

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

  1. มีวิธีการทำที่ฉันมองข้ามหรือไม่?
  2. ถ้าไม่ มีวิธีดำเนินการโดยใช้เมตริก 'ระยะทาง' ที่ส่งคืนโดย match.data() หรือไม่
  3. หาก MatchIt ไม่ใช่แพ็คเกจที่เหมาะสมสำหรับสิ่งนี้ คุณรู้จักแพ็คเกจที่ดีกว่านี้หรือไม่?

ขอบคุณ


อัปเดต: ฉันสามารถส่งคืนวิชาที่ตรงกันได้โดยใช้ summary(match.it)$match.matrix และใส่ไว้ใน data frame ใหม่ ฉันยังรวมระยะทางและคำนวณความแตกต่างระหว่างระยะทางสำหรับแต่ละคู่ด้วย หากจะใช้สิ่งนี้เพื่อเลือก 100 คู่ ควรเลือกคู่ที่มีระยะทางต่างกันน้อยที่สุด หรือระยะทางเฉลี่ยน้อยที่สุด หรืออย่างอื่น ฉันไม่คุ้นเคยกับคณิตศาสตร์มากพอที่จะรู้วิธีตีความระยะทาง

แก้ไข: แก้ไขข้อผิดพลาดในโค้ด


person Bart    schedule 26.02.2018    source แหล่งที่มา
comment
นี่คงจะง่ายกว่าที่จะตอบถ้าเราเห็น data นอกจากนี้ มันควรจะเป็น summary(match.it) ไม่ใช่ summary(match.it.1) ใช่ไหม ความเป็นไปได้อย่างหนึ่งคือการแยกชื่อแถวที่ตรงกันจาก match.it$match.matrix ใช้ชื่อเหล่านั้นเพื่อสับเซ็ตเฟรมข้อมูลดั้งเดิม จากนั้นใช้บางอย่างเช่น dplyr::sample_n() เพื่อรับแถวที่ตรงกันแบบสุ่มตัวอย่าง 100 แถว   -  person neilfws    schedule 27.02.2018
comment
ขอบคุณที่ชี้ให้เห็นการพิมพ์ผิด Neilfws ขณะที่ฉันอัปเดต ฉันดึงคู่ที่ตรงกัน แต่กำลังคิดที่จะใช้ระยะทางเพื่อเลือกคู่ที่ตรงกันมากที่สุด คุณคิดว่าการสุ่มตัวอย่างจะดีกว่าหรือไม่ เพราะเหตุใด ฉันคิดว่ามันไม่สำคัญมากนักตราบใดที่ความแตกต่างระหว่างกลุ่มอายุ เพศ และ BMI เป็นที่ยอมรับได้   -  person Bart    schedule 27.02.2018
comment
ฉันถือว่าตัวอย่างสุ่มตามเกณฑ์ของคุณ เก็บกลุ่มควบคุม 100 รายการและตัวอย่างที่ได้รับการบำบัด 100 รายการ แต่ฉันไม่ต้องการระบุว่ารายการใด หากคุณต้องการแมตช์ที่ดีที่สุด 100 นัดตามระยะทาง นั่นเป็นเกณฑ์ที่แตกต่างออกไป ฉันเดาว่าอันไหนดีกว่านั้นขึ้นอยู่กับขั้นตอนต่อไป ตัวอย่างเช่น คุณอาจต้องการสุ่มตัวอย่างและดูว่าผลลัพธ์สามารถเปรียบเทียบได้หรือไม่   -  person neilfws    schedule 27.02.2018
comment
คุณยังอาจพิจารณาการจับคู่แบบตรงทั้งหมดกับเพศด้วย เนื่องจากการจับคู่ตามระยะทางนั้นค่อนข้างจะงี่เง่าสำหรับตัวแปรนี้ ฉันไม่ได้เล่นกับ matchit แต่ฉันรู้ว่าแพ็คเกจ Matching มีอาร์กิวเมนต์ที่แน่นอน อย่างอื่นที่จะคิดเกี่ยวกับ.   -  person lmo    schedule 27.02.2018


คำตอบ (1)


ฉันจะให้คำอธิบายสั้น ๆ เกี่ยวกับวิธีแก้ปัญหาของฉัน จากนั้นลองกลับมาพร้อมคำอธิบายโดยละเอียดเพิ่มเติม รวมถึงโค้ดบางส่วนเมื่อฉันมีเวลามากขึ้น

ฟังก์ชัน matchit() จะส่งคืนรายการกรณีที่ตรงกันตามหมายเลขแถว [["matched.matrix"]] และฟังก์ชัน match.data() จะส่งคืนกรณีการจับคู่ด้วยข้อมูลต้นฉบับ รวมถึงเมตริกระยะทางสำหรับแต่ละกรณีเป็น คำนวณโดยวิธีเพื่อนบ้านที่ใกล้ที่สุด

ตอนนี้ โปรดจำไว้ว่าฉันไม่รู้วิธีตีความหน่วยเมตริกระยะทางจริงๆ ดังนั้นฉันจึงลองใช้วิธีต่างๆ หลายวิธีในการเลือก 100 คู่ที่ดีที่สุด ฉันสร้างกรอบข้อมูลโดยให้แต่ละคู่เรียงกันเป็นแถว และคำนวณความแตกต่างสัมบูรณ์ของระยะทางและค่าเฉลี่ยของระยะทาง จากนั้น ฉันทดสอบชุดย่อยที่แตกต่างกัน 100 คู่สำหรับการทดสอบค่าทีอายุ เพศ และค่าดัชนีมวลกายระหว่างกลุ่มที่รักษาและกลุ่มควบคุม ห้ากลุ่มได้แก่ 1. คู่ที่สุ่มเลือก 100 คู่ 2. 100 อันดับแรกขึ้นอยู่กับระยะทางเฉลี่ย 3. 100 อันดับแรกขึ้นอยู่กับระยะทางเฉลี่ย 4. 100 อันดับแรกขึ้นอยู่กับความแตกต่างของระยะทาง และ 5. 100 อันดับแรกขึ้นอยู่กับความแตกต่างของระยะทาง

ในชุดข้อมูลของฉัน กลุ่ม #5 ให้ผลลัพธ์ที่ดีที่สุด (ความแตกต่างที่มีนัยสำคัญน้อยที่สุดระหว่างกลุ่มตามอายุ เพศ และ BMI) ฉันไม่ทราบแน่ชัดว่าผลลัพธ์เหล่านี้จะขยายไปยังชุดข้อมูลอื่นๆ แต่ก็สมเหตุสมผลถ้าความแตกต่างที่ใกล้กว่าหมายถึงกรณีที่ใกล้เคียงกันมากขึ้น

ขออภัยหากคำอธิบายของฉันไม่ชัดเจนนัก ฉันจะพยายามกลับมาแก้ไขในภายหลังเพื่อเพิ่มโค้ดตัวอย่างและทำความสะอาด

person Bart    schedule 27.02.2018