我正在尝试使用自定义函数为弗里德曼测试创建自定义函数
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
我应该调整什么?我不知道这个块是什么。 谢谢
在这个修改后的函数中,我考虑到您将提供一个名为
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)
}