将样本的 qqplot 与 R 中的参考概率分布进行比较



>我有一个天气数据集,我找到了两列温度和湿度的简单线性模型,并绘制了其残差的直方图并计算了平均值和标准。

model <- lm(Temperature..C. ~ Humidity, data = inputData)
model.res = resid(model) 
hist(model.res) 
mean(model.res)
sd(model.res)

我应该绘制残差的 QQ 图与具有估计标准 的零均值正态分布。我使用 Kolmogorov-Smirnov 将样本与参考概率分布进行比较,但我不知道如何将其绘制在一起:

ks<-ks.test(model.res, "pnorm", mean=0, sd=sd(model.res)) 
qqnorm(model.res, main="qqnorm") 
qqline(model.res)

数据示例:

Temperature..C. Humidity
1          9.472222     0.89
2          9.355556     0.86
3          9.377778     0.89
4          8.288889     0.83
5          8.755556     0.83
6          9.222222     0.85
7          7.733333     0.95
8          8.772222     0.89
9         10.822222     0.82
10        13.772222     0.72
11        16.016667     0.67
12        17.144444     0.54
13        17.800000     0.55
14        17.333333     0.51
15        18.877778     0.47
16        18.911111     0.46
17        15.388889     0.60
18        15.550000     0.63
19        14.255556     0.69
20        13.144444     0.70

这是一个使用ggplot2的解决方案

ggplot(model, aes(sample = rstandard(model))) + 
geom_qq() + 
stat_qq_line(dparams=list(sd=sd(model.res)), color="red") +
stat_qq_line()

红线表示带有示例 sd 的 qqline,黑线表示 sd 为 1。

您没有要求这样做,但您也可以添加一个平滑的 qqplot:

data_model <- model
data_model$theo <- unlist(qqnorm(data_model$residuals)[1])
ggplot(data_model, aes(sample = rstandard(data_model))) + 
geom_qq() + 
stat_qq_line(dparams=list(sd=sd(model.res)), color="red") +
geom_smooth(aes(x=data_model$theo, y=data_model$residuals), method = "loess")

最新更新