আর-তে fda প্যাকেজ ব্যবহার করে নতুন বক্ররেখা থেকে প্রতিক্রিয়ার পূর্বাভাস


10

মূলত আমি যা করতে চাই তা হ'ল কিছু বক্ররেখা ব্যবহার করে একটি স্কেলারের প্রতিক্রিয়ার পূর্বাভাস। আমি যতদূর রেজিস্ট্রেশন করছিলাম (এফডিএ প্যাকেজ থেকে এফগ্রিস ব্যবহার করে) তবে কীভাবে ফলাফলকে নতুন কার্ভের (পূর্বাভাসের জন্য) সেট করতে হবে সে সম্পর্কে কোনও ধারণা নেই।

আমার কাছে এন = 536 কার্ভস এবং 536 স্কেলার প্রতিক্রিয়া রয়েছে। আমি এখন পর্যন্ত যা করেছি তা এখানে:

  • আমি কার্ভগুলির জন্য একটি ভিত্তি তৈরি করেছি।
  • আমি একটি পেনাল্টি প্রবর্তনের জন্য একটি fdPar অবজেক্ট তৈরি করেছি
  • আমি নির্দিষ্ট ভিত্তিতে নির্বাচিত জরিমানার সাথে বক্রকে মসৃণ করতে মসৃণ.ব্যাসিস ব্যবহার করে এফডি অবজেক্ট তৈরি করেছি।
  • স্কেলারের প্রতিক্রিয়ার উপর কার্ভগুলি রিগ্রিজ করে আমি fRegress () ব্যবহার করে একটি রিগ্রেশন চালিয়েছি।

এখন, আমি যা করতে চাই তা হ'ল আমার কাছে থাকা ডেটাগুলির একটি নতুন সেটের জন্য পূর্বাভাস তৈরি করতে সেই রিগ্রেশনটি ব্যবহার করা। আমি এটি করার সহজ উপায় খুঁজে পাচ্ছি না।

চিয়ার্স


এমনকি ভিত্তি থেকে কীভাবে পূর্বাভাসগুলি গণনা করা যায় তার একটি বিবরণ, স্মুথড (এফডি) অবজেক্টস এবং এফগ্রিস () থেকে রেগ্রেশন অনুমানগুলি খুব সহায়ক হবে।
ডিসিএল

শুধু যাচাই করা: আপনি বিকল্পটি predict.fRegressব্যবহার করার চেষ্টা করেছেন newdata( এখানে এফডিএ ম্যানুয়াল থেকে )?

আমার কাছে, এটি ঠিক যে 'নিউডাটা' কী শ্রেণি বা ফর্ম্যাট হতে হবে তা আমি ঠিক নিশ্চিত নই। এটি কোনও এফডি বা কোনও এফডি স্মুথ অবজেক্ট গ্রহণ করবে না যা আমি পূর্বাভাস দিতে চাই the এবং এটি আমাকে কাঁচা যুক্তি এবং covariate মানগুলিকে ইনপুট করতে দেয় না।
dcl

1
আমার মনে আছে প্রায় এক বছর আগে fdaপ্যাকেজটি নিয়ে আমি যখন খেলতাম তখন একইরকম সমস্যা হয়েছিল । আমি একটি প্রতিক্রিয়া লিখেছিলাম যা নিজে থেকেই ভবিষ্যদ্বাণী পাওয়া জড়িত, তবে এটির একটি বড় অংশ এটি সংরক্ষণ না করার কারণে হারিয়ে গেছে। যদি অন্য কেউ আমাকে এর কাছে না মারেন তবে কয়েক দিনের মধ্যে আমার কাছে আপনার সমাধান হওয়া উচিত।

উত্তর:


14

আমি ইনসেপশন- লেলিস্ট-লিস্ট-ইন-লিস্ট-ইন-তালিকা-অবজেক্ট স্ট্রাকচারের fdaব্যবহারের জন্য যত্ন নিই না , তবে আমার প্রতিক্রিয়া প্যাকেজ লেখকগণ যে সিস্টেমটি তৈরি করেছেন তার দ্বারা মেনে চলবে।

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

