I am trying to perform a weighted Kruskal-Wallis test for each group in a dataset, but I keep encountering the following error:
Error in kruskal_test: Error in validObject(.Object): invalid class “IndependenceProblem” object: FALSE
Here is the code I am using:
# Load necessary libraries
library(tidyverse)
library(coin)
# Set seed for reproducibility
set.seed(1)
# Create the dataset
punteggi <- tibble(
Codice = paste0("cod_", 1:200),
Regione = sample(c("FVG", "Lazio", "Sicilia"), size = 200, replace = TRUE, prob = c(.4, .2, .4)),
Genere = sample(c("Femminile", "Maschile"), size = 200, replace = TRUE, prob = c(.6, .4)),
Area = sample(c("Urban", "Suburban"), size = 200, replace = TRUE, prob = c(.6, .4))
)
punteggi <- punteggi |>
group_by(Regione, Genere, Area) |>
mutate(
mu = runif(1, 4, 7),
sd = runif(1, 1, 2),
weight = 1/n()
) |>
ungroup() |>
rowwise() |>
mutate(pt_tot = rnorm(1, mu, sd))
print(punteggi)
# Function to perform the weighted Kruskal-Wallis test for each group
kruskal_per_gruppo <- function(data) {
test_result <- tryCatch({
data <- data |> mutate(across(weight, ~./sum(.)))
kruskal_test(pt_tot ~ value, data = data, weights = ~ weight)
}, error = function(e) {
message("Error in kruskal_test: ", e)
return(NULL)
})
return(test_result)
}
# Apply the Kruskal-Wallis test for each group
results <- punteggi |>
pivot_longer(c(Regione, Genere, Area)) |>
group_by(name) |>
mutate(
across(value, as.factor),
kruskal = kruskal.test(pt_tot ~ value)$p.value
) |>
nest() |>
mutate(kruskal_weighted = map(data, kruskal_per_gruppo))
print(results)
What might be causing this error and how can I resolve it? I have checked that the weights are correctly normalized, but it seems there is an issue with creating the IndependenceProblem object. Any suggestions would be greatly appreciated!