অ-রৈখিক মিশ্র মডেলের (এনএলএম) জন্য ভবিষ্যদ্বাণীগুলির উপর আস্থা অন্তর


12

আমি একটি অ-রৈখিক মিশ্র nlmeমডেলের ভবিষ্যদ্বাণীগুলির উপর 95% আস্থা অন্তর পেতে চাই । এর মধ্যে এটি করার জন্য কোনও স্ট্যান্ডার্ড সরবরাহ করা হয়নি nlme, তাই আমি ভাবছিলাম যে "জনসংখ্যার পূর্বাভাস অন্তর" এর পদ্ধতিটি ব্যবহার করা সঠিক কিনা , ধারণাটির ভিত্তিতে সর্বাধিক সম্ভাবনার সাথে মডেলগুলির প্রসঙ্গে বেন বলকারের বইয়ের অধ্যায়ে বর্ণিত ফিটেড মডেলের ভেরিয়েন্স-কোভারিয়েন্স ম্যাট্রিক্সের উপর ভিত্তি করে স্থির প্রভাবের পরামিতিগুলি পুনরায় তৈরি করা, এর উপর ভিত্তি করে পূর্বাভাসগুলি সিমুলেট করা এবং তারপরে 95% আস্থা অন্তর পেতে এই পূর্বাভাসের 95% পার্সেন্টাইল নেওয়া?

এটি করার কোডটি নিম্নরূপ দেখায়: (আমি এখানে nlmeসহায়তা ফাইলের 'লবলিলি' ডেটা ব্যবহার করি )

library(effects)
library(nlme)
library(MASS)

fm1 <- nlme(height ~ SSasymp(age, Asym, R0, lrc),
    data = Loblolly,
    fixed = Asym + R0 + lrc ~ 1,
    random = Asym ~ 1,
    start = c(Asym = 103, R0 = -8.5, lrc = -3.3))

xvals=seq(min(Loblolly$age),max(Loblolly$age),length.out=100)
nresamp=1000
pars.picked = mvrnorm(nresamp, mu = fixef(fm1), Sigma = vcov(fm1)) # pick new parameter values by sampling from multivariate normal distribution based on fit
yvals = matrix(0, nrow = nresamp, ncol = length(xvals))

for (i in 1:nresamp) 
{
    yvals[i,] = sapply(xvals,function (x) SSasymp(x,pars.picked[i,1], pars.picked[i,2], pars.picked[i,3]))
} 

quant = function(col) quantile(col, c(0.025,0.975)) # 95% percentiles
conflims = apply(yvals,2,quant) # 95% confidence intervals

এখন যে আমার আত্মবিশ্বাসের সীমা রয়েছে আমি একটি গ্রাফ তৈরি করেছি:

meany = sapply(xvals,function (x) SSasymp(x,fixef(fm1)[[1]], fixef(fm1)[[2]], fixef(fm1)[[3]]))

par(cex.axis = 2.0, cex.lab=2.0)
plot(0, type='n', xlim=c(3,25), ylim=c(0,65), axes=F, xlab="age", ylab="height");
axis(1, at=c(3,1:5 * 5), labels=c(3,1:5 * 5)) 
axis(2, at=0:6 * 10, labels=0:6 * 10)   

for(i in 1:14)
{
    data = subset(Loblolly, Loblolly$Seed == unique(Loblolly$Seed)[i])   
    lines(data$age, data$height, col = "red", lty=3)
}

lines(xvals,meany, lwd=3)
lines(xvals,conflims[1,])
lines(xvals,conflims[2,])

95% আত্মবিশ্বাসের ব্যবধানের সাথে এইভাবে প্লটটি এখানে পেয়েছে:

সমস্ত ডেটা (লাল রেখা), মানে এবং আত্মবিশ্বাসের সীমা (কালো রেখা)