আমরা একটি কার্যকরী রৈখিক মডেল, অর্থাত্ স্কেলার প্রতিক্রিয়া মডেলিং করছি

yi=β0+0TXi(s)β(s)ds+ϵi

আমরা কিছু ভিত্তিতে প্রসারিত করি । আমরা বলি, বেস ফাংশন। সুতরাং,কেβK

β(s)=k=1Kbkθk(s)

ম্যাট্রিক্স স্বরলিপি, এই হল ।β(s)=θ(s)b

আমরা কিছু ভিত্তিতে কোভারিয়েট ফাংশনগুলিও প্রসারিত করি (পাশাপাশি ভিত্তিক ক্রিয়াগুলিও বলুন)। সুতরাং,L

Xi(s)=k=1Lcikψk(s)

আবার ম্যাট্রিক্স স্বরলিপিতে এটি ।X(s)=Cψ(s)

এবং এইভাবে, আমরা যদি , আমাদের মডেল হিসাবে প্রকাশ করা যেতে পারেJ=ψ(s)θ(s)ds

y=β0+CJb

এবং যদি আমরা এবং , তবে আমাদের মডেলটিZ=[1CJ]ξ=[β0b]

y=Zξ

এবং এটি আমাদের কাছে অনেক বেশি পরিচিত দেখাচ্ছে।

এখন আমি দেখছি আপনি কিছু প্রকারের নিয়মিতকরণ যুক্ত করছেন। fdaপ্যাকেজ ফর্মের বন্ধুরতা জরিমানা সাথে কাজ করে

P=λ[Lβ(s)]2ds

কিছু লিনিয়ার ডিফারেন্সিয়াল অপারেটর জন্য । এখন এটি দেখানো যেতে পারে (বিশদটি এখানে রেখে দেওয়া হয়েছে - এটি দেখানো সত্যিই কঠিন নয়) আমরা যদি পেনাল্টি ম্যাট্রিক্সকে হিসাবে সংজ্ঞায়িত করিLR

R=λ(0000R1000RK)

যেখানে ভিত্তিতে সম্প্রসারণ পদ হয় , তাহলে আমরা বর্গের শাস্তি সমষ্টি কমান:Riβi

(yZξ)(yZξ)+λξRξ ,

এবং তাই আমাদের সমস্যাটি কেবল সমাধান সহ একটি রিজ রিগ্রেশন:

ξ^=(ZZ+λR)1Zy

আমি উপরের দিক দিয়ে চলেছি কারণ, (1) আমি মনে করি যে আমরা কী করছি তা আমাদের বুঝতে গুরুত্বপূর্ণ, এবং (২) উপরের কিছু কোড পরে বোঝাব যা কিছু বোঝার প্রয়োজন। কোডটিতে ...

আর কোড সহ একটি ডেটা উদাহরণ এখানে। আমি fdaপ্যাকেজে প্রদত্ত কানাডার ওয়েদার ডেটাসেট ব্যবহার করছি । আমরা কার্যকরী রৈখিক মডেলের মাধ্যমে বেশ কয়েকটি আবহাওয়া স্টেশনের জন্য লগের বার্ষিক বৃষ্টিপাতের মডেল করব এবং প্রতিটি স্টেশন থেকে ক্রিয়াকলাপী covariates হিসাবে আমরা তাপমাত্রার প্রোফাইলগুলি (তাপমাত্রা 365 দিনের জন্য রেকর্ড করা হয়েছিল) ব্যবহার করব। আপনার পরিস্থিতিতে আপনি যেভাবে বর্ণনা করেছেন আমরা সেভাবেই এগিয়ে যাব। ৩৫ টি স্টেশনে ডেটা রেকর্ড করা হয়েছিল। আমি ডেটাসেটটি 34 স্টেশনে বিভক্ত করব, যা আমার ডেটা হিসাবে ব্যবহৃত হবে এবং শেষ স্টেশন, যা আমার "নতুন" ডেটাসেট হবে।

আমি আর কোড এবং মন্তব্যের মাধ্যমে চালিয়ে যাচ্ছি (আমি ধরে নিচ্ছি যে আপনি fdaপ্যাকেজটির সাথে যথেষ্ট পরিমাণে পরিচিত তাই নিচের কোনও কিছুই খুব আশ্চর্যের নয় - যদি এটি না হয় তবে দয়া করে আমাকে জানান):

