Periyodik verilere uyması için periyodik spline'lar


10

Bu soruya yapılan bir yorumda , @whuber, periyodik verilere uyması için spline'ların periyodik bir versiyonunu kullanma olasılığını gösterdi. Bu yöntem, özellikle spline'ları tanımlayan denklemler ve bunların pratikte nasıl uygulanacağı hakkında daha fazla bilgi edinmek istiyorum (çoğunlukla Rkullanıcıyım, ancak ihtiyaç duyulursa MATLAB veya Python ile yapabilirim). Ayrıca, ama bu bir "sahip olmak güzel", trigonometrik polinom uydurma ile ilgili olası avantajları / dezavantajları bilmek harika olurdu, bu genellikle bu tür verilerle nasıl başa çıkacağım (yanıt çok düzgün değilse, bu durumda periyodik çekirdekli Gauss Süreci'ne geçiyorum).


2
başka sorularımın cevabını kontrol et. stats.stackexchange.com/questions/225729/…
Haitao Du

@ hxd1011 teşekkürler, bahşiş için teşekkür ederiz. Sonunda, verileri iki kez çoğaltmaya karar verdim, böylece ardışık üç özdeş veri kümesine sahip oldum ve spline'ı ortadaki üçüncüye sığdırdım. Söz ettiğiniz cevap, bunu alternatif bir çözüm olarak da gösterir.
DeltaIV

1
@DeltaIV, yorumunuzu bir cevaba dönüştürebilir ve daha fazla ayrıntı verebilirseniz, bunun iyi bir cevap ve bazı çözümlere sahip olmak için iyi bir soru olduğunu düşünüyorum.
AdamO

@AdamO öneri için teşekkürler, ancak yılın bu zamanında biraz gömülüyorum :-) Yine de deneyeceğim. Her şeyden önce bu kodu
almalıyım

Yanıtlar:


5

Splinelar, muhtemelen karmaşık, doğrusal olmayan fonksiyonel formları modellemek için regresyon modellemesinde kullanılır. Spline yumuşatılmış bir trend, her bir kesme noktasında veya düğümde önde gelen katsayısı değişen parçalı sürekli polinomlardan oluşur. Spline, trendin polinom derecesi ve kesme noktaları cinsinden belirtilebilir. Bir ortak değişkenin spline gösterimi, gözlenen değerlerin tek bir vektörünü, boyutu polinom derecesi artı düğüm sayısı olan bir matrise genişletir.

Bir periyodik kama versiyonu yalnızca bir gerileme periyodik bir versiyonu: Veri dönemin uzunluğu çoğaltır halinde kesilir. Örneğin, fareler üzerinde çok günlük bir deneyde günlük bir eğilimin modellenmesi, deney zamanının 24 saatlik artışlarla yeniden kodlanmasını gerektirecektir, bu nedenle 154. saat 10 modulo 24 değeri olacaktır (154 = 6 * 24 + 10). Kesilen verilere doğrusal bir regresyon takarsanız, trend için bir testere dişi dalga formunu tahmin eder. Dönemde herhangi bir yere bir adım fonksiyonu sığdırırsanız, bu seriye uyan bir kare dalga formu olacaktır. Spline çok daha karmaşık bir dalgayı ifade edebilir. Değer için, splinespakette, periodicSplinetam olarak bunu yapan bir işlev var.

R'nin varsayılan spline "bs" uygulamasını yorumlama için yararlı bulmuyorum. Bu yüzden aşağıda kendi senaryomu yazdım. Derece bir kama için ile knot, bu gösterim, ilk verir , sütunlar standart polinom temsili inci kolonlar ( basit olarak değerlendirilir) burada düğümlerin gerçek vektörüdür.pnkpp+iinkSp+i=(Xki)pI(X<ki)k

