Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
warning = FALSE,
collapse = TRUE,
comment = "#>"
)
## ----include = TRUE-----------------------------------------------------------
adaptive_distance <- function(x) {
if(!is.matrix(x)) x <- as.matrix(x)
# Ensure no NA values
if(any(is.na(x))) {
x[is.na(x)] <- mean(x, na.rm = TRUE)
}
# Select distance metric based on data distribution
if(sd(x, na.rm = TRUE) > 100) {
x_scaled <- scale(x)
d <- as.matrix(dist(x_scaled, method = "euclidean"))
} else {
d <- as.matrix(dist(x, method = "manhattan"))
}
# Ensure distance matrix is symmetric with zero diagonal
d[is.na(d)] <- 0
d <- (d + t(d))/2
diag(d) <- 0
return(d)
}
## ----include = TRUE-----------------------------------------------------------
denoised_state_space <- function(x, E, tau) {
# Use median filtering for denoising
n <- length(x)
x_smooth <- x
window <- 3
for(i in (window+1):(n-window)) {
x_smooth[i] <- median(x[(i-window):(i+window)])
}
# Construct state space
n_out <- length(x_smooth) - (E-1)*tau
mat <- matrix(NA, nrow = n_out, ncol = E)
for(i in 1:E) {
mat[,i] <- x_smooth[1:n_out + (i-1)*tau]
}
# Ensure no NA values
if(any(is.na(mat))) {
mat[is.na(mat)] <- mean(mat, na.rm = TRUE)
}
list(matrix = mat)
}
## -----------------------------------------------------------------------------
library(patterncausality)
data(climate_indices)
# Example 1: Using only adaptive distance metric
result1 <- pcLightweight(
X = climate_indices$AO[1:200],
Y = climate_indices$AAO[1:200],
E = 3,
tau = 2,
metric = "euclidean",
distance_fn = adaptive_distance,
h = 1,
weighted = TRUE
)
print("Result with adaptive distance:")
print(result1)
# Example 2: Using only improved state space
result2 <- pcLightweight(
X = climate_indices$AO[1:200],
Y = climate_indices$AAO[1:200],
E = 3,
tau = 2,
metric = "euclidean",
state_space_fn = denoised_state_space,
h = 1,
weighted = TRUE
)
print("\nResult with denoised state space:")
print(result2)
## -----------------------------------------------------------------------------
# Compare results
compare_results <- data.frame(
Method = c("Adaptive Distance", "Denoised Space"),
Total = c(result1$total, result2$total),
Positive = c(result1$positive, result2$positive),
Negative = c(result1$negative, result2$negative),
Dark = c(result1$dark, result2$dark)
)
print("\nComparison of different approaches:")
print(compare_results)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.