编程QQ情节

时间:2011-11-12 11:25:42

标签: r visualization

我有男女学生的数学考试成绩样本。我想为每个性别绘制QQ图,看看它们是否都是正态分布的。我知道如何绘制整个样本的QQ图,但我怎样才能单独绘制它们?

2 个答案:

答案 0 :(得分:5)

以下是使用base图形的简单解决方案:

scores <- rnorm(200, mean=12, sd=2)
gender <- gl(2, 50, labels=c("M","F"))
opar <- par(mfrow=c(1,2))
for (g in levels(gender))
  qqnorm(scores[gender==g], main=paste("Gender =", g))
par(opar)

更优雅的lattice解决方案:

qqmath(~ scores | gender, data=data.frame(scores, gender), type=c("p", "g"))

有关更多讨论和可能的自定义示例,请参阅qqmath的在线帮助。

答案 1 :(得分:0)

在Python中,您具有OpenTURNS库see doc here提供的QQplot方法。这是一个例子。

第一步,我们从均匀分布中生成大小为300的随机样本。

第二步,我们认为我们不知道该样本来自何处,并尝试拟合正态分布和均匀分布。

在第三步中,我们针对每个拟合分布绘制QQ图,以了解“哪一个是最好的”。

第一步:

import openturns as ot
from openturns.viewer import View
    
distribution = ot.Uniform(-1, 1)
sample = distribution.getSample(300)

第二步:

fitted_normal = ot.NormalFactory().build(sample)
fitted_uniform = ot.UniformFactory().build(sample)

第三步:

QQ_plot1 = ot.VisualTest.DrawQQplot(sample, fitted_normal)
QQ_plot2 = ot.VisualTest.DrawQQplot(sample,fitted_uniform)
    
View(QQ_plot1)
View(QQ_plot2)

正如预期的那样,拟合后的Uniform更适合于样本Normal,该样本在域的两端都有较大的误差。

enter image description here enter image description here