我有男女学生的数学考试成绩样本。我想为每个性别绘制QQ图,看看它们是否都是正态分布的。我知道如何绘制整个样本的QQ图,但我怎样才能单独绘制它们?
答案 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,该样本在域的两端都有较大的误差。