मैं एक डेटासेट पर मैच इट पैकेज से मोटे सटीक मिलान (सीईएम) मिलान विधि चला रहा हूं जिसमें ~ 18,300 पंक्तियां (यानी, प्रत्येक रोगी के लिए एक पंक्ति) शामिल हैं। मैं दो सहसंयोजकों पर रोगी मामलों का मिलान कर रहा हूं। दो सहसंयोजक निदान आयु (जिसमें 0 से 76 की सीमा होती है) और वर्तमान आयु (जिसमें 1 से 90 की सीमा होती है) हैं।

मैं 1:1 मिलान नहीं करना चाहता; बल्कि, मेरा लक्ष्य अधिक से अधिक रोगियों का मिलान करके डेटा हानि को कम करना है।

मेरा प्रश्न सटीक और अनुमानित संतुलन के बीच व्यापार-बंद को प्रबंधित करने का प्रयास करने से उत्पन्न होता है। मैं चाहता हूं कि मिलान किए गए व्यक्तियों का निदान और वर्तमान आयु कुल मिलाकर 2 वर्ष से अधिक न हो। (यदि 3 साल के अंतर के बहुत दुर्लभ उदाहरण अपरिहार्य हैं, तो यह ठीक है - लेकिन कुल मिलाकर, मैं अंतर को दो साल से अधिक नहीं रखना चाहता हूं।) दो साल का अंतर निदान उम्र में दो साल का अंतर हो सकता है। , वर्तमान आयु में दो वर्ष का अंतर, या निदान आयु और वर्तमान आयु के बीच कुल दो वर्षों का अंतर। विचार यह है कि मैं इन दो समूहों में व्यक्तियों की बीमारी की अवधि का मिलान करने का प्रयास करना चाहता हूं।

मैंने कटपॉइंट पैरामीटर के लिए कई अलग-अलग तर्कों की कोशिश की है। यहाँ एक उदाहरण है:

matchit <- matchit(Group ~ Last_recorded_age + Diagnosis_age, 
                   data = df,
                   method = 'cem',
                   cutpoints = list(Current_age = 44, Diagnosis_age = 38),
                  )

यह वर्तमान आयु को 44 डिब्बे में विभाजित करता है, इसलिए प्रत्येक बिन में आम तौर पर 2 वर्ष की सीमा होती है। और निदान आयु को डिब्बे में विभाजित किया जाता है जिसमें प्रत्येक में 2 वर्ष होते हैं। जब मैं इसे चलाता हूं, तो सभी 383 पंक्तियों को एक उपवर्ग सौंपा जाता है। जब मैं उन पंक्तियों को देखने के लिए match.data() का उपयोग करता हूं जिन्हें उपवर्ग सौंपा गया था, तो मैं देख सकता हूं कि केवल 25 पंक्तियां हैं जहां निदान और वर्तमान आयु 3 वर्ष से भिन्न होती है। बाकी 2 साल से अधिक नहीं बदलते हैं। तो यह अच्छा है - क्योंकि मैं यही चाहता हूं।

लेकिन जब मैं उन 383 पंक्तियों को देखता हूं जिन्हें उपवर्ग नहीं सौंपा गया था, तो मैं देखता हूं कि ऐसे मामले हैं जिन्हें एक उपवर्ग नहीं सौंपा गया था जिसकी मुझे उम्मीद थी कि उन्हें एक उपवर्ग सौंपा जाएगा, क्योंकि वे ऐसे मामलों के समान हैं जिन्हें सौंपा गया था उपवर्ग उदाहरण के लिए, उप-वर्गों में से एक में व्यक्तियों की एक जोड़ी होती है जहां इलाज किए गए व्यक्ति की वर्तमान आयु 31 वर्ष और निदान आयु 28 वर्ष है और नियंत्रण व्यक्ति की वर्तमान आयु 30 वर्ष और निदान आयु 29 है। लेकिन फिर मैं देखता हूं कि एक बेजोड़ नियंत्रण व्यक्ति है जिसकी वर्तमान आयु 31 वर्ष है और निदान आयु 30 वर्ष है। मैं सोच रहा हूं कि उस व्यक्ति को उस उपवर्ग में क्यों नहीं सौंपा गया जिसका मैंने अभी उल्लेख किया है?

क्या कटप्वाइंट को परिभाषित करने का कोई बेहतर तरीका है ताकि मैं दो समूहों के बीच अंतर को कम करते हुए अधिक से अधिक व्यक्तियों का मिलान कर सकूं?