# pick out data and 'new data'
dailydat <- daily$precav[,2:35]
dailytemp <- daily$tempav[,2:35]
dailydatNew <- daily$precav[,1]
dailytempNew <- daily$tempav[,1]

# set up response variable
annualprec <- log10(apply(dailydat,2,sum))

# create basis objects for and smooth covariate functions
tempbasis <- create.fourier.basis(c(0,365),65)
tempSmooth <- smooth.basis(day.5,dailytemp,tempbasis)
tempfd <- tempSmooth$fd

# create design matrix object
templist <- vector("list",2)
templist[[1]] <- rep(1,34)
templist[[2]] <- tempfd

# create constant basis (for intercept) and
# fourier basis objects for remaining betas
conbasis <- create.constant.basis(c(0,365))
betabasis <- create.fourier.basis(c(0,365),35)
betalist <- vector("list",2)
betalist[[1]] <- conbasis
betalist[[2]] <- betabasis

# set roughness penalty for betas 
Lcoef <- c(0,(2*pi/365)^2,0)
harmaccelLfd <- vec2Lfd(Lcoef, c(0,365))
lambda <- 10^12.5
betafdPar <- fdPar(betabasis, harmaccelLfd, lambda)
betalist[[2]] <- betafdPar

# regress
annPrecTemp <- fRegress(annualprec, templist, betalist)

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

প্রথমে সেট আপ:

# create basis objects for and smooth covariate functions for new data
tempSmoothNew <- smooth.basis(day.5,dailytempNew,tempbasis)
tempfdNew <- tempSmoothNew$fd

# create design matrix object for new data
templistNew <- vector("list",2)
templistNew[[1]] <- rep(1,1)
templistNew[[2]] <- tempfdNew

# convert the intercept into an fd object
onebasis <- create.constant.basis(c(0,365))
templistNew[[1]] <- fd(matrix(templistNew[[1]],1,1), onebasis)

এখন ভবিষ্যদ্বাণী পেতে

y^new=Znewξ^

আমি কেবল কোডটি গ্রহণ করি যা এটি fRegressগণনা করতে yhatfdobjএবং সামান্য সম্পাদনা করতে ব্যবহার করে । ট্র্যাপিজয়েড বিধি ( এবং তাদের নিজ প্রসারিত মাধ্যমে অবিচ্ছেদ্য অনুমান করে fRegressগণনা yhatfdobjকরে । 0TXi(s)β(s)Xiβ

সাধারণত, fRegressসঞ্চিত covariates মাধ্যমে লুপিং দ্বারা লাগানো মানগুলি গণনা করে annPrecTemp$xfdlist। সুতরাং আমাদের সমস্যার জন্য, আমরা এই covariate তালিকাটি আমাদের নতুন covariate তালিকার সাথে সম্পর্কিত, অর্থাৎ, এর সাথে প্রতিস্থাপন করব templistNew। এখানে কোডটি রয়েছে ( fRegressদুটি সম্পাদনা, অপরিশোধিত কোডের কিছু মোছা, এবং কয়েকটি মন্তব্য যুক্ত করা সহ কোডের সমান ):

# set up yhat matrix (in our case it's 1x1)
yhatmat <- matrix(0,1,1)

# loop through covariates
p <- length(templistNew)
for(j in 1:p){
    xfdj       <- templistNew[[j]]
    xbasis     <- xfdj$basis
    xnbasis    <- xbasis$nbasis
    xrng       <- xbasis$rangeval
    nfine      <- max(501,10*xnbasis+1)
    tfine      <- seq(xrng[1], xrng[2], len=nfine)
    deltat     <- tfine[2]-tfine[1]
    xmat       <- eval.fd(tfine, xfdj)
    betafdParj <- annPrecTemp$betaestlist[[j]]
    betafdj    <- betafdParj$fd
    betamat    <- eval.fd(tfine, betafdj)
    # estimate int(x*beta) via trapezoid rule
    fitj       <- deltat*(crossprod(xmat,betamat) - 
                      0.5*(outer(xmat[1,],betamat[1,]) +
              outer(xmat[nfine,],betamat[nfine,])))
    yhatmat    <- yhatmat + fitj
}

(দ্রষ্টব্য: আপনি যদি এই অংশ এবং আশেপাশের কোডটি fRegressদেখে থাকেন তবে আপনি উপরে বর্ণিত পদক্ষেপগুলি দেখতে পাবেন)।

আমি আবহাওয়া উদাহরণটি সমস্ত 35 স্টেশনগুলিকে আমাদের ডেটা হিসাবে ব্যবহার করে পুনরায় চালিত করে কোডটি পরীক্ষা করেছি এবং উপরের লুপ থেকে আউটপুটকে তুলনা করেছি annPrecTemp$yhatfdobjএবং সমস্ত কিছু মিলে যায়। আমার "নতুন" ডেটা এবং সমস্ত কিছু যুক্তিযুক্ত বলে বিভিন্ন স্টেশন ব্যবহার করে আমি কয়েকবার এটি চালিয়েছি।

উপরেরগুলির কোনওটি অস্পষ্ট বা কিছু সঠিকভাবে কাজ করছে না তা আমাকে জানান। অত্যধিক বিস্তারিত প্রতিক্রিয়া জন্য দুঃখিত। আমি নিজেকে সাহায্য করতে পারি না :) এবং আপনি যদি ইতিমধ্যে সেগুলির মালিক না হন তবে আমি এই প্রতিক্রিয়াটি লিখতে ব্যবহৃত দুটি বই চেক করে দেখি। তারা সত্যিই ভাল বই।


