স্টেট-স্পেস মডেল (এসএসএম) এর সাথে সম্পর্কিত কলম্যান ফিল্টারিং (কেএফ) কৌশলগুলির মাধ্যমে কীভাবে একটি স্প্লাইন ব্যবহার করা যেতে পারে তা আমরা বর্ণনা করব। কিছু স্প্লাইন মডেলগুলি এসএসএম দ্বারা প্রতিনিধিত্ব করা যায় এবং কেএফের সাথে গণনা করা যায় তা 1980 সালের 1990 সালে সিএফ আনসলে এবং আর কোহন প্রকাশ করেছিলেন। আনুমানিক ফাংশন এবং এর ডেরাইভেটিভগুলি পর্যবেক্ষণগুলির উপর রাষ্ট্রীয় শর্তসাপেক্ষ প্রত্যাশা। এসএসএম ব্যবহার করার সময় একটি নিয়মিত টাস্ক একটি নির্দিষ্ট ব্যবধানের স্মুথিং ব্যবহার করে এই অনুমানগুলি গণনা করা হয় ।
সরলতা অনুরোধে জন্য, অনুমান পর্যবেক্ষণের সময়ে তৈরি হয় এবং যে পর্যবেক্ষণ সংখ্যা এ
শুধুমাত্র জড়িত এক আদেশ ব্যুৎপন্ন মধ্যে
। যেমন মডেল লিখেছেন পর্যবেক্ষণ অংশ
যেখানে অলক্ষিত উল্লেখ করে সত্য ফাংশন এবং অর্ডার উপর নির্ভর করে
ভেরিয়েন্স সহ গাউসীয় ত্রুটি । (অবিচ্ছিন্ন সময়) রূপান্তর সমীকরণটি সাধারণ রূপ নেয়
t1<t2<⋯<tnktkডি কে { 0 ,dk{0,1,2}y(tk)=f[dk](tk)+ε(tk)(O1)
f(t)ε ( টি কে ) এইচ ( টি কে ) ডি কেε(tk)H(tk)dkddtα(t)=Aα(t)+η(t)(T1)
যেখানে অরক্ষিত রাষ্ট্র ভেক্টর এবং
হল গওসিয়ান শ্বেত শব্দ যা কোভারিয়েন্স with with সহ একটি স্বতন্ত্র বলে মনে করা হয় পর্যবেক্ষণ শব্দ r.vs । একটি স্প্লিন বর্ণনা করার জন্য, আমরা
প্রথম ডেরিভেটিভস, অর্থাৎ স্ট্যাক করে প্রাপ্ত একটি রাষ্ট্র বিবেচনা করি । । রূপান্তর হয়
α(t)α ( t ) : = [ f ( t ) ,η(t)Qε(tk)mα(t):=[f(t),f[1](t),…,f[m−1](t)]⊤⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢f[1](t)f[2](t)⋮f[m−1](t)f[m](t)⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢00⋮010…01⋱10⎤⎦⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢f(t)f[1](t)⋮f[m−2](t)f[m−1](t)⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢00⋮0η(t)⎤⎦⎥⎥⎥⎥⎥⎥⎥
এবং তারপরে আমরা অর্ডার (এবং ডিগ্রি
) সহ একটি বহুপদী স্প্লাইন পাই । যদিও স্বাভাবিক ঘন স্প্লিনের সাথে মিলে যায়,2মি2মি-1মি=2>1y( টি কে ) 2m2m−1m=2>1। একটি ধ্রুপদী এসএসএম আনুষ্ঠানিকতায় আমরা (ও 1)
যেখানে পর্যবেক্ষণ ম্যাট্রিক্স মধ্যে উপযুক্ত ব্যুৎপন্ন পছন্দ এবং ভ্যারিয়েন্স এর
উপর নির্ভর করে নির্বাচিত । সুতরাং যেখানে ,
এবং । একইভাবেy(tk)=Z(tk)α(tk)+ε(tk),(O2)
জেড(টি )Z(tk)α(tk)H(tk)ε(tk)dkZ(tk)=Z⋆dk+1Z⋆1:=[1,0,…,0]Z⋆2:=[0,1,…0]Z⋆3:=[0,0,1,0,…]H(tk)=H⋆dk+1 এইচ ⋆ 1 এইচ ⋆ 2 এইচ ⋆ 3তিন জন্য ভেরিয়ানস ,
, এবং । H⋆1H⋆2H⋆3
যদিও রূপান্তর অবিচ্ছিন্ন সময়ে হয়, কেএফ আসলে একটি স্ট্যান্ডার্ড বিচ্ছিন্ন সময় । প্রকৃতপক্ষে, আমরা কালে অনুশীলন ফোকাস হবে যেখানে আমরা একটি পর্যবেক্ষণ, অথবা যেখানে আমরা ডেরাইভেটিভস অনুমান করতে চাই। আমরা সেট নিতে পারেন সময়ের এই দুটি সেট ইউনিয়ন হতে হবে এবং অনুমান যে পর্যবেক্ষণ অনুপস্থিত করা যেতে পারে: এই অনুমান করতে পারবেন যে কোন সময়ে ডেরাইভেটিভস
একটি পর্যবেক্ষণ অস্তিত্বের হোক না কেন। পৃথক এসএসএম প্রাপ্ত করার বাকি রয়েছে।t{tk}tkmtk
আমরা বিচ্ছিন্ন সময়গুলির জন্য সূচকগুলি ব্যবহার করব, জন্য
। পৃথক সময়ের এসএসএম রূপ নেয়
যেখানে ম্যাট্রিকগুলি এবং (T1 এর) থেকে উদ্ভূত হয় এবং (O2- এর) যখন ভ্যারিয়েন্স দেওয়া হয়
যেαkα(tk)αk+1yk=Tkαk+η⋆k=Zkαk+εk(DT)
TkQ⋆k:=Var(η⋆k)εkএইচট= এইচ⋆ঘট+ 1Yটঅনুপস্থিত। কিছু বীজগণিত ব্যবহার করে আমরা বিচ্ছিন্ন সময়ের এসএসএম
যেখানে জন্য । একইভাবে ম্যাট্রিক্স হিসাবে দেওয়া যেতে পারে
টিট= এক্সপ্রেস{ δটএ }= ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢10⋮0δ1ট+ !1...δ2ট2 !δ1ট+ !...⋱δমি - 1ট( মি - 1 ) !δ1ট+ !1⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥,
δট: = টিকে + 1- টিটকে < এনপ্রশ্নঃ⋆ট= ভার ( η⋆ট)প্রশ্নঃ⋆ট= σ2η[ δ2 মি - আই - জে + 1ট( মি - আই ) ! ( মি - জ ) ! ( 2 মি - আমি - জে + 1 )]i , j
আইজে1মি
যেখানে এবং সূচকগুলি এবং এর মধ্যে ।আমিঞ1মি
আর-তে গণনাটি বহন করার জন্য আমাদের কেএফকে উত্সর্গীকৃত একটি প্যাকেজ দরকার এবং সময়-পরিবর্তিত মডেলগুলি গ্রহণ করা উচিত; CRAN প্যাকেজ কেএফএএস একটি ভাল বিকল্প বলে মনে হচ্ছে।
এসএসএম (ডিটি) এনকোড করার জন্য আমরা বারের ভেক্টর থেকে ম্যাট্রিক্স এবং কে গণনা করতে আর ফাংশন লিখতে পারি
। প্যাকেজটির দ্বারা ব্যবহৃত স্বরলিপিগুলিতে, একটি ম্যাট্রিক্স শব্দটি ( ) এর রূপান্তর সমীকরণে বহুগুণ করতে আসে
: আমরা এটি এখানে পরিচয় take হিসাবে গ্রহণ করি take । এছাড়াও মনে রাখবেন যে এখানে একটি বিচ্ছুরিত প্রাথমিক কোভারিয়েন্স ব্যবহার করা আবশ্যক।টিটপ্রশ্নঃ⋆টটিটআরটη⋆টআমিমি
সম্পাদনা দ্য প্রাথমিকভাবে লিখিত হিসাবে ভুল ছিল। ফিক্সড (আর কোড এবং ইমেজ এলো)প্রশ্নঃ⋆
সিএফ আনসলে এবং আর কোহন (1986) "স্প্লিন স্মুথিংয়ের দুটি স্টোকাস্টিক পদ্ধতির সমতুল্যতা" জে অ্যাপল। Probab। , 23, পিপি 391–405
আর কোহন এবং সিএফ আনসলে (1987) "স্টলকাস্টিক প্রক্রিয়া স্মুথিংয়ের উপর ভিত্তি করে স্প্লিন স্মুথিংয়ের জন্য একটি নতুন অ্যালগরিদম" সিয়াম জে। সাই। এবং স্ট্যাটাস। Comput। , 8 (1), পৃষ্ঠা 33-48
জে হেলস্কে (2017)। "কেএফএএস: আর" জে স্ট্যাটাসে তাত্পর্যপূর্ণ পারিবারিক রাজ্যের স্পেস মডেল । নরম। , 78 (10), পিপি। 1-39
smoothWithDer <- function(t, y, d, m = 3,
Hstar = c(3, 0.2, 0.1)^2, sigma2eta = 1.0^2) {
## define the SSM matrices, depending on 'delta_k' or on 'd_k'
Tfun <- function(delta) {
mat <- matrix(0, nrow = m, ncol = m)
for (i in 0:(m-1)) {
mat[col(mat) == row(mat) + i] <- delta^i / gamma(i + 1)
}
mat
}
Qfun <- function(delta) {
im <- (m - 1):0
x <- delta^im / gamma(im + 1)
mat <- outer(X = x, Y = x, FUN = "*")
im2 <- outer(im, im, FUN = "+")
sigma2eta * mat * delta / (im2 + 1)
}
Zfun <- function(d) {
Z <- matrix(0.0, nrow = 1, ncol = m)
Z[1, d + 1] <- 1.0
Z
}
Hfun <- function(d) ifelse(d >= 0, Hstar[d + 1], 0.0)
Rfun <- function() diag(x = 1.0, nrow = m)
## define arrays by stacking the SSM matrices. We need one more
## 'delta' at the end of the series
n <- length(t)
delta <- diff(t)
delta <- c(delta, mean(delta))
Ta <- Qa <- array(0.0, dim = c(m, m, n))
Za <- array(0.0, dim = c(1, m, n))
Ha <- array(0.0, dim = c(1, 1, n))
Ra <- array(0.0, dim = c(m, m, n))
for (k in 1:n) {
Ta[ , , k] <- Tfun(delta[k])
Qa[ , , k] <- Qfun(delta[k])
Za[ , , k] <- Zfun(d[k])
Ha[ , , k] <- Hfun(d[k])
Ra[ , , k] <- Rfun()
}
require(KFAS)
## define the SSM and perform Kalman Filtering and smoothing
mod <- SSModel(y ~ SSMcustom(Z = Za, T = Ta, R = Ra, Q = Qa, n = n,
P1 = matrix(0, nrow = m, ncol = m),
P1inf = diag(1.0, nrow = m),
state_names = paste0("d", 0:(m-1))) - 1)
out <- KFS(mod, smoothing = "state")
list(t = t, filtered = out$att, smoothed = out$alphahat)
}
## An example function as in OP
f <- function(t, d = rep(0, length = length(t))) {
f <- rep(NA, length(t))
if (any(ind <- (d == 0))) f[ind] <- 2.0 + t[ind] - 0.5 * t[ind]^2
if (any(ind <- (d == 1))) f[ind] <- 1.0 - t[ind]
if (any(ind <- (d == 2))) f[ind] <- -1.0
f
}
set.seed(123)
n <- 100
t <- seq(from = 0, to = 10, length = n)
Hstar <- c(3, 0.4, 0.2)^2
sigma2eta <- 1.0
fTrue <- cbind(d0 = f(t), d1 = f(t, d = 1), d2 = f(t, d = 2))
## ============================================================================
## use a derivative index of -1 to indicate non-observed values, where
## 'y' will be NA
##
## [RUN #0] no derivative m = 2 (cubic spline)
## ============================================================================
d0 <- sample(c(-1, 0), size = n, replace = TRUE, prob = c(0.7, 0.3))
ft0 <- f(t, d0)
## add noise picking the right sd
y0 <- ft0 + rnorm(n = n, sd = c(0.0, sqrt(Hstar))[d0 + 2])
res0 <- smoothWithDer(t, y0, d0, m = 2, Hstar = Hstar)
## ============================================================================
## [RUN #1] Only first order derivative: we can take m = 2 (cubic spline)
## ============================================================================
d1 <- sample(c(-1, 0:1), size = n, replace = TRUE, prob = c(0.7, 0.15, 0.15))
ft1 <- f(t, d1)
y1 <- ft1 + rnorm(n = n, sd = c(0.0, sqrt(Hstar))[d1 + 2])
res1 <- smoothWithDer(t, y1, d1, m = 2, Hstar = Hstar)
## ============================================================================
## [RUN #2] First and second order derivative: we can take m = 3
## (quintic spline)
## ============================================================================
d2 <- sample(c(-1, 0:2), size = n, replace = TRUE, prob = c(0.7, 0.1, 0.1, 0.1))
ft2 <- f(t, d2)
y2 <- ft2 + rnorm(n = n, sd = c(0.0, sqrt(Hstar))[d2 + 2])
res2 <- smoothWithDer(t, y2, d2, m = 3, Hstar = Hstar)
## plots : a ggplot with facets would be better here.
for (run in 0:2) {
resrun <- get(paste0("res", run))
drun <- get(paste0("d", run))
yrun <- get(paste0("y", run))
matplot(t, resrun$smoothed, pch = 16, cex = 0.7, ylab = "", xlab = "")
matlines(t, fTrue, lwd = 2, lty = 1)
for (dv in 0:2) {
points(t[drun == dv], yrun[drun == dv], cex = 1.2, pch = 22, lwd = 2,
bg = "white", col = dv + 1)
}
title(main = sprintf("run %d. Dots = smooothed, lines = true, square = obs", run))
legend("bottomleft", col = 1:3, legend = c("d0", "d1", "d2"), lty = 1)
}
splinefun
ডেরিভেটিভগুলি গণনা করতে পারি এবং সম্ভবত আপনি কিছু বিপরীত পদ্ধতি ব্যবহার করে ডেটা ফিট করার জন্য এটি একটি প্রাথমিক বিন্দু হিসাবে ব্যবহার করতে পারেন? আমি এর সমাধান শিখতে আগ্রহী।