0

所以我正在寻求创造这样的东西:

示例输出

使用我自己的数据,特别是使用我在这里找到的 p 值:

KS 检验 p 值

现在,我能够用不正确的方法制作类似的东西。具体来说,我能够使用 T 检验产生类似的东西: T 检验 p 值

我通过编写以下代码产生了这个:

l<- ggplot(VioPos, aes(x=Regulation, y=Score,fill=Regulation)) +
  geom_violin(trim=FALSE)+
  labs(title="Plot of ARE Scores by Regulation",x="Gene Regulation", y = "ARE Score")+
  geom_boxplot(width=0.1,fill="white")+
  theme_classic()
l

dp <- l +  scale_y_continuous(trans="log2")
dp



dp7 <- dp +
  stat_compare_means(comparisons=my_comparisons, method="t.test")
dp7

换句话说,我使用 stat_compare_means() 使用 ggplot2/tidyverse/ggpubr/rstatix。

但是,如果我修改代码中的方法,它似乎可以正确显示 Wilcoxon 和 T 检验,但不能正确显示 anova 和 kruskal wallis 检验。此外,似乎 stat_compare_means() 仅支持这四个而不支持 KS,但我特别感兴趣的是从我的 KS 测试输出中将平均值比较绘制到我的小提琴图上。还有其他我可以使用的包吗?

另请注意:对于 KS 测试,“UpScorePos”“DownScorePos”等是按规则比较 ARE 分数(就像我对 T 测试中的图表所做的那样)。

4

1 回答 1

0

您可以像这样从 KS 测试中获取 p 值:

x <- rnorm(100)
y <- rnorm(100)
res <- ks.test(x, y)
res$p.value
[1] 0.9670685

只需使用此 p 值并将其添加到您的绘图中即可。

编辑:一个有点 hacky 的解决方案是使用运行 t-test 并获得正确的数据结构,该结构可用于stat_pvalalue_manual并插入来自ks.test. 请参见下面的示例(我以 ToothGrowth 数据为例)。

# Transform `dose` into factor variable
df <- ToothGrowth
df$dose <- as.factor(df$dose)

stat.test <- df %>%
  t_test(len ~ dose)
stat.test

# prepare test tibble for ks.test
stat.test <- df %>%
  t_test(len ~ dose)
stat.test <- stat.test %>% add_y_position()
stat.test

kst <- stat.test # copy tibble to overwrite p-values for ks.test

p1 <- ks.test(x = ToothGrowth$len[ToothGrowth$dose == 0.5],
              y = ToothGrowth$len[ToothGrowth$dose == 1]
)$p
p2 <- ks.test(x = ToothGrowth$len[ToothGrowth$dose == 0.5],
              y = ToothGrowth$len[ToothGrowth$dose == 2]
)$p
p3 <- ks.test(x = ToothGrowth$len[ToothGrowth$dose == 1],
              y = ToothGrowth$len[ToothGrowth$dose == 2]
)$p

kst[, 'p'] <- as.numeric(c(p1, p2, p3))

ggplot(df, aes(x = dose, y = len)) +
  geom_violin(trim = F) +
  stat_pvalue_manual(kst, label = "p = {p}")

违反 ks 检验 p 值的图

于 2021-03-02T23:10:44.040 回答