এই পদ্ধতিটি কি বৈধ, বা ননলাইনার মিশ্র মডেলের পূর্বাভাসগুলির উপর 95% আস্থা অন্তর গণনা করার জন্য অন্য কোনও বা আরও ভাল পন্থা রয়েছে? মডেলটির এলোমেলো প্রভাবের স্টাকচারকে কীভাবে মোকাবিলা করতে হবে তা সম্পর্কে আমি পুরোপুরি নিশ্চিত নই ... সম্ভবত এলোমেলো প্রভাবের মাত্রার চেয়ে একজনের গড় হওয়া উচিত? অথবা গড়পড়তা বিষয়ের জন্য আত্মবিশ্বাসের অন্তর অন্তর্ভুক্ত করা কি ঠিক হবে, যা আমার কাছে এখনকার চেয়ে নিকটে বলে মনে হচ্ছে?


এখানে একটি প্রশ্ন নেই। আপনি যা জিজ্ঞাসা করছেন সে সম্পর্কে পরিষ্কার হন be
অ্যাডুনাইক

আমি এখন প্রশ্নটি আরও সুস্পষ্টভাবে সূত্রিত করার চেষ্টা করেছি ...
পিয়াত ভ্যান ডেন বার্গ

আপনি যখন স্ট্যাক ওভারফ্লোতে আগে জিজ্ঞাসা করেছিলেন তখন আমি যেমন মন্তব্য করেছি, আমি অ-রৈখিক প্যারামিটারের জন্য স্বাভাবিকতা অনুমানযোগ্য ন্যায্যতা পাচ্ছি না।
রোল্যান্ড

আমি বেনের বইটি পড়িনি, তবে তিনি এই অধ্যায়ে মিশ্র মডেলগুলি উল্লেখ করেছেন বলে মনে হয় না। তাঁর বইয়ের উল্লেখ করার সময় আপনার এই বিষয়টি স্পষ্ট করা উচিত।
রোল্যান্ড

হ্যাঁ এটি সর্বাধিক সম্ভাবনার মডেলগুলির প্রসঙ্গে ছিল, তবে ধারণাটি একই হওয়া উচিত ... আমি এখনই এটি স্পষ্ট করে দিয়েছি ...
পিট ভ্যান ড্যান বার্গ

উত্তর:


10

আপনি এখানে যা করেছেন তা যুক্তিসঙ্গত দেখাচ্ছে। সংক্ষিপ্ত উত্তরটি হ'ল বেশিরভাগ অংশে মিশ্র মডেলগুলি এবং ননলাইনার মডেলগুলি থেকে আত্মবিশ্বাসের ব্যবধানগুলি পূর্বাভাস দেওয়ার বিষয়গুলি কম-বেশি অরথোগোনাল , এটি হ'ল উভয় সমস্যার সম্পর্কে আপনার চিন্তা করা দরকার, তবে তারা তা করেন না (যা আমি জানি এর) যে কোনও অদ্ভুত উপায়ে ইন্টারঅ্যাক্ট করুন।

  • মিশ্র মডেল সমস্যাগুলি : আপনি জনসংখ্যা বা গোষ্ঠী পর্যায়ে ভবিষ্যদ্বাণী করার চেষ্টা করছেন? এলোমেলো-প্রভাবের পরামিতিগুলিতে আপনি পরিবর্তনশীলতার জন্য কীভাবে অ্যাকাউন্ট করবেন? আপনি কি গ্রুপ-পর্যায়ের পর্যবেক্ষণগুলিতে কন্ডিশনার করছেন নাকি?
  • ননলাইনার মডেল বিষয়গুলি : পরামিতিগুলির নমুনা বিতরণ কি সাধারণ? ত্রুটি প্রচারের সময় আমি কীভাবে অনৈখিকতার জন্য অ্যাকাউন্ট করব?

