मैं उन डेटा को कैसे फिट कर सकता हूं जिनमें मान और 1st / 2nd डेरिवेटिव शामिल हैं?


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 के पेपर में हल किया था। मुझे नहीं पता कि क्या आर इसे सपोर्ट करता है, लेकिन खोज शब्द "हर्माइट स्प्लिन्स" है।
user14717

@DavidLeBauer यह वही है जो मैं वर्तमान में कर रहा हूं। मैंने एक ऑप्टिमाइज़ेशन समस्या को औपचारिक रूप दिया, जो कई बिंदुओं पर फिट बैठती है जैसे कि स्पलाइन और यह डेरिवेटिव डेटा अनुमानित है। लेकिन एक अधिक प्रत्यक्ष विधि महान होगी।
दानी

3
कलमन फ़िल्टरिंग के माध्यम से काफी मानक दृष्टिकोण है। (अप्रतिबंधित) स्थिति में सटीक डेरिवेटिव होते हैं और अवलोकन इनका शोर संस्करण होते हैं। उदाहरण के लिए, एक क्यूबलाइन के लिए मॉडल मोटे तौर पर बताता है कि दूसरा क्रम व्युत्पन्न (निरंतर समय) सफेद शोर है, लेकिन एक उच्च-क्रम वाला मॉडल भी इस्तेमाल किया जा सकता है। आपको वर्तमान अवलोकन के लिए व्युत्पत्ति के आदेश के आधार पर माप शोर का वर्णन करना होगा। पहले दृष्टिकोण में तीन शोर संस्करण (अनुमानित होने के लिए) पर्याप्त हो सकते हैं।
यवेस

2
डेरिवेटिव पर माप त्रुटि क्या है? क्या यह स्थिति से बहुत अधिक है? अपने प्लॉट में भी क्यों अंक अंक संरेखित करें? एक्स अक्ष क्या है?
Aksakal

जवाबों:


9

