dmt*_*dmt 2 r presentation p-value
我在我的数据上运行了一个 posthoc Tukey HSD,它有十个因子水平。表格很大,我希望只在成对表格中向读者展示 p 值,将 45 行表格留给附录。
这是一个示例数据集:
set.seed(42)
x <- rnorm(100,1,2)
category <- letters[1:10]
data <- cbind.data.frame(x, category)
summary(data.aov <- aov(x~category, data = data))
data.hsd<-TukeyHSD(data.aov)
data.hsd.result<-data.frame(data.hsd$category)
data.hsd.result
Run Code Online (Sandbox Code Playgroud)
结果是一个 45 行的表。相反,我想要一个表,其中因子水平作为行和列名称,在单元格中具有 p 值,显示两者是否显着不同。Xs 或下划线或任何可能代表重复或不必要的比较。像这样的东西:
a b c d e f ... j
a X 0.97 1 0.99 0.89 0.99 ... 0.99
b X X 0.99 0.89 0.94 0.92 ... 0.97
c X X X 0.85 0.93 0.96 ... 0.98
| ... ... ... ... ... ... ... ...
i X X X X X X ... 0.84
Run Code Online (Sandbox Code Playgroud)
等等。
有没有办法自动生成这样的表格?
您需要上三角矩阵形式的 p 值。这对 R 来说有点不自然,因为它按列填充矩阵,但很容易修复。首先检查您是否收到正确的订单:
> resm <- matrix(NA, 10, 10)
> resm[lower.tri(resm) ] <- rownames(data.hsd.result)
> resm
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] NA NA NA NA NA NA NA NA NA NA
[2,] "b-a" NA NA NA NA NA NA NA NA NA
[3,] "c-a" "c-b" NA NA NA NA NA NA NA NA
[4,] "d-a" "d-b" "d-c" NA NA NA NA NA NA NA
[5,] "e-a" "e-b" "e-c" "e-d" NA NA NA NA NA NA
[6,] "f-a" "f-b" "f-c" "f-d" "f-e" NA NA NA NA NA
[7,] "g-a" "g-b" "g-c" "g-d" "g-e" "g-f" NA NA NA NA
[8,] "h-a" "h-b" "h-c" "h-d" "h-e" "h-f" "h-g" NA NA NA
[9,] "i-a" "i-b" "i-c" "i-d" "i-e" "i-f" "i-g" "i-h" NA NA
[10,] "j-a" "j-b" "j-c" "j-d" "j-e" "j-f" "j-g" "j-h" "j-i" NA
> t(resm)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] NA "b-a" "c-a" "d-a" "e-a" "f-a" "g-a" "h-a" "i-a" "j-a"
[2,] NA NA "c-b" "d-b" "e-b" "f-b" "g-b" "h-b" "i-b" "j-b"
[3,] NA NA NA "d-c" "e-c" "f-c" "g-c" "h-c" "i-c" "j-c"
[4,] NA NA NA NA "e-d" "f-d" "g-d" "h-d" "i-d" "j-d"
[5,] NA NA NA NA NA "f-e" "g-e" "h-e" "i-e" "j-e"
[6,] NA NA NA NA NA NA "g-f" "h-f" "i-f" "j-f"
[7,] NA NA NA NA NA NA NA "h-g" "i-g" "j-g"
[8,] NA NA NA NA NA NA NA NA "i-h" "j-h"
[9,] NA NA NA NA NA NA NA NA NA "j-i"
[10,] NA NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
所以它只是:
resm <- matrix(NA, 10, 10)
resm[lower.tri(resm) ] <-round(data.hsd.result$p.adj, 3)
t(resm)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] NA 0.974 1.00 1 0.885 0.997 0.985 0.673 0.559 1.000
[2,] NA NA 0.99 1 1.000 1.000 1.000 0.999 0.997 0.999
[3,] NA NA NA 1 0.938 0.999 0.995 0.772 0.666 1.000
[4,] NA NA NA NA 0.990 1.000 1.000 0.921 0.856 1.000
[5,] NA NA NA NA NA 1.000 1.000 1.000 1.000 0.988
[6,] NA NA NA NA NA NA 1.000 0.991 0.974 1.000
[7,] NA NA NA NA NA NA NA 0.998 0.993 1.000
[8,] NA NA NA NA NA NA NA NA 1.000 0.914
[9,] NA NA NA NA NA NA NA NA NA 0.846
[10,] NA NA NA NA NA NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
使用函数将行和列名称添加到矩阵是相当简单的:rownames<-和colnames<-。有关工作示例,请参阅他们的共享帮助页面。