将 class "perm.htest" 个对象从(多重排列 t 检验)转换为数据框
Transform a class "perm.htest" objects, from (multiple permutation t test) into a data frame
我有一些来自 perm.t.test
的结果,我想将其转换为数据框。我已经尝试了很多并进行了很多搜索,但我无法解决这个问题,我还是 R 的新手。
这是我的数据集的简化版本:
treat = c("C","C","C","C","C","C","C","C","C","C","C","C","C",
"C","C","C","C","C","C","C","T","T","T","T","T","T",
"T","T","T","T","T","T","T","T","T","T","T","T","T","T")
subj = c("B16","B17","B18","B19","B20","B16","B17","B18","B19",
"B20","B16","B17","B18","B19","B20","B16","B17","B18",
"B19","B20","B1","B2","B3","B4","B5","B1","B2","B3","B4"
,"B5","B1","B2","B3","B4","B5","B1","B2","B3","B4","B5")
t = c("T0","T0","T0","T0","T0","T1","T1","T1","T1","T1","T2",
"T2","T2","T2","T2","T3","T3","T3","T3","T3","T0","T0",
"T0","T0","T0","T1","T1","T1","T1","T1","T2","T2","T2",
"T2","T2","T3","T3","T3","T3","T3")
exparat = c(0.11,0.27,0.04,0.47,-0.11,-0.05,-0.05,0.33,-0.11,
0.47,-0.01,0.43,0.47,0.33,-0.11,-0.09,0.20,-0.11,
0.47,0.33,0.19,0.02,0.33,0.47,-0.11,0.42,0.13,0.47,
-0.11,0.33,0.42,0.19,-0.11,0.33,0.47,0.42,0.17,
0.33,0.47,-0.11)
data = data.frame(treat, subj, t, exparat)
data$treat <- factor(data$treat)
data$t <- factor(data$t,levels=unique(data$t))
head(data)
treat subj t exparat
1 C B16 T0 0.11
2 C B17 T0 0.27
3 C B18 T0 0.04
4 C B19 T0 0.47
5 C B20 T0 -0.11
6 C B16 T1 -0.05
I 运行 多个 MKinfer::perm.t.test
时间组合之间 (t) 独立于每个治疗 (treat),使用此功能(感谢 Ronak Shah):
library(MKinfer)
combn(levels(data$t), 2, function(x) {
perm.t.test(exparat~t,data = subset(data, t %in% x), R=999, paired = T)
}, simplify = FALSE) -> result
但是现在我有两个问题:
1- 我的结果是 class "perm.htest" 对象的列表,但我需要将其转换为数据框,其中每一行都是一个测试,每一列都是一个输出测试的(即统计,参数,p.value)。所以我可以轻松地检查我的结果,更正多重比较的 p 值并导出它们。
有人建议我使用:
map_df(result, broom::tidy) %>%
mutate(combination = combn(levels(data$t), 2, paste0, collapse = ' vs '), .before = 1)
问题是 MKinfer::perm.t.test 同时执行排列 t 检验和参数 t 检验。所以在结果中,既有p.value
又有perm.p.value
,有conf.int
也有perm.conf.int
。因此,如果我使用 broom::tidy
,它会将其识别为 htest
,我将只获得参数 t 检验的结果。
也许类似的东西会起作用:
dtlist <- combn(levels(data$t), 2, function(x) {
dt <- MKinfer::perm.t.test(respvar~t,data = subset(data, t %in% x), R=999, paired = T)
df <- data.frame(
perm.p = dt$perm.p.value,
stat = dt$statistic)
return(df)
})
但我需要一个数据框作为输出,然后我可以将其导出为 csv。
有人有解决办法吗?
提前致谢。
library(tidyverse)
tidy_result <- function(result) {
tibble(
estimate = result$estimate,
statistic = result$statistic,
conf.low = result$conf.int[1],
conf.high = result$conf.int[2],
perm.p.value = result$perm.p.value
)
}
combn(levels(data$t), 2, function(x) {
perm.t.test(exparat~t,data = subset(data, t %in% x), R=999, paired = T)
}, simplify = FALSE) -> result
map_dfr(result, tidy_result)
# # A tibble: 6 x 5
# estimate statistic conf.low conf.high perm.p.value
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 -0.015 -0.116 -0.307 0.277 0.918
# 2 -0.073 -0.764 -0.289 0.143 0.470
# 3 -0.04 -0.670 -0.175 0.0950 0.528
# 4 -0.058 -0.482 -0.330 0.214 0.593
# 5 -0.025 -0.220 -0.282 0.232 0.824
# 6 0.033 0.292 -0.222 0.288 0.748
你可以使用-
do.call(rbind, combn(levels(data$t), 2, function(x) {
dt <- MKinfer::perm.t.test(exparat~t,
data = subset(data, t %in% x), R=999, paired = T)
data.frame(perm.p = dt$perm.p.value,stat = dt$statistic)
}, simplify = FALSE)) -> result
result$combination <- combn(levels(data$t), 2, paste0, collapse = ' vs ')
我有一些来自 perm.t.test
的结果,我想将其转换为数据框。我已经尝试了很多并进行了很多搜索,但我无法解决这个问题,我还是 R 的新手。
这是我的数据集的简化版本:
treat = c("C","C","C","C","C","C","C","C","C","C","C","C","C",
"C","C","C","C","C","C","C","T","T","T","T","T","T",
"T","T","T","T","T","T","T","T","T","T","T","T","T","T")
subj = c("B16","B17","B18","B19","B20","B16","B17","B18","B19",
"B20","B16","B17","B18","B19","B20","B16","B17","B18",
"B19","B20","B1","B2","B3","B4","B5","B1","B2","B3","B4"
,"B5","B1","B2","B3","B4","B5","B1","B2","B3","B4","B5")
t = c("T0","T0","T0","T0","T0","T1","T1","T1","T1","T1","T2",
"T2","T2","T2","T2","T3","T3","T3","T3","T3","T0","T0",
"T0","T0","T0","T1","T1","T1","T1","T1","T2","T2","T2",
"T2","T2","T3","T3","T3","T3","T3")
exparat = c(0.11,0.27,0.04,0.47,-0.11,-0.05,-0.05,0.33,-0.11,
0.47,-0.01,0.43,0.47,0.33,-0.11,-0.09,0.20,-0.11,
0.47,0.33,0.19,0.02,0.33,0.47,-0.11,0.42,0.13,0.47,
-0.11,0.33,0.42,0.19,-0.11,0.33,0.47,0.42,0.17,
0.33,0.47,-0.11)
data = data.frame(treat, subj, t, exparat)
data$treat <- factor(data$treat)
data$t <- factor(data$t,levels=unique(data$t))
head(data)
treat subj t exparat
1 C B16 T0 0.11
2 C B17 T0 0.27
3 C B18 T0 0.04
4 C B19 T0 0.47
5 C B20 T0 -0.11
6 C B16 T1 -0.05
I 运行 多个 MKinfer::perm.t.test
时间组合之间 (t) 独立于每个治疗 (treat),使用此功能(感谢 Ronak Shah):
library(MKinfer)
combn(levels(data$t), 2, function(x) {
perm.t.test(exparat~t,data = subset(data, t %in% x), R=999, paired = T)
}, simplify = FALSE) -> result
但是现在我有两个问题:
1- 我的结果是 class "perm.htest" 对象的列表,但我需要将其转换为数据框,其中每一行都是一个测试,每一列都是一个输出测试的(即统计,参数,p.value)。所以我可以轻松地检查我的结果,更正多重比较的 p 值并导出它们。
有人建议我使用:
map_df(result, broom::tidy) %>%
mutate(combination = combn(levels(data$t), 2, paste0, collapse = ' vs '), .before = 1)
问题是 MKinfer::perm.t.test 同时执行排列 t 检验和参数 t 检验。所以在结果中,既有p.value
又有perm.p.value
,有conf.int
也有perm.conf.int
。因此,如果我使用 broom::tidy
,它会将其识别为 htest
,我将只获得参数 t 检验的结果。
也许类似的东西会起作用:
dtlist <- combn(levels(data$t), 2, function(x) {
dt <- MKinfer::perm.t.test(respvar~t,data = subset(data, t %in% x), R=999, paired = T)
df <- data.frame(
perm.p = dt$perm.p.value,
stat = dt$statistic)
return(df)
})
但我需要一个数据框作为输出,然后我可以将其导出为 csv。
有人有解决办法吗?
提前致谢。
library(tidyverse)
tidy_result <- function(result) {
tibble(
estimate = result$estimate,
statistic = result$statistic,
conf.low = result$conf.int[1],
conf.high = result$conf.int[2],
perm.p.value = result$perm.p.value
)
}
combn(levels(data$t), 2, function(x) {
perm.t.test(exparat~t,data = subset(data, t %in% x), R=999, paired = T)
}, simplify = FALSE) -> result
map_dfr(result, tidy_result)
# # A tibble: 6 x 5
# estimate statistic conf.low conf.high perm.p.value
# <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 -0.015 -0.116 -0.307 0.277 0.918
# 2 -0.073 -0.764 -0.289 0.143 0.470
# 3 -0.04 -0.670 -0.175 0.0950 0.528
# 4 -0.058 -0.482 -0.330 0.214 0.593
# 5 -0.025 -0.220 -0.282 0.232 0.824
# 6 0.033 0.292 -0.222 0.288 0.748
你可以使用-
do.call(rbind, combn(levels(data$t), 2, function(x) {
dt <- MKinfer::perm.t.test(exparat~t,
data = subset(data, t %in% x), R=999, paired = T)
data.frame(perm.p = dt$perm.p.value,stat = dt$statistic)
}, simplify = FALSE)) -> result
result$combination <- combn(levels(data$t), 2, paste0, collapse = ' vs ')