เส้นโค้งถูกนำมาใช้ในการสร้างแบบจำลองการถดถอยเพื่อจำลองรูปแบบการทำงานที่ซับซ้อนและไม่เป็นเชิงเส้น แนวโน้มที่ราบรื่นของ spline ประกอบด้วยพหุนามแบบต่อเนื่องจำนวนหนึ่งซึ่งมีการเปลี่ยนแปลงสัมประสิทธิ์นำในแต่ละจุดพักหรือปม เส้นโค้งอาจถูกระบุในแง่ของระดับพหุนามของแนวโน้มเช่นเดียวกับจุดพัก การเป็นตัวแทนของเส้นโค้งของโควาเรียตขยายเวกเตอร์เดียวของค่าที่สังเกตลงในเมทริกซ์ซึ่งมิติคือพหุนามพหุนามบวกจำนวนนอต
ระยะรุ่นของเส้นโค้งเป็นเพียงรุ่นเป็นระยะของการถดถอยใด ๆ : ข้อมูลจะถูกตัดเป็นซ้ำของความยาวของระยะเวลา ตัวอย่างเช่นการสร้างแบบจำลองแนวโน้มรายวันในการทดลองหลายวันบนหนูจะต้องใช้เวลาในการบันทึกใหม่ของการทดลองเพิ่มขึ้น 24 ชั่วโมงดังนั้นชั่วโมงที่ 154 จะเป็นค่าโมดูโล 24 จาก 10 (154 = 6 * 24 + 10) หากคุณพอดีกับการถดถอยเชิงเส้นในข้อมูลการตัดมันจะประมาณรูปคลื่นของใบเลื่อยสำหรับแนวโน้ม ถ้าคุณใส่ฟังก์ชั่นสเต็ปในที่ใดช่วงหนึ่งมันจะเป็นรูปคลื่นที่เหมาะกับซีรีย์ เส้นโค้งมีความสามารถในการแสดงเวฟที่ซับซ้อนมากขึ้น สำหรับสิ่งที่คุ้มค่าในsplines
แพ็คเกจมีฟังก์ชั่นperiodicSpline
ที่ทำสิ่งนี้อย่างแน่นอน
พีnkพีp + iฉัน≤ nkSp + i= ( X- kผม)พีผม( X< kผม)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
}
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)
คุณจะเห็นว่าพวกมันค่อนข้างสอดคล้องกัน นอกจากนี้อนุสัญญาการตั้งชื่อช่วยให้การตีความ ในผลลัพธ์การถดถอยที่คุณเห็น:
> 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
π/ 2
ฉันจะสมมติว่าคุณรู้ช่วงเวลาของข้อมูลในมือ หากข้อมูลไม่มีการเติบโตหรือส่วนประกอบเฉลี่ยเคลื่อนที่คุณอาจแปลงอนุกรมเวลาที่ยาวนานให้เป็นการทำซ้ำซีรีย์สั้น ๆ ที่มีระยะเวลา 1 งวด ตอนนี้คุณมีการจำลองแบบและสามารถใช้การวิเคราะห์ข้อมูลเพื่อประเมินแนวโน้มที่เกิดซ้ำ
สมมติว่าฉันสร้างเสียงดังต่อไปนี้ค่อนข้างอนุกรมเวลานาน
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)
ผลลัพธ์ที่ได้แสดงให้เห็นถึงประสิทธิภาพที่เหมาะสม
> 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