সামগ্রিকভাবে, আমি ধরে নেব যে আপনি জনসংখ্যা স্তরে পূর্বাভাস দিচ্ছেন এবং জনসংখ্যা স্তর হিসাবে আত্মবিশ্বাসের ব্যবধানগুলি তৈরি করছেন - অন্য কথায় আপনি একটি সাধারণ গোষ্ঠীর পূর্বাভাসিত মানগুলি সাজাতে চেষ্টা করছেন , এবং আপনার আত্মবিশ্বাসের মধ্যে গ্রুপ-পার্থক্যকে অন্তর্ভুক্ত করবেন না অন্তর। এটি মিশ্র-মডেল সমস্যাগুলিকে সরল করে। নিম্নলিখিত প্লটগুলি তিনটি পদ্ধতির তুলনা করে (কোড ডাম্পের জন্য নীচে দেখুন):

  • জনসংখ্যার পূর্বাভাস অন্তর : আপনি উপরে চেষ্টা করেছেন এমন পদ্ধতি। এটি ধরে নেয় যে মডেলটি সঠিক এবং স্থির-কার্যকর পরামিতিগুলির নমুনা বিতরণগুলি মাল্টিভারিয়েট নরমাল; এটি এলোমেলো-প্রভাবের পরামিতিগুলিতে অনিশ্চয়তাও উপেক্ষা করে
  • বুটস্ট্র্যাপিং : আমি শ্রেণিবদ্ধ বুটস্ট্র্যাপিং প্রয়োগ করেছি; আমরা গ্রুপ পর্যায়ে এবং গোষ্ঠীর মধ্যে উভয়ই নমুনা। গোষ্ঠীগুলির মধ্যে নমুনা দেওয়ার ফলে অবশিষ্টাংশের নমুনা হয়ে থাকে এবং সেগুলিকে পূর্বাভাসে আবার যুক্ত করে। এই পদ্ধতির মাধ্যমে স্বল্পতম অনুমান করা যায়।
  • বদ্বীপ পদ্ধতি : এটি উভয়ই নমুনা বিতরণ সাধারণের স্বাভাবিকতা ধরে নিয়েছে এবং অন-লাইনারিটি দ্বিতীয়-আদেশের প্রায় অনুমানের অনুমতি দিতে যথেষ্ট দুর্বল।

আমরা প্যারামেট্রিক বুটস্ট্র্যাপিংও করতে পারি ...

এখানে ডেটা সহ সিআইও প্লট করা হয়েছে ...

এখানে চিত্র বর্ণনা লিখুন

... তবে আমরা পার্থক্য খুব কমই দেখতে পাচ্ছি।

পূর্বাভাসিত মানগুলি বাদ দিয়ে জুম ইন করুন (লাল = বুটস্ট্র্যাপ, নীল = পিপিআই, সায়ান = ডেল্টা পদ্ধতি)

এখানে চিত্র বর্ণনা লিখুন

এই ক্ষেত্রে বুটস্ট্র্যাপের অন্তরগুলি আসলে সংকীর্ণ (উদাহরণস্বরূপ পরামিতিগুলির নমুনা বিতরণগুলি স্বাভাবিকের তুলনায় আসলে কিছুটা পাতলা-লেজযুক্ত থাকে), পিপিআই এবং ডেল্টা-পদ্ধতির অন্তর একে অপরের সাথে খুব মিল থাকে similar

library(nlme)
library(MASS)

fm1 <- nlme(height ~ SSasymp(age, Asym, R0, lrc),
            data = Loblolly,
            fixed = Asym + R0 + lrc ~ 1,
            random = Asym ~ 1,
            start = c(Asym = 103, R0 = -8.5, lrc = -3.3))

xvals <-  with(Loblolly,seq(min(age),max(age),length.out=100))
nresamp <- 1000
## pick new parameter values by sampling from multivariate normal distribution based on fit
pars.picked <- mvrnorm(nresamp, mu = fixef(fm1), Sigma = vcov(fm1))

## predicted values: useful below
pframe <- with(Loblolly,data.frame(age=xvals))
pframe$height <- predict(fm1,newdata=pframe,level=0)

