आर में गैर-रैखिक मिश्रित प्रभाव प्रतिगमन


14

आश्चर्यजनक रूप से, मैं Google का उपयोग करते हुए निम्नलिखित प्रश्न का उत्तर नहीं पा रहा था:

मेरे पास कई व्यक्तियों के कुछ जैविक डेटा हैं जो समय में एक मोटे तौर पर वृद्धि के व्यवहार को दर्शाते हैं। इस प्रकार, मैं एक मानक लॉजिस्टिक विकास का उपयोग करके इसे मॉडल करना चाहता हूं

P(t) = k*p0*exp(r*t) / (k+p0*(exp(r*t)-1))

p0 के साथ t = 0 पर शुरुआती मूल्य होने के नाते, k को t-> इनफिनिटी पर asymptotic सीमा और विकास की गति होने के नाते। जहां तक ​​मैं देख सकता हूं, मैं आसानी से nls (मेरी ओर से समझ की कमी) का उपयोग करके इसे मॉडल कर सकता हूं: मैं समय और डेटा स्केल करके मानक लॉगिट रिग्रेशन का उपयोग करके कुछ समान क्यों नहीं कर सकता? EDIT: धन्यवाद निक, जाहिरा तौर पर लोग इसे पसंद करते हैं? अनुपात, लेकिन शायद ही कभी http://www.stata-journal.com/article.html?article=st0147 । इस स्पर्शरेखा पर अगला प्रश्न यह होगा कि क्या मॉडल संभवतः आउटलेर> 1 को संभाल सकता है।

अब मैं तीन पैरामीटर k, p0 और r पर कुछ फिक्स्ड (मुख्य रूप से श्रेणीबद्ध) और कुछ यादृच्छिक (एक व्यक्तिगत आईडी और संभवतः एक अध्ययन आईडी) प्रभाव की अनुमति देना चाहता हूं। क्या nlme ऐसा करने का सबसे अच्छा तरीका है? SSlogis मॉडल समझ में आता है कि मैं जो करने की कोशिश कर रहा हूं, क्या वह सही है? निम्नलिखित में से कोई एक समझदार मॉडल है जिसके साथ शुरू करना है? मैं शुरुआती मानों को सही और अद्यतन करने के लिए प्रतीत नहीं कर सकता () केवल यादृच्छिक प्रभावों के लिए काम करने लगता है, निश्चित नहीं - कोई संकेत?

nlme(y ~ k*p0*exp(r*t) / (k+p0*(exp(r*t)-1)), ## not working at all (bad numerical properties?)
            data = data,
            fixed = k + p0 + r ~ var1 + var2,
            random = k + p0 + r ~ 1|UID,
            start = c(p0=1, k=100, r=1))

nlme(y ~ SSlogis(t, Asym, xmid, scal), ## not working, as start= is inappropriate
            data = data,
            fixed = Asym + xmid + scal ~ var1 + var2, ## works fine with ~ 1
            random = Asym + xmid + scal ~ 1|UID,
            start = getInitial(y ~ SSlogis(Dauer, Asym, xmid, scal), data = data))

जैसा कि मैं विशेष रूप से गैर-रेखीय मिश्रित मॉडल के लिए नया हूं और सामान्य रूप से गैर-रैखिक मॉडल में, मैं नौसिखिया सवालों के साथ ट्यूटोरियल / एफएक्यू के लिए कुछ पढ़ने की सिफारिशों या लिंक की सराहना करता हूं।


2
यदि आप k को ज्ञात मानते हैं, तो आप P / k द्वारा अपनी आबादी को माप सकते हैं। यदि k का अनुमान लगाया जाना है, तो इसका मतलब है कि आपकी समस्या मानक लॉगिट प्रतिगमन नहीं है।
निक कॉक्स

1
थैंक यू निक। हां, अंत में मेरा मानना ​​है कि कश्मीर को अनुमान लगाने और प्रतिगमन में शामिल करने की आवश्यकता है। लॉज रिग्रेशन का उपयोग करने में मेरी रुचि विशुद्ध रूप से अकादमिक थी। मैंने सोचा कि गैर-रेखीय मॉडलिंग में जाने से पहले शुरू करने के लिए यह एक अच्छा मॉडल हो सकता है, लेकिन मैं Google का उपयोग करके गैर-बाइनरी डेटा के लिए लॉगिट प्रतिगमन के लिए कोई उदाहरण नहीं पा रहा था। मैं सोच रहा था कि क्या कोई कारण था (जैसे त्रुटियों के बारे में वितरण संबंधी धारणाएं) जो निरंतर डेटा के साथ एक लॉगजीआई लिंक के साथ जैसे ग्लमर का उपयोग करने के लिए एक बुरा विचार बनाती हैं।
रोब हॉल

3
प्रतिक्रियाओं के लिए लॉजिक मॉडलिंग जो लगातार अनुपात में हैं, कुछ समय के लिए आसपास रहे हैं, लेकिन प्रतीत होता है कि अच्छी तरह से ज्ञात नहीं है। उदाहरण के लिए बॉम को stata-journal.com/sjpdf.html?articlenum=st0147 पर देखें फिर भी यह आपकी स्थिति नहीं है। मैं आर कार्यान्वयन पर टिप्पणी नहीं कर सकता।
निक कॉक्स

