如何将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))
答案 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)))