মান এবং 1 ম / 2 য় ডেরিভেটিভ যুক্ত ডেটাতে আমি কীভাবে একটি স্প্লিন ফিট করতে পারি?


14

আমার একটি ডেটাসেট রয়েছে যা বলি, অবস্থান, গতি এবং ত্বরণের জন্য কিছু পরিমাপ। সবাই একই "রান" থেকে আসে। আমি একটি রৈখিক সিস্টেম তৈরি করতে পারি এবং এই সমস্ত পরিমাপের সাথে একটি বহুবচন ফিট করতে পারি।

কিন্তু আমি কি স্প্লিংসের সাহায্যে একই কাজ করতে পারি? এটি করার একটি 'আর' উপায় কী?

এখানে কিছু সিমুলেটেড ডেটা আমি ফিট করতে চাই:

f <- function(x) 2+x-0.5*x^2+rnorm(length(x), mean=0, sd=0.1)
df <- function(x) 1-x+rnorm(length(x), mean=0, sd=0.3)
ddf <- function(x) -1+rnorm(length(x), mean=0, sd=0.6)

x_f <- runif(5, 0, 5)
x_df <- runif(8, 3, 8)
x_ddf <- runif(10, 4, 9)

data <- data.frame(type=rep('f'), x=x_f, y=f(x_f))
data <- rbind(data, data.frame(type=rep('df'), x=x_df, y=df(x_df)))
data <- rbind(data, data.frame(type=rep('ddf'), x=x_ddf, y=ddf(x_ddf)))

library(ggplot2)
ggplot(data, aes(x, y, color=type)) + geom_point()


library(splines)
m <- lm(data$y ~ bs(data$x, degree=6)) # but I want to fit on f, df, ddf. possible?

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


আমি আপনার প্রশ্নের উত্তর জানি না তবে splinefunডেরিভেটিভগুলি গণনা করতে পারি এবং সম্ভবত আপনি কিছু বিপরীত পদ্ধতি ব্যবহার করে ডেটা ফিট করার জন্য এটি একটি প্রাথমিক বিন্দু হিসাবে ব্যবহার করতে পারেন? আমি এর সমাধান শিখতে আগ্রহী।
ডেভিড লেবাউর

1
এই সমস্যাটি মরিস কক্স তার 1972 এর গবেষণাপত্রে সমাধান করেছিলেন। আর এটি সমর্থন করে কিনা আমি জানি না, তবে অনুসন্ধান শব্দটি "হার্মাইট স্প্লাইজস"।
ব্যবহারকারী 14717

@ ডেভিডলেবাউর এটি আমি বর্তমানে করছি আমি একটি অপ্টিমাইজেশান সমস্যাটিকে আনুষ্ঠানিক রূপ দিয়েছি যা বেশ কয়েকটি পয়েন্টের সাথে খাপ খায় যা স্প্লাইন এবং এর ডেরিভেটিভগুলি ডেটা আনুমানিক বলে। তবে আরও একটি সরাসরি পদ্ধতি দুর্দান্ত হবে।
দানি

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

2
ডেরাইভেটিভসে পরিমাপের ত্রুটিটি কী? এটা কি অবস্থানের চেয়ে অনেক বেশি? এছাড়াও আপনার প্লটটিতে কেন বিন্দু বিন্যাস হয় না? এক্স অক্ষ কী?
আকসকল

উত্তর:


9

স্টেট-স্পেস মডেল (এসএসএম) এর সাথে সম্পর্কিত কলম্যান ফিল্টারিং (কেএফ) কৌশলগুলির মাধ্যমে কীভাবে একটি স্প্লাইন ব্যবহার করা যেতে পারে তা আমরা বর্ণনা করব। কিছু স্প্লাইন মডেলগুলি এসএসএম দ্বারা প্রতিনিধিত্ব করা যায় এবং কেএফের সাথে গণনা করা যায় তা 1980 সালের 1990 সালে সিএফ আনসলে এবং আর কোহন প্রকাশ করেছিলেন। আনুমানিক ফাংশন এবং এর ডেরাইভেটিভগুলি পর্যবেক্ষণগুলির উপর রাষ্ট্রীয় শর্তসাপেক্ষ প্রত্যাশা। এসএসএম ব্যবহার করার সময় একটি নিয়মিত টাস্ক একটি নির্দিষ্ট ব্যবধানের স্মুথিং ব্যবহার করে এই অনুমানগুলি গণনা করা হয় ।

