如何将shapiro测试p值添加到R中的密度图中

时间:2017-06-08 15:18:22

标签: r ggplot2

如何将Shapiro测试的p值(检查正态性)添加到密度图中?我尝试使用geom_text(aes(y = 1, label = p.value), data = shapiro.test, size = 1),但我收到了错误。

 formula <- as.formula(paste0("cbind(", paste(names(mtcars)[-c(4,9)], collapse = ","), ") ~ hp*am"))
    fit <- aov(formula, data=mtcars)
    res.data.plot <-data.frame(melt(resid(fit)))
    res.data.test <-data.frame(resid(fit))
#plot       
        res.plot <- ggplot(res.data.plot, aes(x=value)) + 
                    geom_histogram(aes(y=..density..), binwidth=.5,colour="black", fill="white")+      
                    geom_density(alpha=.2, fill="#FF6666")+ facet_wrap( ~X2, scales="free")

# shapiro test
        kk<-Map(function(x)cbind(shapiro.test(x)$statistic,shapiro.test(x)$p.value),res.data.test)
        shapiro.test <-ldply(kk)
        names(shapiro.test)<-c("var","W","p.value")
        shapiro.test<- plyr::arrange(shapiro.test, var, desc(p.value))

1 个答案:

答案 0 :(得分:2)

shapiro.test对象中的数据与res.data.plot的长度不同,geom_text的长度必须与预期的一致。

您可以合并两个对象,因此绘图变得简单。

res.data.plot.new <- merge(res.data.plot, shapiro.test, by.x = "Var2", by.y = "var")

ggplot(res.data.plot.new, aes(x=value)) + 
  geom_histogram(aes(y=..density..), binwidth=.5, colour="black", fill="white") +      
  geom_density(alpha=.2, fill="#FF6666") + 
  facet_wrap( ~Var2, scales="free") +
  geom_text(aes(x = 1, y = 1, label = round(p.value, 4)))