দেখে মনে হচ্ছে এটি ঠিক আমার যা প্রয়োজন। ধন্যবাদ. আমি ধরে নিয়েছি আমাকে ঠিক এনফাইন / টাইন / ডেল্ট্যাট স্টাফ দিয়ে খেলতে হবে না? আমার কি অনুমান করা উচিত যে ইন্টিগ্রেশনটি সঠিকভাবে যথেষ্ট করছে?
dcl

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

1
অবিচ্ছেদ্য আনুমানিক হিসাবে ব্যবহৃত গ্রিডটি বেশ সূক্ষ্ম, সুতরাং অনুমানটি বেশ ভাল হওয়া উচিত। আপনি সর্বদা বৃদ্ধি করতে nfineএবং দেখতে পান যে কতটা অবিচ্ছেদ্য পরিবর্তন হয়েছে তবে আমি অনুমান করছি এটি খুব বেশি কিছু করবে না। এ পর্যন্ত দণ্ডনীয়তা যত, হ্যাঁ আমরা সরাসরি দণ্ড আরোপ করছি এর পরিবর্তে 'এই ক্ষেত্রে s। র্যামজে এবং সিলভারম্যান অন্য শাস্তি পদ্ধতি নিয়ে আলোচনা করে অনুমান ভিত্তিতে ফাংশন যেখানে আমরা সরাসরি শাস্তি প্রয়োগ ছাড়া । উভয় উপায়ে ফাংশনগুলিতে মসৃণতা সীমাবদ্ধতা প্ররোচিত করছে তবে আপনি 'একই প্রভাব' পাবেন কিনা তা সম্পর্কে আমি নিশ্চিত নই। ξββ^ββ

আমি একাধিক বক্ররেখার জন্য পূর্বাভাস তৈরি করতে কোডটি ব্যবহার করার চেষ্টা করেছি, তবে আমি নিশ্চিত নই যে আমি এটি সঠিকভাবে সম্পন্ন করেছি। প্রারম্ভিকদের জন্য, লুপের প্রথম পুনরাবৃত্তির পরে ইয়াহম্যাট সমস্ত কার্ভারের জন্য ধ্রুবক নয় ... এটি কি সমতুল্য বোঝানো হচ্ছে ? β0
dcl

1
@dcl লুপে, যখন , এটি কে (আপনার এক্সলিস্টে প্রথম তালিকাটি ইন্টারসেপ্ট পদের সাথে মিল রেখে)। আপনি কি আপনার প্রশ্নের সাথে কোডের স্নিপেট যুক্ত করতে পারেন যাতে আমি এটি দেখতে পারি? j=1β0^y^
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.