0
erin489 24 जुलाई 2021, 20:12
स्टैक ओवरफ्लो में आपका स्वागत है। मैं साझा करता हूं मिलान के लिए PSM का उपयोग क्यों न करें< /a>, एक अच्छे पठन के रूप में, आप Cem का उपयोग कर रहे हैं और आपके पास cem इंस्टॉल करके इसे सीधे उपयोग करने का विकल्प है, और शायद यह MatchingFrontier अपने 383/18300 [1] 0.02092896 बिना सिर के खरोंच की जांच करने के लिए। मैं जितना जानता हूं, कह चुका हूं...
 – 
Chris
25 जुलाई 2021, 00:31
मैंने मैचिंगफ्रंटियर पैकेज के बारे में तब तक नहीं सुना था जब तक आपने इसका उल्लेख यहां नहीं किया था। यह एक बहुत ही उपयोगी पैकेज की तरह दिखता है। धन्यवाद, क्रिस!
 – 
erin489
27 जुलाई 2021, 07:31

1 उत्तर

सबसे बढ़िया उत्तर

प्रतीत होता है कि करीब बेजोड़ इकाइयों के साथ घटना का सरल कारण यह है कि वे अन्य उपचार मूल्य वाली इकाइयों के समान स्तर में नहीं आते हैं। CEM निकटता से संबंधित नहीं है; यह केवल सहसंयोजक स्थान के डिब्बे पर विचार करता है। आपके द्वारा बताए गए कारणों के लिए बिनिंग हमेशा सबसे अच्छा समाधान नहीं होता है: दो इकाइयां बेहद करीब हो सकती हैं लेकिन एक बिन सीमा से अलग हो सकती हैं, उन्हें अलग-अलग स्तरों में रख सकती हैं या कुछ बेजोड़ छोड़ सकती हैं।

एक वैकल्पिक समाधान एक कैलीपर का उपयोग करना होगा, जो वैसे भी अधिक लगता है जो आप चाहते हैं। आप अधिक से अधिक इकाइयों को बनाए रखने के लिए पूर्ण मिलान वाले कैलीपर का उपयोग कर सकते हैं। पूर्ण मिलान उपचारित और नियंत्रण इकाइयों के बीच कुल अंतर-स्तर की दूरी को कम करके या तो ठीक एक उपचारित इकाई या ठीक एक नियंत्रण इकाई के साथ स्तर बनाता है। एक कैलीपर यह सुनिश्चित करता है कि प्रत्येक परत में उपचारित और नियंत्रण इकाइयों के बीच की दूरी को नियंत्रित किया जाता है। आप सीधे सहसंयोजकों पर कैलीपर सेट कर सकते हैं। उदाहरण के लिए, यह सुनिश्चित करने के लिए कि स्तर के भीतर इकाइयाँ 2 वर्ष की आयु से अधिक नहीं हैं और आयु और निदान आयु के बीच 2 वर्ष की दूरी है, आप निम्नलिखित कोड का उपयोग करेंगे:

matchit <- matchit(Group ~ Last_recorded_age + Diagnosis_age, 
                   data = df, distance = "mahalanobis",
                   method = "full",
                   caliper = c(Last_recorded_age = 2, Diagnosis_age = 2),
                   std.caliper = FALSE)

इतनी सारी इकाइयों के साथ, यह सामान्य रूप से धीमा होगा, लेकिन इतने तंग कैलिपर के साथ, इसमें इतना समय नहीं लग सकता है।

अन्यथा, सीईएम से निपटने के लिए मेरी एकमात्र सलाह है कि जब तक आपको अपनी पसंद का नमूना न मिल जाए, तब तक कटपॉइंट्स को मैन्युअल रूप से समायोजित करें। यह मत भूलो कि आप कटपॉइंट्स की आपूर्ति स्वयं कर सकते हैं, न कि केवल डिब्बे की संख्या।

0
Noah 25 जुलाई 2021, 12:03
आपके अतिरिक्त स्पष्टीकरण के लिए धन्यवाद, क्योंकि मैं समझ नहीं पा रहा था कि CEM काम कर रहा है। आपके द्वारा यहां साझा किया गया कोड ठीक वही पूरा करता है जिसकी मुझे आवश्यकता थी। इसके साथ आपकी मदद के लिए बहुत-बहुत धन्यवाद, नूह - बहुत सराहना की!
 – 
erin489
27 जुलाई 2021, 07:29