myspline <- function(x, degree, knots) {
  knots <- sort(knots)
  val <- cbind(x, outer(x, knots, `-`))
  val[val < 0] <- 0
  val <- val^degree
  if(degree > 1)
    val <- cbind(outer(x, 1:{degree-1}, `^`), val)
  colnames(val) <- c(
    paste0('spline', 1:{degree-1}, '.1'),
    paste0('spline', degree, '.', seq(length(knots)+1))
  )
  val
}

Küçük bir örnek olay incelemesi için, 0 ila (veya ) alanında sinüzoidal bir trendi :2πτ

x <- seq(0, 2*pi, by=pi/2^8)
y <- sin(x)
plot(x,y, type='l')
s <- myspline(x, 2, pi)
fit <- lm(y ~ s)
yhat <- predict(fit)
lines(x,yhat)

Oldukça uyumlu olduklarını göreceksiniz. Ayrıca, adlandırma kuralı yorumlamayı sağlar. Regresyon çıktısında şunları görürsünüz:

> summary(fit)

Call:
lm(formula = y ~ s)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.04564 -0.02050  0.00000  0.02050  0.04564 

Coefficients:
             Estimate Std. Error  t value Pr(>|t|)    
(Intercept) -0.033116   0.003978   -8.326 7.78e-16 ***
sspline1.1   1.268812   0.004456  284.721  < 2e-16 ***
sspline2.1  -0.400520   0.001031 -388.463  < 2e-16 ***
sspline2.2   0.801040   0.001931  414.878  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.02422 on 509 degrees of freedom
Multiple R-squared:  0.9988,    Adjusted R-squared:  0.9988 
F-statistic: 1.453e+05 on 3 and 509 DF,  p-value: < 2.2e-16

Spline1.1 derecem için ilk ortak değişkenler kümesi, ilk kırılma noktasının arkasındaki ilk etki alanı için polinom eğilimidir. Doğrusal terim, başlangıçtaki teğetin eğimi, X = 0'dır. Bu sinüzoidal eğrinin (cos (0) = 1) türevi ile gösterilecek yaklaşık 1'dir, ancak bunların yaklaşık değerler olduğunu ve kuadratik eğilimi dışına çıkarma hatasının eğilimli olduğunu aklımızda tutmalıyız. hata. İkinci dereceden terim negatif, içbükey bir şekli gösterir. Spline2.2 terimi, birinci kuadratik eğimden bir farkı belirtir ve yukarı doğru, dışbükey bir şekli gösteren 0.4 pozitif bir lider katsayısına yol açar. Şimdi spline çıktısı için yorumumuz var ve çıkarım ve tahminleri buna göre değerlendirebiliyoruz.π/2

Eldeki verilerin periyodikliğini bildiğinizi varsayacağım. Verilerde büyüme veya hareketli ortalama bileşeni yoksa, uzun zaman serilerini 1 dönemlik kısa serilerin kopyalarına dönüştürebilirsiniz. Artık kopyalarınız var ve tekrarlayan eğilimi tahmin etmek için veri analizini kullanabilirsiniz.

Aşağıdaki noisey, çok uzun zaman serilerini oluşturduğumu varsayalım:

x <- seq(1, 100, by=0.01)
y <- sin(x) + rnorm(length(x), 0, 10)
xp <- x %% (2*pi)
s <- myspline(xp, degree=2, knots=pi)
lm(y ~ s)

Ortaya çıkan çıktı makul performans gösterir.

> summary(fit)

Call:
lm(formula = y ~ s)

Residuals:
    Min      1Q  Median      3Q     Max 
-39.585  -6.736   0.013   6.750  37.389 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.48266    0.38155  -1.265 0.205894    
sspline1.1   1.52798    0.42237   3.618 0.000299 ***
sspline2.1  -0.44380    0.09725  -4.564 5.09e-06 ***
sspline2.2   0.76553    0.18198   4.207 2.61e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 9.949 on 9897 degrees of freedom
Multiple R-squared:  0.006406,  Adjusted R-squared:  0.006105 
F-statistic: 21.27 on 3 and 9897 DF,  p-value: 9.959e-14
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.