实际上只有cbind(<res>, p.adj=p.adjust(<res>$p, method='BH'))
美元.
首先,在不使用corrlot包的情况下,使用相关性p值解决方案.
pm <- outer(mtcars, mtcars, Vectorize(\(x, y) cor.test(x, y)$p.value))
res <- as.data.frame(as.table(pm)) |> setNames(c("Var1", "Var2", "p"))
现在,cbind
个;P值;我使用本杰米尼-霍奇伯格(又名false discovery rate(FDR)方法)."bonferroni"
方法也很常见;有关选项,请参阅?p.adjust
.
res <- cbind(res, p.adj=p.adjust(res$p, method='BH')) ## here you could use any `res`, e.g. your `pval` object and `pval&Freq`
head(res)
# Var1 Var2 p p.adj
# 1 mpg mpg 0.000000e+00 0.000000e+00
# 2 cyl mpg 6.112687e-10 3.892817e-09
# 3 disp mpg 9.380327e-10 5.404855e-09
# 4 hp mpg 1.787835e-07 6.555396e-07
# 5 drat mpg 1.776240e-05 3.770615e-05
# 6 wt mpg 1.293959e-10 9.209941e-10
如果您喜欢管道,您可以执行以下操作:
res <- outer(mtcars, mtcars, Vectorize(\(x, y) cor.test(x, y)$p.value)) |>
as.table() |> as.data.frame() |> setNames(c("Var1", "Var2", "p")) |>
{\(.) cbind(., p.adj=p.adjust(.$p, method='BH'))}()
head(res)
# Var1 Var2 p p.adj
# 1 mpg mpg 0.000000e+00 0.000000e+00
# 2 cyl mpg 6.112687e-10 3.892817e-09
# 3 disp mpg 9.380327e-10 5.404855e-09
# 4 hp mpg 1.787835e-07 6.555396e-07
# 5 drat mpg 1.776240e-05 3.770615e-05
# 6 wt mpg 1.293959e-10 9.209941e-10