সরলতা অনুরোধে জন্য, অনুমান পর্যবেক্ষণের সময়ে তৈরি হয় এবং যে পর্যবেক্ষণ সংখ্যা এ শুধুমাত্র জড়িত এক আদেশ ব্যুৎপন্ন মধ্যে । যেমন মডেল লিখেছেন পর্যবেক্ষণ অংশ যেখানে অলক্ষিত উল্লেখ করে সত্য ফাংশন এবং অর্ডার উপর নির্ভর করে ভেরিয়েন্স সহ গাউসীয় ত্রুটি । (অবিচ্ছিন্ন সময়) রূপান্তর সমীকরণটি সাধারণ রূপ নেয় t1<t2<<tnktkডি কে { 0 ,dk{0,1,2}

(O1)y(tk)=f[dk](tk)+ε(tk)
f(t)ε ( টি কে ) এইচ ( টি কে ) ডি কেε(tk)H(tk)dk
(T1)ddtα(t)=Aα(t)+η(t)
যেখানে অরক্ষিত রাষ্ট্র ভেক্টর এবং হল গওসিয়ান শ্বেত শব্দ যা কোভারিয়েন্স with with সহ একটি স্বতন্ত্র বলে মনে করা হয় পর্যবেক্ষণ শব্দ r.vs । একটি স্প্লিন বর্ণনা করার জন্য, আমরা প্রথম ডেরিভেটিভস, অর্থাৎ স্ট্যাক করে প্রাপ্ত একটি রাষ্ট্র বিবেচনা করি । । রূপান্তর হয় α(t)α ( t ) : = [ f ( t ) ,η(t)Qε(tk)mα(t):=[f(t),f[1](t),,f[m1](t)]
[f[1](t)f[2](t)f[m1](t)f[m](t)]=[010001100][f(t)f[1](t)f[m2](t)f[m1](t)]+[000η(t)]
এবং তারপরে আমরা অর্ডার (এবং ডিগ্রি ) সহ একটি বহুপদী স্প্লাইন পাই । যদিও স্বাভাবিক ঘন স্প্লিনের সাথে মিলে যায়,2মি2মি-1মি=2>1y( টি কে ) 2m2m1m=2>1। একটি ধ্রুপদী এসএসএম আনুষ্ঠানিকতায় আমরা (ও 1) যেখানে পর্যবেক্ষণ ম্যাট্রিক্স মধ্যে উপযুক্ত ব্যুৎপন্ন পছন্দ এবং ভ্যারিয়েন্স এর উপর নির্ভর করে নির্বাচিত । সুতরাং যেখানে , এবং । একইভাবে
(O2)y(tk)=Z(tk)α(tk)+ε(tk),
জেড(টি )Z(tk)α(tk)H(tk)ε(tk)dkZ(tk)=Zdk+1Z1:=[1,0,,0]Z2:=[0,1,0]Z3:=[0,0,1,0,]H(tk)=Hdk+1 এইচ 1 এইচ 2 এইচ 3তিন জন্য ভেরিয়ানস , , এবং । H1H2H3

যদিও রূপান্তর অবিচ্ছিন্ন সময়ে হয়, কেএফ আসলে একটি স্ট্যান্ডার্ড বিচ্ছিন্ন সময় । প্রকৃতপক্ষে, আমরা কালে অনুশীলন ফোকাস হবে যেখানে আমরা একটি পর্যবেক্ষণ, অথবা যেখানে আমরা ডেরাইভেটিভস অনুমান করতে চাই। আমরা সেট নিতে পারেন সময়ের এই দুটি সেট ইউনিয়ন হতে হবে এবং অনুমান যে পর্যবেক্ষণ অনুপস্থিত করা যেতে পারে: এই অনুমান করতে পারবেন যে কোন সময়ে ডেরাইভেটিভস একটি পর্যবেক্ষণ অস্তিত্বের হোক না কেন। পৃথক এসএসএম প্রাপ্ত করার বাকি রয়েছে।t{tk}tkmtk

আমরা বিচ্ছিন্ন সময়গুলির জন্য সূচকগুলি ব্যবহার করব, জন্য । পৃথক সময়ের এসএসএম রূপ নেয় যেখানে ম্যাট্রিকগুলি এবং (T1 এর) থেকে উদ্ভূত হয় এবং (O2- এর) যখন ভ্যারিয়েন্স দেওয়া হয় যেαkα(tk)

(DT)αk+1=Tkαk+ηkyk=Zkαk+εk
TkQk:=Var(ηk)εkHk=Hdk+1ykঅনুপস্থিত। কিছু বীজগণিত ব্যবহার করে আমরা বিচ্ছিন্ন সময়ের এসএসএম যেখানে জন্য । একইভাবে ম্যাট্রিক্স হিসাবে দেওয়া যেতে পারে
Tk=exp{δkA}=[1δk11!δk22!δkm1(m1)!01δk11!δk11!01],

δk:=tk+1tkk<nQk=Var(ηk)
Qk=ση2[δk2mij+1(mi)!(mj)!(2mij+1)]i,j
আইজে1মি যেখানে এবং সূচকগুলি এবং এর মধ্যে ।ij1m

আর-তে গণনাটি বহন করার জন্য আমাদের কেএফকে উত্সর্গীকৃত একটি প্যাকেজ দরকার এবং সময়-পরিবর্তিত মডেলগুলি গ্রহণ করা উচিত; CRAN প্যাকেজ কেএফএএস একটি ভাল বিকল্প বলে মনে হচ্ছে। এসএসএম (ডিটি) এনকোড করার জন্য আমরা বারের ভেক্টর থেকে ম্যাট্রিক্স এবং কে গণনা করতে আর ফাংশন লিখতে পারি । প্যাকেজটির দ্বারা ব্যবহৃত স্বরলিপিগুলিতে, একটি ম্যাট্রিক্স শব্দটি ( ) এর রূপান্তর সমীকরণে বহুগুণ করতে আসে : আমরা এটি এখানে পরিচয় take হিসাবে গ্রহণ করি take । এছাড়াও মনে রাখবেন যে এখানে একটি বিচ্ছুরিত প্রাথমিক কোভারিয়েন্স ব্যবহার করা আবশ্যক।TkQktkRkηkIm

সম্পাদনা দ্য প্রাথমিকভাবে লিখিত হিসাবে ভুল ছিল। ফিক্সড (আর কোড এবং ইমেজ এলো)Q

সিএফ আনসলে এবং আর কোহন (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)
}

আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ. আমি এতে খুব আগ্রহী। বর্তমানে, আপনি fকোনও নির্দিষ্ট সময়ে এর মান এবং এর ডেরাইভেটিভ ব্যবহার করার অনুমতি দিচ্ছেন না t। কীভাবে সমস্ত তথ্য ব্যবহার করা সম্ভব? আবার, আপনার উত্তরের জন্য Merci।
দানি

আমার পড়া টি 1 এর নীচে থাকা সমস্ত কিছুই একই অনুমান পদ্ধতিতে একাধিক ডেরিভেটিভ ব্যবহার করার বিষয়ে। Yves যদিও নিশ্চিত করতে পারেন।
এরিক_কর্নফিল্ড

নিশ্চয় তোমরা ব্যবহার করতে পারেন এক জন্য ডেরাইভেটিভস : পর্যবেক্ষণ তারপর একটি ভেক্টর এবং হয়েছে চেয়েছিলেন ডেরাইভেটিভস অবচয় সারি। আমি নিশ্চিত যে একটি সাধারণ কেএফএএসের সাথে কাজ করে , তবে এনএ ব্যবহার করে এটিও সময় পরিবর্তিত হতে পারে । ok>1y কে জেড কেtkykZk> 1 oko>1o
ইয়ভেস

@Yves আমি আপনি সঠিকভাবে বুঝতে না: আমি যদি t_k মধ্যে সময়ে প্রথম ও দ্বিতীয় ব্যুৎপন্ন থাকে, তখন Z_k ভালো দেখায়: matrix(c(0,0,0, 0,1,0, 0,0,1), nrow=length(d_k), ncol=m, byrow = T)। সুতরাং, সামগ্রিকভাবে এটি মাত্রার ঘনক্ষন হবে 'সর্বোচ্চ ডেরাইভেটিভ' * 'স্প্লাইন ডিগ্রি' * '# সময়ের ধাপগুলি'
দানি

হ্যাঁ @ দানি, প্রায়: সমস্ত ম্যাট্রিকের জন্য সারি সংখ্যা অর্থাৎ উদাহরণে । এটি সর্বোচ্চ ডেরাইভেটিভ অর্ডার প্লাস ওয়ান। এছাড়াও, স্প্লিনের ডিগ্রি 2 , নয় । আপনার উদাহরণে যেহেতু আপনি ক্রম (এর ফাংশনটি নিজেই) এর উদ্দীপনা পর্যবেক্ষণ করেন না এটি পর্যবেক্ষণে সেট করা উচিত এবং আপনি প্রথম সারিতেও ফেলে দিতে পারেন। তবে, আমি সন্দেহ করি যে এই নির্দিষ্ট ক্ষেত্রে সমস্যাটি অসুস্থ-পোষিত, এসএসএম পর্যবেক্ষণযোগ্য নাও হতে পারে । Zk3 2 মি - 1 মি 0maxk{dk+1}32m1m0NA
ইয়ভেস

5

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

সমস্যাটি বিমূর্ত করে প্রাথমিক ধারণাটি সবচেয়ে স্পষ্টভাবে প্রকাশ করা যেতে পারে। আপনার মডেল একটি সেট ব্যবহার ফাংশন (যেমন কোন স্প্লাইন ভিত্তি হিসেবে) একটি ভিত্তি হিসেবে মান পূর্বাভাসের জন্য বিন্দুতে একটি অজানা ফাংশনের এর অর্থ আপনি সহগ- অনুমান করতে যার জন্য প্রতিটি লিনিয়ার সংমিশ্রণগুলি গ্রহণযোগ্যভাবে আনুমানিক আসুন একে (ভেক্টর) লিনিয়ার সংমিশ্রণের বলিpfj:RR, j=1,2,,pyi=f(xi)f(x1,x2,,xn).βjjβjfj(xi)yi.F.

এই সমস্যাটির জন্য হ'ল আপনি অগত্যা পর্যবেক্ষণ করবেন নাyi. পরিবর্তে, ডেটার সাথে যুক্ত রৈখিক ক্রিয়াকলাপগুলির একটি সংজ্ঞায়িত সেট রয়েছে । স্মরণ করুন যে একটি ফাংশনাল একটি "একটি ফাংশনের ফাংশন:" প্রতিটি এর যে কোনও ফাংশনকে একটি নম্বর দেয়।এল আমি এল আমি এল আমি [] এফ LiLiLi[f]fF.

(1)yi=Li[f]+σiεi

যেখানে functionals দেওয়া হয়, হয় পরিচিত স্কেল কারণের, এবং স্বাধীন ও অভিন্নরুপে র্যান্ডম ভেরিয়েবল বিতরণ করা হয়।Liσi>0 ε iεi

দুটি অতিরিক্ত অনুমান ওএলএস প্রযোজ্য এবং পরিসংখ্যানগতভাবে অর্থবহ করে তোলে:

  1. এর সাধারণ বিতরণের একটি সীমাবদ্ধ বৈকল্পিকতা রয়েছে।εi

  2. প্রতি একটি লিনিয়ার ফাংশনাল। একটি কার্মিক হয় রৈখিক যখন কোন উপাদানের জন্য এবং সংশ্লিষ্ট সংখ্যারLiএল এফ জেα জে ,LfjFαj,

    L[jαjfj]=jαjL[fj].

(২) মডেল কে আরও স্পষ্টভাবে প্রকাশ করার অনুমতি দেয়(1)

yi=β1Li[f1]++βpLi[fp]+σiεi.

এই হ্রাসের পুরো বিষয়টি হ'ল আপনি যে সমস্ত কার্যকারিতা সমস্ত ভিত্তিক ফাংশন এবং মানক বিচ্যুতি মানগুলি সমস্ত সংখ্যা নির্ধারণ করেছেন - - রিগ্রেশন সমস্যার সাধারণ "ভেরিয়েবল" বা "বৈশিষ্ট্য" - এবং কেবল (আপেক্ষিক) ওজন। সুতরাং, গাউস-মার্কভ থিওরিমের সর্বোত্তম অর্থে, ওএলএস ব্যবহারের জন্য দুর্দান্ত পদ্ধতি।Li,fj,σi,Li[fj]σi

প্রশ্নের সাথে জড়িত ক্রিয়াকলাপগুলি নিম্নলিখিত:

  • মূল্যনির্ধারণ করা একটি নির্দিষ্ট সময়ে আমরা সাধারণত এটি করি। এটি লিনিয়ার কারণ, সংজ্ঞা অনুসারে, ফাংশনের লিনিয়ার সংমিশ্রণগুলি বিন্দু অনুসারে মূল্যায়ন করা হয়।fx: L[f]=f(x).

  • একটি নির্দিষ্ট পয়েন্ট এ ডেরিভেটিভ মূল্যায়ন করুন এটি লিনিয়ার কারণ বৈষম্য রৈখিক।fx: L[f]=f(x).

  • একটি নির্দিষ্ট পয়েন্ট এ দ্বিতীয় ডেরিভেটিভ val মূল্যায়ন করুনfx: L[f]=f(x).


ঠিক আছে, এই পদ্ধতিটি কতটা ভাল কাজ করে? যথারীতি, আমরা পর্যবেক্ষণকৃত মানগুলির সাথে লাগানো মানগুলির সাথে তুলনা করব টু । যেহেতু পজিশন, বেগ এবং ত্বরণগুলি সমস্তই বিভিন্ন ইউনিটে রয়েছে তাই তাদের পৃথক অক্ষের উপর চক্রান্ত করা উচিত।y^iyiy^i

ব্যক্তিত্ব

শীর্ষ সারিটি রেখাচিত্র এবং এর প্রথম দুটি ডেরাইভেটিভগুলিতে বক্ররেখা ব্যবহার করে। সম্পর্কিত তথ্য পয়েন্টগুলি বক্ররেখার উপরে প্লট করা হয়: বাম দিকে পর্যবেক্ষণ করা মানগুলি, মাঝখানে ডেরিভেটিভগুলি পর্যবেক্ষণ করা হয় এবং ডানদিকে দ্বিতীয় ডেরিভেটিভগুলি পর্যবেক্ষণ করে।y^

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

ডাটা মান ঠিক প্রশ্নে যেমন উত্পন্ন হয় (17 র্যান্ডম সংখ্যা বীজ সেটিং ব্যবহার করে পরে reproducibility জন্য)। আমি বি-স্প্লাইন স্পেসগুলি ব্যবহার করে ফিটগুলি অনুসন্ধান করেছি দ্বারা ফাংশন দ্বারা উত্পন্ন , এছাড়াও প্রশ্নটিতে, 1 থেকে 6 ডিগ্রি পর্যন্ত figure একটি কম এআইসি এবং ভাল অবশিষ্টাংশের আচরণের পাশাপাশি সমস্ত ছয় (নেস্টেড) মডেলের একটি আনোভা নির্দেশিত মডেল modeln=23set.seed(17)FRbs

ফিট হ'ল

y^=27.48993+2.54078f1+2.97679f2

যেখানে এবং বি-স্প্লাইন ভিত্তি করে নির্মিত ফাংশন হয় ।f1f2bs

অবশিষ্টাংশ ভাল আচরণ। ফিট গুলো ভাল। তদুপরি, এই পদ্ধতির সঠিক মডেলটি খুঁজে পেয়েছিল : ডেটা প্রকৃতপক্ষে একটি চতুর্ভুজ ফাংশন (ডিগ্রি 2) থেকে উত্পন্ন হয়েছিল। তদতিরিক্ত, মূল ত্রুটিগুলি তৈরি করতে ব্যবহৃত 0.1, 0.3 এবং 0.6 এর তুলনায় অবশিষ্টাংশগুলির স্ট্যান্ডার্ড বিচ্যুতিগুলি সঠিক মাপগুলির সম্পর্কে: 0.11, 0.20 এবং 0.61। এটি অত্যন্ত আশ্চর্যজনক যে এই বক্ররেখাগুলি স্পষ্টত পর্যবেক্ষণগুলি এক্সট্রোপল্ট করে দেয় (যা বাইরে যায় না ) এবং এই জাতীয় একটি ছোট ডেটাসেট ব্যবহার করে ( )।x=5n=23

শেষ অবধি, উচ্চ-ডিগ্রি স্প্লিনের জন্য ফিটগুলির অবশিষ্টাংশগুলি গুণগতভাবে একই; তারা কম-প্লাজিবল মডেলগুলি ব্যবহার করে ব্যয় করে কেবলমাত্র কিছুটা উন্নতি করে। পর্যাপ্ত উচ্চ ডিগ্রির জন্য, তারা পর্যবেক্ষণকৃত মানগুলির মধ্যে ছোট মানগুলির জন্য বন্যভাবে দোলন শুরু করে । এই (খারাপ) আচরণটি বর্ণনা করার জন্য, এখানে ডিগ্রি -9 ফিট রয়েছে:x

চিত্র ২

অবশেষে, এখানে একটি উদাহরণ যেখানে ভিত্তির বিভিন্ন রৈখিক কার্যকারিতার একাধিক পর্যবেক্ষণ করা হয়েছিল। এই পর্যবেক্ষণগুলি উত্পন্ন করার কোডটি প্রশ্নটিতে পরিবর্তিত হয়েছিল

mult <- 2
x_f <- rep(runif(5, 0, 5), mult)       # Two observations per point
x_df <- rep(runif(8, 3, 8), mult)      # Two derivatives per point
x_ddf <- c(x_df, rep(runif(10, 4, 9))  # Derivative and acceleration per point

চিত্র 3


Rএই গণনার বহন কোড বরং সাধারণ হয়। বিশেষত, ডেরাইভেটিভগুলি খুঁজতে এটি সংখ্যাগত পার্থক্য ব্যবহার করে যাতে এটি ব্যবহৃত স্প্লাইনের ধরণের উপর নির্ভর করে না। এটি পর্যবেক্ষণগুলিকে আনুপাতিকভাবে সাথে ওজন করে মানগুলি পরিচালনা করে এটি স্বয়ংক্রিয়ভাবে একটি লুপে মডেলগুলির সেট তৈরি করে এবং ফিট করে। রৈখিক ক্রিয়াকলাপগুলি এবং মানক বিচ্যুতি হার্ড-কোডড। ডেটাসেটে ভেরিয়েবলের মান অনুযায়ী নির্বাচিত প্রতিটি রয়েছে ।σi1/σi2.Liσitype

কীভাবে আপনি ফিটগুলি ব্যবহার করতে পারেন তার উদাহরণ হিসাবে, কোডা সংক্ষিপ্তাগুলি, তাদের এআইসির একটি তালিকা এবং সেগুলির একটি আনোভা প্রিন্ট করে।

#
# Estimate spline derivatives at points of `x`.
#
d <- function(x, s, order=1) {
  h <- diff(range(x, na.rm=TRUE))
  dh <- h * 1e-4
  lags <- seq(-order, order, length.out=order+1) * dh/2
  b <- choose(order, 0:order) * (-1)^(order:0)
  y <- b %*% matrix(predict(s, c(outer(lags, x, `+`))), nrow=length(lags))
  y <- matrix(y / (dh^order), nrow=length(x))
}
#
# Fit and plot models by degree.
#
data$order <- c(f=0, df=1, ddf=2)[data$type]
k <- max(data$order)
x <- data$x
w <- (c(0.1, 0.3, 0.6)^(-2))[data$order+1] # As specified in the question

fits <- lapply(1:6, function(deg) {
  #
  # Construct a model matrix.
  #
  s <- bs(x, degree=deg, intercept=TRUE)
  X.l <- lapply(seq.int(k+1)-1, function(i) {
    X <- subset(data, order==i)
    Y <- as.data.frame(d(X$x, s, order=i))
    cbind(X, Y)
  })
  X <- do.call("rbind", X.l)
  #
  # Fit WLS models.
  #
  f <- as.formula(paste("y ~ -1 +", paste0("V", 0:deg+1, collapse="+")))
  fit <- lm(f, X, weights=w)
  msr <- tapply(residuals(fit), data$order, function(r) {
    k <- length(r) - 1 - deg
    ifelse(k >= 1, sum(r^2) / k, 1)
  })
  #
  # Compute predicted values along the graphs.
  #
  X.new <- data.frame(x = seq(min(X$x), max(X$x), length.out=101))
  X.new$y.hat <- predict(s, X.new$x) %*% coefficients(fit)
  X.new$Dy.hat <- d(X.new$x, s, 1) %*% coefficients(fit)
  X.new$DDy.hat <- d(X.new$x, s, 2) %*% coefficients(fit)
  X$Residual <- residuals(fit)
  #
  # Return the model.
  #
  fit$msr <- msr
  fit
})
lapply(fits, function(f) sqrt(f$msr))
lapply(fits, summary)
lapply(fits, AIC)
do.call("anova", fits)

1

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

বিএলইউএফ: সংক্ষিপ্ত উত্তরটি হ'ল না। আমি আর তে কোনও কার্যকারিতা জানি না যা এটি আপনার জন্য স্বয়ংক্রিয়ভাবে করবে। দীর্ঘ উত্তরটি ... আরও জটিল। ডেরিভেটিভস এবং ফাংশন মান একই স্থানে নমুনাযুক্ত না হওয়া বিষয়টিকে আরও জটিল করে তোলে। এবং সত্য যে আপনার বিরতি ডান প্রান্ত কাছাকাছি একটি ফাংশন মান না এটি অসম্ভব হতে পারে।

আসুন কিউবিক স্প্লিন দিয়ে শুরু করি। প্রদত্ত পয়েন্টগুলি এবং সংশ্লিষ্ট দ্বিতীয় ডেরিভেটিভস , এর মধ্য দিয়ে ঘন ঘন স্প্লাইনটি হ'ল:(xj,yj)zj

Sj(x)=Ayj+Byj+1+Czj+Dzj+1
যেখানে , যাচাই করা বেশ সোজা , এবং । এটি গ্যারান্টি দেয় যে স্প্লাইন এবং এর দ্বিতীয় ডেরাইভেটিভ অবিচ্ছিন্ন। যাইহোক, এই মুহুর্তে, আমাদের একটি ক্রমাগত প্রথম ডেরাইভেটিভ নেই। প্রথম ডেরাইভেটিভকে ধারাবাহিক হতে বাধ্য করার জন্য, আমাদের নিম্নলিখিত সীমাবদ্ধতার প্রয়োজন:
hj=xj+1xjA=xj+1xhjB=1AC=16(A3A)hj2D=16(B3B)hj2
Sj(xj)=yjSj(xj+1)=yj+1Sj(xj)=zjSj(xj+1)=zj+1
(1)6hj1yj1(6hj1+6hj)yj+6hjyj+1=hj1zj1+2(hj1+hj)zj+hjzj+1
সর্বোত্তম কিউবিক স্প্লাইন সেটআপ, আপনি অনুমান আপনি পয়েন্ট আছে এবং ব্যবহারের সমীকরণ (দুই অতিরিক্ত সীমানা সীমাবদ্ধতার সহ) জন্য সমাধান করতে । আপনি জানতে স্প্লাইনটি সম্পূর্ণরূপে নির্দিষ্ট হয়ে যায় এবং আপনি যেকোন স্বেচ্ছাসেবী বিন্দুতে এটি করতে ব্যবহার করতে পারেন। একটি যুক্ত বোনাস হিসাবে, সমীকরণ a একটি ত্রিভুজাকৃতির ম্যাট্রিক্সে পরিণত হয় যা রৈখিক সময়ে সমাধান করা যায়!(xj,yj)(1)zjzj(1)

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

আপনার অবস্থা কি? আপনার কিছু পয়েন্টের ফাংশন মান রয়েছে এবং আপনার কিছু পয়েন্টের ডেরিভেটিভ রয়েছে। আপাতত, আসুন প্রথম ডেরাইভেটিভগুলিকে উপেক্ষা করুন (তারা কিউবিক স্প্লাইন ভিত্তিতে মোকাবেলা করার জন্য এক ধরণের গোলযোগ)। আনুষ্ঠানিকভাবে, আসুন function ফাংশন মানগুলির সাথে পয়েন্টগুলির সেট এবং second দ্বিতীয় ডেরিভেটিভগুলির সাথে পয়েন্টগুলির সেট হয়ে । আমরা এখনও আছে সঙ্গে সমীকরণ অজানা। এটা তোলে অজানা কিছু ঠিক যে এবং কিছু । দেখা যাচ্ছে যে 0, 1 বা 2 AND বা(xi,yi),iI(xj,zj),jJNNyjzjIN3,N2N1I। অন্য কথায়, প্রথম তিনটি পয়েন্টের একটিতে একটি ফাংশন মান থাকতে হবে এবং শেষ তিনটি পয়েন্টের একটিতে একটি ফাংশন মান হতে হবে। এই সীমাবদ্ধতা ব্যতীত, আপনি যতটা ডেরাইভেটিভগুলি চান তা ছুঁতে পারেন free

সেই প্রথম ডেরাইভেটিভ সম্পর্কে কীভাবে? আপনার স্প্লাইনে প্রথম ডেরাইভেটিভগুলি অন্তর্ভুক্ত করা অবশ্যই সম্ভব। তবে, যেমনটি আমি বলেছিলাম, এটি অনেক মেসেঞ্জার পায়। প্রথম ডেরাইভেটিভ : অবশ্য, আমরা শুধুমাত্র সত্যিই ব্যুৎপন্ন মধ্যে নট এ আগ্রহ দেখিয়েছেন তাই আমরা এ মূল্যায়নের দ্বারা এই একটি সামান্য বিট প্রক্রিয়া সহজ করতে : আপনি এগুলি যুক্ত করতে পারেন সমীকরণ থেকে আপনি যে ম্যাট্রিক্সের সীমাবদ্ধতা পান

Sj(x)=yj+1yjhj3A216hjzj+3B216hjzj+1
xj
Sj(xj)=yj+1yjhj13hjzj16hjzj+1
(1)এবং ফলস্বরূপ স্প্লাইনের নির্দিষ্ট প্রথম ডেরাইভেটিভ থাকবে। তদতিরিক্ত, এটি একক ম্যাট্রিক্স সমস্যার সাথে সহায়তা করবে। আপনি যদি প্রথম তিনটি এবং শেষ তিনটি পয়েন্টে কোনও ফাংশন মান বা প্রথম ডেরাইভেটিভ EITHER করেন তবে আপনি একটি সমাধান পাবেন।

সুতরাং আমি কিছু কিছু কোডে একসাথে রেখেছি এবং এখানে আমার কাছে ছবিটি পেয়েছে:

স্প্লাইন ভয়ঙ্কর ভুল হয়ে গেছে

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.