## utility function
get_CI <- function(y,pref="") {
    r1 <- t(apply(y,1,quantile,c(0.025,0.975)))
    setNames(as.data.frame(r1),paste0(pref,c("lwr","upr")))
}

set.seed(101)
yvals <- apply(pars.picked,1,
               function(x) { SSasymp(xvals,x[1], x[2], x[3]) }
)
c1 <- get_CI(yvals)

## bootstrapping
sampfun <- function(fitted,data,idvar="Seed") {
    pp <- predict(fitted,levels=1)
    rr <- residuals(fitted)
    dd <- data.frame(data,pred=pp,res=rr)
    ## sample groups with replacement
    iv <- levels(data[[idvar]])
    bsamp1 <- sample(iv,size=length(iv),replace=TRUE)
    bsamp2 <- lapply(bsamp1,
        function(x) {
        ## within groups, sample *residuals* with replacement
        ddb <- dd[dd[[idvar]]==x,]
        ## bootstrapped response = pred + bootstrapped residual
        ddb$height <- ddb$pred +
            sample(ddb$res,size=nrow(ddb),replace=TRUE)
        return(ddb)
    })
    res <- do.call(rbind,bsamp2)  ## collect results
    if (is(data,"groupedData"))
        res <- groupedData(res,formula=formula(data))
    return(res)
}

pfun <- function(fm) {
    predict(fm,newdata=pframe,level=0)
}

set.seed(101)
yvals2 <- replicate(nresamp,
                    pfun(update(fm1,data=sampfun(fm1,Loblolly,"Seed"))))
c2 <- get_CI(yvals2,"boot_")

## delta method
ss0 <- with(as.list(fixef(fm1)),SSasymp(xvals,Asym,R0,lrc))
gg <- attr(ss0,"gradient")
V <- vcov(fm1)
delta_sd <- sqrt(diag(gg %*% V %*% t(gg)))
c3 <- with(pframe,data.frame(delta_lwr=height-1.96*delta_sd,
                             delta_upr=height+1.96*delta_sd))

pframe <- data.frame(pframe,c1,c2,c3)

library(ggplot2); theme_set(theme_bw())
ggplot(Loblolly,aes(age,height))+
    geom_line(alpha=0.2,aes(group=Seed))+
    geom_line(data=pframe,col="red")+
    geom_ribbon(data=pframe,aes(ymin=lwr,ymax=upr),colour=NA,alpha=0.3,
                fill="blue")+
    geom_ribbon(data=pframe,aes(ymin=boot_lwr,ymax=boot_upr),
                colour=NA,alpha=0.3,
                fill="red")+
    geom_ribbon(data=pframe,aes(ymin=delta_lwr,ymax=delta_upr),
                colour=NA,alpha=0.3,
                fill="cyan")


ggplot(Loblolly,aes(age))+
    geom_hline(yintercept=0,lty=2)+
    geom_ribbon(data=pframe,aes(ymin=lwr-height,ymax=upr-height),
                colour="blue",
                fill=NA)+
    geom_ribbon(data=pframe,aes(ymin=boot_lwr-height,ymax=boot_upr-height),
                colour="red",
                fill=NA)+
    geom_ribbon(data=pframe,aes(ymin=delta_lwr-height,ymax=delta_upr-height),
                colour="cyan",
                fill=NA)

সুতরাং আমি যদি সঠিকভাবে বুঝতে পারি তবে এটি একটি সাধারণ গোষ্ঠীর আত্মবিশ্বাসের অন্তর হতে পারে। আপনার আত্মবিশ্বাসের অন্তরগুলিতে গ্রুপ-পার্থক্য কীভাবে অন্তর্ভুক্ত করা যায় সে সম্পর্কে আপনার কী ধারণা আছে? একের পরে এলোমেলো প্রভাবের স্তরের উপরে ওঠা উচিত?
টম Wenseleers
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.