我正在尝试使用 R 重新创建以下图。Minitab 将其描述为正态概率图。
The probplot http://rss.acs.unt.edu/Rdoc/library/e1071/html/probplot.html帮助您顺利完成大部分任务。不幸的是,我无法弄清楚如何在该图周围添加置信区间带。
同样,ggplot 的stat_qq() http://had.co.nz/ggplot2/stat_qq.html似乎通过变换的 x 轴来呈现类似的信息。看起来geom_smooth()
将是添加乐队的可能候选人,但我还没有弄清楚。
最后,搞遗传学的人描述了类似的事情here. http://gettinggeneticsdone.blogspot.com/2009/11/qq-plots-of-p-values-in-r-using-ggplot2.html
重新创建上图的示例数据:
x <- c(40.2, 43.1, 45.5, 44.5, 39.5, 38.5, 40.2, 41.0, 41.6, 43.1, 44.9, 42.8)
如果有人有基本图形或 ggplot 的解决方案,我将不胜感激!
EDIT
查看详细信息后probplot
,我确定这就是它在图表上生成拟合线的方式:
> xl <- quantile(x, c(0.25, 0.75))
> yl <- qnorm(c(0.25, 0.75))
> slope <- diff(yl)/diff(xl)
> int <- yl[1] - slope * xl[1]
> slope
75%
0.4151
> int
75%
-17.36
事实上,将这些结果与从 probplot 对象中得到的结果进行比较似乎非常好:
> check <- probplot(x)
> str(check)
List of 3
$ qdist:function (p)
$ int : Named num -17.4
..- attr(*, "names")= chr "75%"
$ slope: Named num 0.415
..- attr(*, "names")= chr "75%"
- attr(*, "class")= chr "probplot"
>
然而,将此信息合并到 ggplot2 或基础图形中不会产生相同的结果。
probplot(x)
Versus:
ggplot(data = df, aes(x = x, y = y)) + geom_point() + geom_abline(intercept = int, slope = slope)
我使用 R 的基础图形得到了类似的结果
plot(df$x, df$y)
abline(int, slope, col = "red")
最后,我了解到图例的最后两行指的是 Anderson-Darling 正态性检验,并且可以用nortest
包裹。
> ad.test(x)
Anderson-Darling normality test
data: x
A = 0.2303, p-value = 0.7502