# JACKKNIFE AND BOOTSTRAP # Load necessary packages library(readr) library(dplyr) # Function to perform bootstrap analysis bootstrap_analysis <- function(data, num_samples = 10000, confidence_level = 0.95) { n <- length(data) means <- numeric(num_samples) for (i in 1:num_samples) { sample <- sample(data, size = n, replace = TRUE) means[i] <- mean(sample) } mean_val <- mean(means) bias <- mean_val - mean(data) std_error <- sd(means) ci_lower <- quantile(means, (1 - confidence_level) / 2) ci_upper <- quantile(means, (1 + confidence_level) / 2) list(mean = mean_val, bias = bias, std_error = std_error, ci_lower = ci_lower, ci_upper = ci_upper) } # Function to perform Jackknife analysis jackknife_analysis <- function(data) { n <- length(data) jackknife_means <- numeric(n) for (i in 1:n) { jackknife_sample <- data[-i] jackknife_means[i] <- mean(jackknife_sample) } jackknife_mean <- mean(jackknife_means) jackknife_bias <- (n - 1) * (jackknife_mean - mean(data)) jackknife_std_error <- sqrt((n - 1) * mean((jackknife_means - jackknife_mean)^2)) list(mean = jackknife_mean, bias = jackknife_bias, std_error = jackknife_std_error) } # Prompt user to select a CSV file (HF.csv <- available in the Supplementary Materials) cat("Please select the CSV file:\n") file_path <- file.choose() # Load the CSV file df <- read_csv(file_path) # List available headers in the file cat("Available headers in the CSV file:\n") headers <- colnames(df) for (i in seq_along(headers)) { cat(paste0(i - 1, ": ", headers[i], "\n")) } repeat { # Prompt user to select a header selected_header <- readline("\nEnter the number of the header you want to evaluate (or press 'X' to finish): ") if (tolower(selected_header) == 'x') { cat("Exiting the analysis.\n") break } header_index <- as.integer(selected_header) if (is.na(header_index) || header_index < 0 || header_index >= length(headers)) { cat("Invalid number. Please select a valid number from the list.\n") next } # Select the header and remove missing values selected_column <- headers[header_index + 1] data <- df[[selected_column]] %>% na.omit() if (length(data) == 0) { cat("The selected column contains no valid data after removing missing values. Please choose another column.\n") next } # Perform bootstrap analysis bootstrap_results <- bootstrap_analysis(data) # Perform Jackknife analysis jackknife_results <- jackknife_analysis(data) # Display Bootstrap results cat("\nBootstrap Analysis for '", selected_column, "':\n", sep = "") cat("Mean: ", round(bootstrap_results$mean, 2), "\n") cat("Bias: ", round(bootstrap_results$bias, 3), "\n") cat("Standard Error: ", round(bootstrap_results$std_error, 3), "\n") cat("95% Confidence Interval: (", round(bootstrap_results$ci_lower, 2), ", ", round(bootstrap_results$ci_upper, 2), ")\n\n", sep = "") # Display Jackknife results cat("Jackknife Analysis for '", selected_column, "':\n", sep = "") cat("Jackknife Mean: ", round(jackknife_results$mean, 2), "\n") cat("Jackknife Bias: ", round(jackknife_results$bias, 3), "\n") cat("Jackknife Standard Error: ", round(jackknife_results$std_error, 3), "\n\n", sep = "") }