Моя цель - построить разностную декомпозицию кубического сглаживающего сплайна для разных степеней свободы.
Сначала я имитирую тестовый набор (матрица) и набор поездов (матрица).Затем я повторяю более 100 симуляций и изменяю в каждой итерации степени свободы сглаживающего сплайна.
Вывод, полученный с помощью приведенного ниже кода, не показывает компромисса.Что я делаю неправильно при расчете смещения / дисперсии?
Для справки, на правой панели этого рисунка (слайд 14) показан компромисс, который я ожидал ( source )
rm(list = ls())
library(SimDesign)
set.seed(123)
n_sim <- 100
n_df <- 40
n_sample <- 100
mse_temp <- matrix(NA, nrow = n_sim, ncol = n_df)
var_temp <- matrix(NA, nrow = n_sim, ncol = n_df)
bias_temp <- matrix(NA, nrow = n_sim, ncol = n_df)
# Train data -----
x_train <- runif(n_sample, -0.5, 0.5)
f_train <- 0.8*x_train+sin(6*x_train)
epsilon_train <- replicate(n_sim, rnorm(n_sample,0,sqrt(2)))
y_train <- replicate(n_sim,f_train) + epsilon_train
# Test data -----
x_test <- runif(n_sample, -0.5, 0.5)
f_test <- 0.8*x_test+sin(6*x_test)
epsilon_test <- replicate(n_sim, rnorm(n_sample,0,sqrt(2)))
y_test <- replicate(n_sim,f_test) + epsilon_test
for (mc_iter in seq(n_sim)){
for (df_iter in seq(n_df)){
cspline <- smooth.spline(x_train, y_train[,mc_iter], df=df_iter+1)
cspline_predict <- predict(cspline, x_test)
mse_temp[mc_iter, df_iter] <- mean((y_test[,mc_iter] - cspline_predict$y)^2)
var_temp[mc_iter, df_iter] <- var(cspline_predict$y)
# bias_temp[mc_iter, df_iter] <- bias(cspline_predict$y, f_test)^2
bias_temp[mc_iter, df_iter] <- mean((replicate(n_sample, mean(cspline_predict$y))-f_test)^2)
}
}
mse_spline <- apply(mse_temp, 2, FUN = mean)
var_spline <- apply(var_temp, 2, FUN = mean)
bias_spline <- apply(bias_temp, 2, FUN = mean)
par(mfrow=c(1,3))
plot(seq(n_df),mse_spline, type = 'l')
plot(seq(n_df),var_spline, type = 'l')
plot(seq(n_df),bias_spline, type = 'l')