如何创建 Friedman 测试函数的自定义版本,返回与 rstatix 包的 anova_test 相同的输出

问题描述 投票:0回答:1

我正在尝试使用自定义函数为弗里德曼测试创建自定义函数

my_friedman_test <- function(data, dv, wid, between, within, effect.size = "ges") {

  result <- friedman.test(data[[dv]], data[[wid]], data[[within]])
  

  df <- data.frame(
    .y. = dv,
    n = length(result$method),
    statistic = result$statistic,
    p = result$p.value,
    method = "Friedman test"
  )

  if (effect.size %in% c("ges", "pes")) {
    df$effect_size <- rstatix::get_effect_size(result, type = effect.size)
  }
  
  return(df)
}

my_data = get('ToothGrowth')

my_result <- my_friedman_test(data = my_data, dv = "len", wid = "dose", within = 'supp')
print(my_result)

但是,这让我又出现了以下错误。

Error in friedman.test.default(data[[dv]], data[[wid]]) :
argument "blocks" is missing, with no default

我应该调整什么?我不知道这个块是什么。 谢谢

r function customization rstatix
1个回答
0
投票

弗里德曼测试的定制版本

在这个修改后的函数中,我考虑到您将提供一个名为

blocks
的附加参数,它将作为对您的观察结果进行分组的因素。为了为
friedman.test
函数准备数据,我使用
reshape2::melt
函数将数据转换为更适合分析的格式。确保您已安装
reshape2
软件包并将其加载到
R
会话中。

调整功能:

my_friedman_test <- function(data, dv, wid, blocks, within, effect.size = "ges") {
  data_long <- reshape2::melt(data, id.vars = c(wid, blocks), measure.vars = dv)

  result <- friedman.test(value ~ variable | blocks, data = data_long)
  
  df <- data.frame(
    .y. = dv,
    n = length(result$method),
    statistic = result$statistic,
    p = result$p.value,
    method = "Friedman test"
  )

  if (effect.size %in% c("ges", "pes")) {
    df$effect_size <- rstatix::get_effect_size(result, type = effect.size)
  }
  
  return(df)
}
© www.soinside.com 2019 - 2024. All rights reserved.