library(ICS)
oct_eval <- oct_slope |>
mutate(tx = as.fd(tx)) |>
eval_funs(tx, n = 100) |>
st_drop_geometry() |>
select(x, y, id) |>
pivot_wider(names_from = id, values_from = y) |>
column_to_rownames("x") |>
t()
oct_cov <- cov(oct_eval)
eps <- 1e-8 * matrix(rnorm(ncol(oct_eval) * nrow(oct_eval), sd = max(abs(oct_eval))),
nrow = nrow(oct_eval)
)
oct_cov4 <- cov4(oct_eval + eps)
oct_slope_scatters <- crossing(t_1 = colnames(oct_eval), t_2 = colnames(oct_eval)) |>
rowwise() |>
mutate(Cov = oct_cov[t_1, t_2], Cov_4 = oct_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))
tx_ics <- dda::ICS(oct_slope$tx)
oct_basis <- oct_slope$tx[[1]]$basis
changemat <- to_zbsplines(basis = oct_basis, inv = TRUE)
gram <- t(changemat) %*% fda::inprod(oct_basis, oct_basis) %*% changemat
tx_cov_zb <- cov(t(to_zbsplines(c(oct_slope$tx))))
tx_cov4_zb <- cov4(t(to_zbsplines(c(oct_slope$tx))))
# changemat_inv <- to_zbsplines(basis = oct_basis)
# tx_cov_b <- t(changemat_inv) %*% tx_cov_zb %*% changemat_inv
# tx_cov4_b <- t(changemat_inv) %*% tx_cov4_zb %*% changemat_inv
rangeval <- oct_slope$tx[[1]]$basis$rangeval
tval <- seq(rangeval[1], rangeval[2], length.out = 100)
zbsp <- fd(to_zbsplines(inv = TRUE, coefs = diag(11), basis = oct_basis), oct_basis)
zbsp_tval <- eval.fd(tval, zbsp)
tx_cov_grid <- zbsp_tval %*% tx_cov_zb %*% t(zbsp_tval)
tx_cov4_grid <- zbsp_tval %*% tx_cov4_zb %*% t(zbsp_tval)
dimnames(tx_cov_grid) <- list(tval, tval)
dimnames(tx_cov4_grid) <- list(tval, tval)
oct_slope_scatters_2 <- reshape2::melt(tx_cov_grid) |>
rename(t_1 = Var1, t_2 = Var2, Cov = value) |>
mutate(Cov_4 = reshape2::melt(tx_cov4_grid)$value) |>
pivot_longer(c(Cov, Cov_4), names_to = "scatter", values_to = "z")
ggplot(oct_slope_scatters_2) +
stat_contour_filled(aes(t_1, t_2, z = z)) +
facet_wrap(vars(scatter), nrow = 2) +
labs(x = "Temperature", y = "Temperature", fill = "Value")