You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加权Kruskal-Wallis测试报错:IndependenceProblem类对象无效

问题:加权Kruskal-Wallis测试报错IndependenceProblem无效

你遇到的错误信息:

Error in kruskal_test: Error in validObject(.Object): invalid class “IndependenceProblem” object: FALSE

错误原因

  • 未取消行分组状态:生成pt_tot后,数据集仍保留rowwise分组,导致后续pivot_longer和nest处理后的数据结构不符合coin::kruskal_test的内部要求,无法正常创建IndependenceProblem对象。
  • 不必要的权重归一化:coin包的kruskal_test接受任意正实数作为观测权重,无需强制归一化到和为1,归一化后的小数权重可能触发内部校验逻辑异常。

解决方法

1. 取消行分组

在生成pt_tot后添加ungroup(),将数据集恢复为普通数据框状态:

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)) |>
  ungroup() # 新增:取消行分组

2. 移除权重归一化操作

修改测试函数,去掉不必要的权重归一化步骤:

kruskal_per_gruppo <- function(data) {
  test_result <- tryCatch({
    # 移除权重归一化代码
    kruskal_test(pt_tot ~ value, data = data, weights = ~ weight)
  }, error = function(e) {
    message("Error in kruskal_test: ", e)
    return(NULL)
  })
  return(test_result)
}

3. 明确转换分组变量为因子(可选)

确保分组变量value是因子类型,避免隐式类型转换问题:

results <- punteggi |> 
  pivot_longer(c(Regione, Genere, Area)) |> 
  group_by(name) |> 
  mutate(
    value = as.factor(value), # 明确转换为因子
    kruskal = kruskal.test(pt_tot ~ value)$p.value
  ) |> 
  nest() |> 
  mutate(kruskal_weighted = map(data, kruskal_per_gruppo))

修改后,kruskal_test即可正常创建IndependenceProblem对象并执行加权Kruskal-Wallis检验。

内容的提问来源于stack exchange,提问作者Erik De Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:44:51