इस दिलचस्प कड़ी के लिए निक का शुक्रिया - जो मेरे लिए कुछ चीजें साफ करता है। अफसोस की बात है, ऐसा लगता है कि मैं अभी तक आपकी प्रतिक्रिया को बढ़ा नहीं सकता। (यदि लोगों को सीधे लिंक तक पहुंचने में परेशानी होती है, तो निम्नलिखित ने मेरे लिए काम किया: stata-journal.com/article.html?article=st0147 )
रोब हॉल

1
लॉजिस्टिक ग्रोथ का मतलब है एक मोनोटोनिक उगता वक्र। यदि डेटा मेल नहीं खाता है, तो आपको एक खराब फिट मिलेगा या सॉफ्टवेयर नहीं चलेगा, जो आप कर रहे हैं उसके आधार पर।
निक कॉक्स

जवाबों:


12

मैं यह प्रश्न पूछने के बाद से सीखी गई कुछ चीजों को साझा करना चाहता था। गैर-रैखिक मिश्रित प्रभावों को मॉडल करने के लिए nlme एक उचित तरीका लगता है। एक साधारण आधार मॉडल के साथ शुरू करें:

library(nlme)
data <- groupedData(y ~ t | UID, data=data) ## not strictly necessary
initVals <- getInitial(y ~ SSlogis(t, Asym, xmid, scal), data = data)
baseModel<- nlme(y ~ SSlogis(t, Asym, xmid, scal),
    data = data,
    fixed = list(Asym ~ 1, xmid ~ 1, scal ~ 1),
    random = Asym + xmid + scal ~ 1|UID,
    start = initVals
)

फिर मॉडल जटिलता बढ़ाने के लिए अपडेट का उपयोग करें। प्रारंभ पैरामीटर के साथ काम करने के लिए थोड़ा मुश्किल है, यह आदेश निकालने के लिए कुछ छेड़छाड़ कर सकता है। ध्यान दें कि Asym पर var1 के लिए नया निश्चित प्रभाव कैसे Asym के लिए नियमित रूप से निश्चित प्रभाव का अनुसरण करता है।

 nestedModel <- update(baseModel, fixed=list(Asym ~ var1, xmid ~ 1, scal ~ 1), start = c(fixef(baseModel)[1], 0, fixef(baseModel)[2], fixef(baseModel)[3]))

lme4 मेरे डेटासेट में बाहरी लोगों के खिलाफ अधिक मजबूत लग रहा था और अधिक जटिल मॉडल के लिए अधिक विश्वसनीय अभिसरण की पेशकश कर रहा था। हालांकि, यह नकारात्मक पक्ष यह है कि प्रासंगिक संभावना कार्यों को मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता है। निम्नलिखित असमिया पर var1 (बाइनरी) के एक निश्चित प्रभाव के साथ लॉजिस्टिक ग्रोथ मॉडल है। आप एक समान फैशन में xmid और स्केल पर निश्चित प्रभाव जोड़ सकते हैं। परिणाम ~ निश्चित प्रभाव ~ यादृच्छिक प्रभाव के रूप में एक दोहरे सूत्र का उपयोग करके मॉडल को निर्दिष्ट करने के अजीब तरीके पर ध्यान दें।

library(lme4) ## careful loading nlme and lme4 concurrently
customLogitModel <- function(t, Asym, AsymVar1, xmid, scal) {
    (Asym+AsymVar1*var1)/(1+exp((xmid-t)/scal))
}

customLogitModelGradient <- deriv(
    body(customLogitModel)[[2]], 
    namevec = c("Asym", "AsymVar1", "xmid", "scal"), 
    function.arg=customLogitModel
)

## find starting parameters
initVals <- getInitial(y ~ SSlogis(t, Asym, xmid, scal), data = data)

# Fit the model
model <- nlmer(
    y ~ customLogitModelGradient(t=t, Asym, AsymVar1, xmid, scal, var1=var) ~ 
    # Random effects with a second ~
    (Asym | UID) + (xmid | UID) + (scal | UID), 
    data = data, 
    start = c(Asym=initVals[1], AsymVar1=0, xmid=initVals[2], scal=initVals[3])
)

1
अपनी पोस्ट के लिए धन्यवाद रॉब, यह वास्तव में वही है जो मैं अपने डेटा के साथ करने की कोशिश कर रहा हूं। मुझे समझ में नहीं आ रहा है कि Asym पर nestedModel में var1 क्या है और आपने इसकी गणना कैसे की?

आसिम पर कुछ चर के प्रभाव को कैसे शामिल किया जाए, इस पर यह केवल एक उदाहरण है: "निम्नलिखित असमिया पर var1 (बाइनरी) के निश्चित प्रभाव के साथ लॉजिस्टिक विकास मॉडल है।" उदाहरण के लिए, आपके पास चर "ट्रीटेड" है जिसमें दो मान 0 और 1 हैं, इसलिए "वैर 1" के लिए "ट्रीटेड" विकल्प दिया गया है।
PA6OTA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.