आर [कोड और आउटपुट शामिल] में यादृच्छिक प्रभावों के साथ एक टूटी हुई छड़ी / टुकड़ा रेखीय मॉडल में ब्रेक पॉइंट का अनुमान लगाना


14

क्या कोई मुझे बता सकता है कि आर को एक टुकड़े-टुकड़े रैखिक मॉडल (एक निश्चित या यादृच्छिक पैरामीटर के रूप में) में ब्रेक प्वाइंट का अनुमान कैसे लगाया गया है, जब मुझे अन्य यादृच्छिक प्रभावों का अनुमान लगाने की आवश्यकता है?

मैंने नीचे एक खिलौना उदाहरण को शामिल किया है जो यादृच्छिक ढलान के साथ हॉकी स्टिक / टूटी हुई छड़ी प्रतिगमन और ब्रेक प्वाइंट के लिए एक यादृच्छिक वाई-इंटरसेप्ट विचरण को फिट करता है। मैं इसे निर्दिष्ट करने के बजाय ब्रेक प्वाइंट का अनुमान लगाना चाहता हूं। यह एक यादृच्छिक प्रभाव (बेहतर) या एक निश्चित प्रभाव हो सकता है।

library(lme4)
str(sleepstudy)

#Basis functions
bp = 4
b1 <- function(x, bp) ifelse(x < bp, bp - x, 0)
b2 <- function(x, bp) ifelse(x < bp, 0, x - bp)

#Mixed effects model with break point = 4
(mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy))

#Plot with break point = 4
xyplot(
        Reaction ~ Days | Subject, sleepstudy, aspect = "xy",
        layout = c(6,3), type = c("g", "p", "r"),
        xlab = "Days of sleep deprivation",
        ylab = "Average reaction time (ms)",
        panel = function(x,y) {
        panel.points(x,y)
        panel.lmline(x,y)
        pred <- predict(lm(y ~ b1(x, bp) + b2(x, bp)), newdata = data.frame(x = 0:9))
            panel.lines(0:9, pred, lwd=1, lty=2, col="red")
        }
    )

आउटपुट:

Linear mixed model fit by REML 
Formula: Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject) 
   Data: sleepstudy 
  AIC  BIC logLik deviance REMLdev
 1751 1783 -865.6     1744    1731
Random effects:
 Groups   Name         Variance Std.Dev. Corr          
 Subject  (Intercept)  1709.489 41.3460                
          b1(Days, bp)   90.238  9.4994  -0.797        
          b2(Days, bp)   59.348  7.7038   0.118 -0.008 
 Residual               563.030 23.7283                
Number of obs: 180, groups: Subject, 18

Fixed effects:
             Estimate Std. Error t value
(Intercept)   289.725     10.350  27.994
b1(Days, bp)   -8.781      2.721  -3.227
b2(Days, bp)   11.710      2.184   5.362

Correlation of Fixed Effects:
            (Intr) b1(D,b
b1(Days,bp) -0.761       
b2(Days,bp) -0.054  0.181

टूटी हुई छड़ी प्रतिगमन प्रत्येक व्यक्ति के लिए उपयुक्त है


1
बीपी एक यादृच्छिक प्रभाव बनाने का कोई तरीका?
djhocking

जवाबों:


20

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

library(lme4)
str(sleepstudy)

#Basis functions
bp = 4
b1 <- function(x, bp) ifelse(x < bp, bp - x, 0)
b2 <- function(x, bp) ifelse(x < bp, 0, x - bp)

#Wrapper for Mixed effects model with variable break point
foo <- function(bp)
{
  mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy)
  deviance(mod)
}

search.range <- c(min(sleepstudy$Days)+0.5,max(sleepstudy$Days)-0.5)
foo.opt <- optimize(foo, interval = search.range)
bp <- foo.opt$minimum
bp
[1] 6.071932
mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy)

ब्रेकपॉइंट के लिए एक आत्मविश्वास अंतराल प्राप्त करने के लिए, आप प्रोफ़ाइल संभावना का उपयोग कर सकते हैं । जोड़ें, उदाहरण के qchisq(0.95,1)लिए, न्यूनतम विचलन के लिए (एक 95% विश्वास अंतराल के लिए) फिर उन बिंदुओं की खोज करें जहां foo(x)गणना मूल्य के बराबर है:

foo.root <- function(bp, tgt)
{
  foo(bp) - tgt
}
tgt <- foo.opt$objective + qchisq(0.95,1)
lb95 <- uniroot(foo.root, lower=search.range[1], upper=bp, tgt=tgt)
ub95 <- uniroot(foo.root, lower=bp, upper=search.range[2], tgt=tgt)
lb95$root
[1] 5.754051
ub95$root
[1] 6.923529

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


धन्यवाद - जो बहुत मददगार था। क्या इस तकनीक को दो-चरण अनुमान प्रक्रिया कहा जाता है, या क्या इसका कोई मानक नाम है जिसे मैं देख / देख सकता हूं?
लॉकऑफ

यह अधिकतम संभावना है, या होगा यदि ऋणदाता ने संभावना को अधिकतम किया है (मुझे लगता है कि डिफ़ॉल्ट वास्तव में REML है, तो आपको एमएल अनुमान प्राप्त करने के लिए एक पैरामीटर REML = FALSE टू lmer पास करना होगा)। एक बार में सभी के बजाय एक नेस्टेड तरीके से अनुमान लगाया गया। मैंने उत्तर के सामने कुछ स्पष्टीकरण जोड़ा है।
जम्मन

