#Generate loop-de-loop spline
data = as.data.frame(matrix(nrow = 1000, ncol = 3))
data[1:150,3] = 0
data[151:420,3] = c(1:270)
data[421:580,3] = 270
data[581:850,3] = c(270:1)
data[851:1000,3] = 0
data[1,1:2] = c(1,0)
library(spdep)
for(i in 2:1000){
data[i,1:2] = c(data[(i-1),1] + 1, data[(i-1),2])
angle = (data[i,3]*(pi/180))
data[i,1:2] = (Rotation(as.matrix(data[i,1:2] - data[(i-1),1:2], nrow = 1, ncol = 2), angle)
+ data[(i-1),1:2])
}
#Randomly generate data around spline
data_loopy = as.data.frame(matrix(nrow = 10000, ncol = 2))
for(i in 1:1000){
data_loopy[((i-1)*10 + 1):(i*10),1] = rnorm(10, data[i,1],5)
data_loopy[((i-1)*10 + 1):(i*10),2] = rnorm(10, data[i,2],5)
}
#Plot randomly generated data
plot(data_loopy, cex = 0.1)
#Add spline line in red
lines(data[,1:2], col = "red", lwd = 2)
#Peform Kalman Filtering
test = crescent_kf(x = data_loopy, p_length = 1000, x_hat_s = c(data_loopy[1,1],data_loopy[1,2]),
sigma_s = c(10,0,0,10), B_s = 0, d = 0.75,
alpha = 1.1, beta = 20, gamma = 15)
#Add prediction line in green
lines(test$x_hat, lwd = 2, col = "green")
#Add legend
legend('topleft', col = c("red", "green"),
legend = c("Actual", "Predicted"), pch = 16)
Run the code above in your browser using DataLab