আমি ইনসেপশন- লেলিস্ট-লিস্ট-ইন-লিস্ট-ইন-তালিকা-অবজেক্ট স্ট্রাকচারের fda
ব্যবহারের জন্য যত্ন নিই না , তবে আমার প্রতিক্রিয়া প্যাকেজ লেখকগণ যে সিস্টেমটি তৈরি করেছেন তার দ্বারা মেনে চলবে।
আমি মনে করি যে আমরা ঠিক কী করছি সে সম্পর্কে প্রথমে চিন্তা করা শিক্ষণীয়। আপনি এখন পর্যন্ত কী করেছেন তার বর্ণনার ভিত্তিতে, আমি বিশ্বাস করি এটি আপনি করছেন (আমাকে যদি কিছু ভুল ব্যাখ্যা করে থাকে তবে আমাকে জানান)। আমি স্বরলিপিটি ব্যবহার করা চালিয়ে যাব এবং, বাস্তব ডেটার অভাবের কারণে, রামসে এবং সিলভারম্যানের কার্যকরী ডেটা বিশ্লেষণ এবং আর এবং এমএটিএলবি সহ গ্রাভসের কার্যকরী ডেটা বিশ্লেষণের উদাহরণ (নিম্নলিখিত কিছু সমীকরণ এবং কোড প্রত্যক্ষভাবে প্রত্যাহার করা হয়েছে) এই বইগুলি থেকে)।
আমরা একটি কার্যকরী রৈখিক মডেল, অর্থাত্ স্কেলার প্রতিক্রিয়া মডেলিং করছি
yi=β0+∫T0Xi(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=λ⎛⎝⎜⎜⎜⎜⎜00⋮00R1⋮0⋯⋯⋱⋯00⋮RK⎞⎠⎟⎟⎟⎟⎟
যেখানে ভিত্তিতে সম্প্রসারণ পদ হয় , তাহলে আমরা বর্গের শাস্তি সমষ্টি কমান:Riβi
(y−Zξ)′(y−Zξ)+λξ′Rξ ,
এবং তাই আমাদের সমস্যাটি কেবল সমাধান সহ একটি রিজ রিগ্রেশন:
ξ^=(Z′Z+λR)−1Z′y ।
আমি উপরের দিক দিয়ে চলেছি কারণ, (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
করে । ∫T0Xi(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
এবং সমস্ত কিছু মিলে যায়। আমার "নতুন" ডেটা এবং সমস্ত কিছু যুক্তিযুক্ত বলে বিভিন্ন স্টেশন ব্যবহার করে আমি কয়েকবার এটি চালিয়েছি।
উপরেরগুলির কোনওটি অস্পষ্ট বা কিছু সঠিকভাবে কাজ করছে না তা আমাকে জানান। অত্যধিক বিস্তারিত প্রতিক্রিয়া জন্য দুঃখিত। আমি নিজেকে সাহায্য করতে পারি না :) এবং আপনি যদি ইতিমধ্যে সেগুলির মালিক না হন তবে আমি এই প্রতিক্রিয়াটি লিখতে ব্যবহৃত দুটি বই চেক করে দেখি। তারা সত্যিই ভাল বই।