जब मेरे वास्तविक डेटा के साथ प्रोफाइल की संभावना बढ़ रही थी, तो मुझे कुछ अनुकूलन समस्याएँ और व्यापक CI थे, लेकिन मेरे कार्यान्वयन में संकरी बूटस्ट्रैप CI को मिला। क्या आप विषयों के डेटा वैक्टर पर प्रतिस्थापन के साथ नमूने के साथ एक गैर-पैरामीट्रिक बूटस्ट्रैप की कल्पना कर रहे थे? यानी, स्लीपस्टूडि डेटा के लिए, यह 10 डेटा पॉइंट्स के 18 (सब्जेक्ट) वैक्टर से रिप्लेसमेंट के साथ सैंपल को किसी भी सब्जेक्ट के डेटा वेक्टर के भीतर रीसम्प्लिमेंट किए बगैर देगा।
लॉकऑफ़

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

5

जुम्मन द्वारा प्रस्तावित समाधान बहुत अच्छा है, बस कुछ सैद्धांतिक टिप्पणी जोड़ रहा है:

  • उपयोग किए जाने वाले संकेतक फ़ंक्शन की असंगति को देखते हुए, कई स्थानीय मिनीमा के साथ प्रोफ़ाइल-संभावना अत्यधिक अनियमित हो सकती है, इसलिए सामान्य ऑप्टिमाइज़र काम नहीं कर सकते हैं। इस तरह के "दहलीज मॉडल" के लिए सामान्य समाधान अधिक बोझिल ग्रिड खोज के बजाय उपयोग करना है, प्रत्येक संभव एहसास ब्रेकपॉइंट / थ्रेशोल्ड दिनों (और बीच में मूल्यों पर नहीं, जैसा कि कोड में किया गया है) पर निर्भरता का मूल्यांकन करना। नीचे कोड देखें।

  • इस गैर-मानक मॉडल के भीतर, जहां ब्रेकपॉइंट का अनुमान लगाया गया है, डिवोर्स आमतौर पर मानक वितरण नहीं होता है। आमतौर पर अधिक जटिल प्रक्रियाओं का उपयोग किया जाता है। नीचे हैनसेन (2000) का संदर्भ देखें।

  • बूटस्ट्रैप न तो हमेशा इस संबंध में संगत है, नीचे यू (आगामी) देखें।

  • अंत में, यह मेरे लिए स्पष्ट नहीं है कि आप डेटा को केवल दिनों के बजाय डेज़ (यानी, bp - x) के चारों ओर फिर से केंद्रित करके क्यों परिवर्तित कर रहे हैं। मैं दो मुद्दों को देखता हूं:

    1. इस प्रक्रिया के साथ, आप कृत्रिम दिन बनाते हैं जैसे कि 6.1 दिन, 4.1 आदि। मुझे यकीन नहीं है कि उदाहरण के लिए 6.07 के परिणाम की व्याख्या कैसे करें, क्योंकि आपने केवल दिन 6 और दिन 7 के लिए मान देखा था? (एक मानक ब्रेकपॉइंट मॉडल में, 6 और 7 के बीच की सीमा का कोई भी मूल्य आपको समान रूप से देना चाहिए / विचलन)
    2. b1 और b2 का विपरीत अर्थ है, क्योंकि b2 दिनों के लिए कम हो रहा है, जबकि b2 के लिए बढ़ रहा है? तो बिना ब्रेकपॉइंट के अनौपचारिक परीक्षण बी 1 है! = - बी 2

इसके लिए मानक संदर्भ हैं:

  • स्टैंडर्ड ओएलएस: हैनसेन (2000) सैंपल स्प्लिटिंग और थ्रेसहोल्ड एस्टिमेशन, इकोनोमेट्रिक, वॉल्यूम। 68, नंबर 3. (मई, 2000), पीपी। 575-603।
  • अधिक विदेशी मॉडल: ली, एसईओ, शिन (2011) प्रतिगमन मॉडल में थ्रेशोल्ड प्रभावों के लिए परीक्षण, अमेरिकन स्टेटिस्टिकल एसोसिएशन (थ्योरी एंड मेथड्स) (2011), 106, 220-231 के जर्नल
  • पिंग यू (आगामी) थ्रेशोल्ड रिग्रेशन में बूटस्ट्रैप ", इकोनोमेट्रिक थ्योरी।

कोड:

# Using grid search over existing values:
search.grid <- sort(unique(subset(sleepstudy, Days > search.range[1] &
Days<search.range[2], "Days", drop=TRUE)))

res <- unlist(lapply(as.list(search.grid), foo))

plot(search.grid, res, type="l")
bp_grid <- search.grid[which.min(res)]

0

आप एक MARS मॉडल आज़मा सकते हैं । हालाँकि, मुझे यकीन नहीं है कि यादृच्छिक प्रभाव कैसे निर्दिष्ट करें। earth(Reaction~Days+Subject, sleepstudy)


1
धन्यवाद - मैं पैकेज प्रलेखन के माध्यम से ब्राउज़ किया गया था लेकिन यह यादृच्छिक प्रभावों का समर्थन नहीं करता था।
लॉकऑफ

0

यह एक कागज है जो मिश्रित प्रभाव का प्रस्ताव करता है। जैसा कि @lockedoff ने उल्लेख किया है, मुझे किसी भी पैकेज में समान कार्यान्वयन नहीं दिखता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.