हम यह वर्णन करेंगे कि एक स्टेट-स्पेस मॉडल (SSM) के संबंध में कलमन फ़िल्टरिंग (KF) तकनीकों के माध्यम से एक तख़्ता कैसे इस्तेमाल किया जा सकता है। तथ्य यह है कि कुछ तटरेखा मॉडल का प्रतिनिधित्व एसएसएम द्वारा किया जा सकता है और केएफ के साथ गणना सीएफ अंसले और आर। कोहन द्वारा 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)
α(टी)η(टी)क्यूε(टीकश्मीर)मीटरα(टी):=[(टी), जहाँ बिना स्टेट वेक्टर है और एक गौसियन व्हाइट शोर है जिसमें सहसंयोजक , जिसे स्वतंत्र माना जाता है अवलोकन शोर r.vs । एक का वर्णन करने के लिए, हम पहला व्युत्पत्ति, यानी को स्टैक करके प्राप्त की गई स्थिति पर विचार करते हैं । संक्रमण है α(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मीटर-1m=2>1 y ( t k ) और फिर हमें ऑर्डर (और डिग्री ) के साथ एक बहुपद का पता । जबकि सामान्य घन रेखा से मेल खाता है,2m2m1m=2>1। एक शास्त्रीय SSM औपचारिकता से चिपके रहने के लिए हम (O1) को जहां अवलोकन मैट्रिक्स में उपयुक्त व्युत्पन्न उठाता और विचरण की के आधार पर चुना जाता है । So जहां , और । इसी तरह
(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टीकश्मीर=exp{δकश्मीरएक}=[ 1 δ 1 कश्मीरगायब नहीं है। कुछ बीजगणित का उपयोग करके हम असतत-समय SSM लिए संक्रमण मैट्रिक्स पा सकते हैं जहां के लिए । इसी तरह covariance मैट्रिक्स असतत समय के लिए SSM के रूप में दिया जा सकता है
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
जहां सूचकांक और और बीच हैं ।ij1m

अब आर में गणना करने के लिए हमें केएफ को समर्पित पैकेज और समय-भिन्न मॉडल को स्वीकार करने की आवश्यकता है; CRAN पैकेज KFAS एक अच्छा विकल्प लगता है। हम SSM (DT) को एनकोड करने के लिए के वेक्टर से matrices और गणना करने के लिए R फ़ंक्शन लिख सकते हैं । पैकेज द्वारा उपयोग किए जाने वाले नोटेशन में, एक मैट्रिक्स शोर को (DT) के संक्रमण समीकरण में गुणा करने के लिए आता है : हम इसे पहचान । यह भी ध्यान दें कि एक फैलाना प्रारंभिक सहसंयोजक का उपयोग यहां किया जाना चाहिए।TkQktkRkηkIm

संपादित करें शुरू में लिखा के रूप में गलत था। फिक्स्ड (आर कोड और छवि में भी)।Q

सीएफ अंसले और आर। कोहन (1986) "टू स्टोचस्टिक एप्रोच टू द स्पलाइन स्मूथिंग" जे। एपल। Probab। , 23, पीपी 391-405

आर। कोह्न और सीएफ अंसले (1987) "एक नया एल्गोरिथ्म स्पलाइन स्मूथिंग फॉर स्मूथिंग अ स्टोचैस्टिक प्रोसेस" सियाम जे। साइंस। और स्टेट। कंप्यूटर। , 8 (1), पीपी। 33-48

जे। हेल्स्के (2017)। "KFAS: एक्सपोनेंशियल फैमिली स्टेट स्पेस मॉडल इन आर" जे स्टेट। मुलायम। , 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। क्या सभी जानकारी का उपयोग करना कैसे संभव है? फिर से, अपने उत्तर के लिए योग्यता प्राप्त करें।
दानी

मेरा पढ़ना यह है कि T1 के नीचे सब कुछ एक ही इंजेक्शन प्रक्रिया में कई डेरिवेटिव का उपयोग करने के बारे में है। यव हालांकि पुष्टि कर सकते हैं।
eric_kernfeld

वास्तव में, आप डेरिवेटिव को एक लिए उपयोग कर सकते हैं : अवलोकन तो एक वेक्टर है और में पंक्तियां हैं जो वांछित डेरिवेटिव को हैं। मुझे यकीन है कि एक सामान्य KFAS के साथ काम करता है , लेकिन NA का उपयोग करके समय के साथ-साथ भिन्न होना संभव हो सकता है । ok>1tkykZkoko>1o
यवेस

@ क्या मैं आपको सही ढंग से समझता हूं: यदि मेरे पास t_k में पहला और दूसरा व्युत्पन्न बिंदु है, तो Z_k इस तरह दिखता है matrix(c(0,0,0, 0,1,0, 0,0,1), nrow=length(d_k), ncol=m, byrow = T):। तो, कुल मिलाकर यह आयाम का एक क्यूब होगा 'उच्चतम व्युत्पन्न' * 'समय सीमा' * '' # समय के कदम ''
dani

हां @ दानी, लगभग: सभी matrices के लिए पंक्तियों की संख्या में यानी है। यह उच्चतम व्युत्पन्न क्रम प्लस एक है। साथ ही, स्पलाइन की डिग्री , नहीं । आपके उदाहरण में चूंकि आप ऑर्डर (फ़ंक्शन स्वयं) के व्युत्पन्न का निरीक्षण नहीं करते हैं, इसे टिप्पणियों में सेट किया जाना चाहिए और आप पहली पंक्ति को भी छोड़ सकते हैं। हालाँकि, मुझे संदेह है कि इस विशिष्ट मामले में समस्या खराब है, SSM अवलोकनीय नहीं है । Zkmaxk{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

दो अतिरिक्त धारणाएँ OLS को लागू और सांख्यिकीय रूप से सार्थक बनाती हैं:

  1. सामान्य वितरण में एक परिमित विचरण है।εi

  2. प्रत्येक एक रैखिक कार्यात्मक है। एक कार्यात्मक तब रैखिक होता है जब किसी भी तत्व के लिए और संबंधित संख्याएँLiLfjFαj,

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

(2) मॉडल को अधिक स्पष्ट रूप से व्यक्त करने की अनुमति देता है(1)

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

इस कमी की पूरी बात यह है कि क्योंकि आपने सभी कार्यात्मक सभी आधार कार्यों और मानक विचलन मान सभी संख्याएँ हैं - -यह एक प्रतिगमन समस्या के सामान्य "वैरिएबल" या "विशेषताएं" हैं - और केवल (सापेक्ष) वजन हैं। इस प्रकार, गॉस-मार्कोव प्रमेय के इष्टतम अर्थ में, ओएलएस का उपयोग करने के लिए एक शानदार प्रक्रिया है।Li,fj,σi,Li[fj]σi

प्रश्न में शामिल कार्य निम्नलिखित हैं:

  • किसी निर्दिष्ट बिंदु पर मूल्यांकन करें यह वही है जो हम आमतौर पर करते हैं। यह रैखिक है, क्योंकि परिभाषा के अनुसार, कार्यों के रैखिक संयोजन का मूल्यांकन बिंदुवार किया जाता है।fx: L[f]=f(x).

  • एक निर्दिष्ट बिंदु पर व्युत्पन्न Prime का मूल्यांकन करें यह रैखिक है क्योंकि भेदभाव रैखिक है।fx: L[f]=f(x).

  • दूसरे व्युत्पन्न निर्दिष्ट बिंदु पर मूल्यांकन करेंfx: L[f]=f(x).


ठीक है, यह दृष्टिकोण कितनी अच्छी तरह काम करता है? हमेशा की तरह, हम अवशिष्ट अध्ययन किए गए मानों से सज्जित मूल्यों तुलना करेंगे । चूंकि पदों, वेगों, और त्वरण सभी अलग-अलग इकाइयों में हैं, इसलिए उन्हें अलग-अलग कुल्हाड़ियों पर चढ़ाना चाहिए।y^iyiy^i

आकृति

शीर्ष पंक्ति घटता ग्राफ और इसके पहले दो डेरिवेटिव का उपयोग करती है। संबंधित डेटा बिंदुओं को वक्रों पर प्लॉट किया जाता है: बाईं ओर स्थित मान, मध्य में मनाया गया डेरिवेटिव, और दाईं ओर दूसरा डेरिवेटिव देखा गया।y^

नीचे की पंक्ति संबंधित अवशेषों को प्लॉट करती है। हमेशा की तरह, हम किसी भी प्रशंसनीय रिश्ते की कमी की तलाश कर रहे हैं: हमें उम्मीद है कि अवशिष्ट मूल्य (उनके y- निर्देशांक) बेतरतीब ढंग से बाएं से दाएं, स्वतंत्रता और कोई रुझान नहीं दिखाते हैं।

डेटा मान बिल्कुल प्रश्न में के रूप में उत्पन्न किया गया (17 करने के लिए यादृच्छिक संख्या बीज की स्थापना उपयोग करने के बाद reproducibility के लिए)। मैंने बी-स्लाइन स्पेस का उपयोग करके पता लगाया है कि फंक्शन द्वारा जनरेट किया गया है , साथ ही प्रश्न 1 के लिए। 1 के माध्यम से 6. यह आंकड़ा डिग्री 2 के लिए परिणाम दिखाता है, जो कि सबसे कम डिग्री (सबसे सरल मॉडल है) एक कम एआईसी और अच्छे अवशिष्ट व्यवहार का प्रदर्शन, साथ ही साथ सभी छह (नेस्टेड) ​​मॉडल के एनोवा द्वारा इंगित मॉडल।n=23set.seed(17)FRbs

फिट है

y^=27.48993+2.54078f1+2.97679f2

जहाँ और B-spline आधार फ़ंक्शन द्वारा बनाए गए हैं ।f1f2bs

अवशिष्ट अच्छा व्यवहार करते हैं। फिट हैं अच्छे हैं। इसके अलावा, इस दृष्टिकोण को सही मॉडल मिला : डेटा वास्तव में एक द्विघात फ़ंक्शन (डिग्री 2) से उत्पन्न हुए थे। इसके अलावा, अवशेषों के मानक विचलन सही आकारों के बारे में हैं: मूल त्रुटियों को उत्पन्न करने के लिए 0.1, 0.3 और 0.6 की तुलना में 0.11, 0.20 और 0.61। यह बहुत आश्चर्यजनक है कि ये कर्व स्पष्ट रूप से टिप्पणियों को एक्सट्रपलेशन करते हैं (जो से आगे नहीं जाते हैं ) और ऐसे छोटे डेटासेट ( ) का उपयोग करते हैं।x=5n=23

अंत में, उच्च-डिग्री वाले स्प्लिन के लिए फिट के अवशेष गुणात्मक रूप से समान हैं; वे कम-प्रशंसनीय मॉडल का उपयोग करने की लागत पर केवल मामूली सुधार करते हैं। पर्याप्त रूप से उच्च डिग्री के लिए, वे उदाहरण के लिए, देखे गए मूल्यों के बीच छोटे मूल्यों के लिए बेतहाशा दोलन करना शुरू करते हैं । इस (बुरे) व्यवहार को समझने के लिए, यहाँ डिग्री -9 फिट है:x

चित्र 2

अंत में, यहाँ एक उदाहरण है जहाँ आधार के विभिन्न रैखिक क्रियाओं के कई अवलोकन किए गए थे। इन टिप्पणियों को उत्पन्न करने के लिए कोड को उस प्रश्न में से बदल दिया गया था

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

चित्र तीन


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

सबसे पहले, मैं इस प्रश्न को प्रस्तुत करने के लिए धन्यवाद देना चाहता हूं। यह वास्तव में एक दिलचस्प सवाल है। मुझे स्प्लिन और उन चीजों से प्यार है जो आप उनके साथ कर सकते हैं। और इससे मुझे कुछ शोध करने का बहाना मिल गया। :-)

BLUF: संक्षिप्त उत्तर नहीं है। मैं आर में किसी भी कार्यक्षमता का पता नहीं है जो आपके लिए यह स्वचालित रूप से करेगा। लंबा जवाब है ... और अधिक जटिल। तथ्य यह है कि डेरिवेटिव और फ़ंक्शन मान एक ही स्थान पर सैंपल नहीं किए गए हैं, इससे यह और अधिक कठिन हो जाता है। और तथ्य यह है कि आप अंतराल के दाईं ओर के पास एक फ़ंक्शन मान नहीं है, यह असंभव बना सकता है।

आइए क्यूबिक स्लाइन के साथ शुरू करते हैं। दिए गए अंक और संबंधित दूसरी व्युत्पन्न , उनके माध्यम से गुजरने वाली घन रेखा है:(xj,yj)z jzj

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
क्लासिक क्यूबिक सेटअप में, आप मान लेते हैं कि आपके पास अंक और को हल करने के लिए समीकरण ( (दो अतिरिक्त सीमा बाधाओं के साथ) का । एक बार जब आप जान , तो पूरी तरह से निर्दिष्ट हो जाती है और आप इसे किसी भी मनमाने बिंदु पर प्रक्षेपित करने के लिए उपयोग कर सकते हैं। एक अतिरिक्त बोनस के रूप में, समीकरण एक त्रिदोष मैट्रिक्स में बदल जाता है जिसे रैखिक समय में हल किया जा सकता है!(xj,yj)(1)zjzj(1)

ठीक है, अब मान लीजिए कि जानने के बजाय , आपको पता है । आप समीकरण का उपयोग कर सकते के लिए हल करने के लिए ? शुद्ध बीजगणित के दृष्टिकोण से, यह संभव लगता है। कर रहे हैं समीकरण और अज्ञात है, तो ... क्यों नहीं? लेकिन यह पता चला है कि आप नहीं कर सकते हैं; मैट्रिक्स विलक्षण होगा। और यह कोई आश्चर्य के रूप में आना चाहिए। आप संभवतः दूसरे डेरिवेटिव्स को दिए गए फ़ंक्शन मानों को कैसे प्रक्षेपित कर सकते हैं? बहुत कम से कम, आपको एक विभेदक समीकरण की तरह एक प्रारंभिक मूल्य की आवश्यकता होगी।yjzj(1)yjNN

आपकी स्थिति के बारे में क्या? आपके कुछ बिंदुओं में फ़ंक्शन मान हैं और आपके कुछ बिंदुओं में डेरिवेटिव हैं। कुछ समय के लिए, आइए पहले डेरिवेटिव को अनदेखा करें (वे क्यूबिक आधार रेखा से निपटने के लिए एक तरह का गड़बड़ है)। औपचारिक रूप से, फ़ंक्शन मानों और साथ बिंदुओं का समूह होना चाहिए दूसरे डेरिवेटिव के साथ बिंदुओं का सेट हो। हम अभी भी है के साथ समीकरण अज्ञात। यह सिर्फ इतना है कि कुछ अज्ञात और कुछ । यह पता चला है कि यदि आप 0, 1 या 2 और या समाधान प्राप्त करेंगे।(xi,yi),iI(xj,zj),jJNNyjzjIN3,N2N1I। दूसरे शब्दों में, पहले तीन बिंदुओं में से एक को फ़ंक्शन मान होना चाहिए और अंतिम तीन बिंदुओं में से एक को फ़ंक्शन मान होना चाहिए। उस बाधा के अलावा, आप जितने चाहें उतने डेरिवेटिव में फेंकने के लिए स्वतंत्र हैं।

कैसे उन पहले डेरिवेटिव के बारे में? यह निश्चित रूप से संभव है कि आप अपनी रूपरेखा में पहले डेरिवेटिव को शामिल करें। लेकिन, जैसा मैंने कहा, यह बहुत गड़बड़ हो जाता है। की पहली व्युत्पत्ति द्वारा दी गई है: बेशक, हम केवल समुद्री मील में व्युत्पन्न में रुचि रखते हैं, इसलिए हम इसे : पर मूल्यांकन करके इसे थोड़ा सरल कर सकते हैं। आप इन्हें जोड़ सकते हैं मैट्रिक्स के लिए अड़चनें आप समीकरण

Sj(x)=yj+1yjhj3A216hjzj+3B216hjzj+1
xj
Sj(xj)=yj+1yjhj13hjzj16hjzj+1
(1)और परिणामी सीमा के पास पहला पहला व्युत्पन्न होगा। इसके अलावा, यह विलक्षण मैट्रिक्स समस्या के साथ मदद करेगा। यदि आपके पास एक फ़ंक्शन मान या पहले तीन और अंतिम तीन बिंदुओं में पहला व्युत्पन्न है, तो आपको एक समाधान मिलेगा।

इसलिए मैंने सभी को एक साथ कुछ कोड में डाल दिया और यहां जो चित्र मुझे मिला वह है:

स्पलाइन भयानक रूप से गलत हो गया

जैसा कि आप देख सकते हैं, परिणाम बहुत अच्छे नहीं हैं। ऐसा इसलिए है क्योंकि यह एक नियमित तर्ज है जिसे सभी डेटा का सम्मान करना चाहिए। चूंकि डेटा स्टोचस्टिक है, हमें वास्तव में एक प्रतिगमन स्पलाइन का उपयोग करने की आवश्यकता है। यह एक और पोस्ट के लिए एक विषय है। लेकिन अगर आप गणित के माध्यम से काम करते हैं, तो आप रैखिक समानता की बाधाओं के अधीन एक द्विघात उद्देश्य फ़ंक्शन को अनुकूलित करके समाप्त कर देंगे - और एक बंद फॉर्म समाधान है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.