library(ICS)
load("data/finland/fint.RData")
fint_eval <- fint_trend |>
mutate(tday = as.fd(tday)) |>
eval_funs(tday, n = 100) |>
st_drop_geometry() |>
select(x, y, fmisid) |>
pivot_wider(names_from = fmisid, values_from = y) |>
column_to_rownames("x") |>
t()
fint_cov <- cov(fint_eval)
eps <- 1e-8 * matrix(rnorm(ncol(fint_eval) * nrow(fint_eval), sd = max(abs(fint_eval))),
nrow = nrow(fint_eval)
)
fint_cov4 <- cov4(fint_eval + eps)
fint_trend_scatters <- crossing(t_1 = colnames(fint_eval), t_2 = colnames(fint_eval)) |>
rowwise() |>
mutate(Cov = fint_cov[t_1, t_2], Cov_4 = fint_cov4[t_1, t_2]) |>
pivot_longer(c(Cov, Cov_4), names_to = "scatter", values_to = "z") |>
mutate(t_1 = as.numeric(t_1), t_2 = as.numeric(t_2))
tday_ics <- dda::ICS(fint_trend$tday)
fint_basis <- fint_trend$tday[[1]]$basis
changemat <- to_zbsplines(basis = fint_basis, inv = TRUE)
gram <- t(changemat) %*% fda::inprod(fint_basis, fint_basis) %*% changemat
tday_cov_zb <- cov(t(to_zbsplines(c(fint_trend$tday))))
tday_cov4_zb <- cov4(t(to_zbsplines(c(fint_trend$tday))))
# changemat_inv <- to_zbsplines(basis = fint_basis)
# tday_cov_b <- t(changemat_inv) %*% tday_cov_zb %*% changemat_inv
# tday_cov4_b <- t(changemat_inv) %*% tday_cov4_zb %*% changemat_inv
rangeval <- fint_trend$tday[[1]]$basis$rangeval
tval <- seq(rangeval[1], rangeval[2], length.out = 100)
zbsp <- fd(to_zbsplines(inv = TRUE, coefs = diag(11), basis = fint_basis), fint_basis)
zbsp_tval <- eval.fd(tval, zbsp)
tday_cov_grid <- zbsp_tval %*% tday_cov_zb %*% t(zbsp_tval)
tday_cov4_grid <- zbsp_tval %*% tday_cov4_zb %*% t(zbsp_tval)
dimnames(tday_cov_grid) <- list(tval, tval)
dimnames(tday_cov4_grid) <- list(tval, tval)
fint_trend_scatters_2 <- reshape2::melt(tday_cov_grid) |>
rename(t_1 = Var1, t_2 = Var2, Cov = value) |>
mutate(Cov_4 = reshape2::melt(tday_cov4_grid)$value) |>
pivot_longer(c(Cov, Cov_4), names_to = "scatter", values_to = "z")
ggplot(fint_trend_scatters_2) +
stat_contour_filled(aes(t_1, t_2, z = z)) +
facet_wrap(vars(scatter), nrow = 2) +
labs(x = "Temperature (deg. celsius)", y = "Temperature (deg. celsius)", z = "Value")