r - 将样本的 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")
推荐阅读
- python - 在主线程中执行一个while循环,直到我们从辅助线程中调用的函数获得返回值
- drupal-9 - Drupal 站点问题
- itfoxtec-identity-saml2 - 支持范围和 IDPList
- docker-compose - docker-compose:根据环境变量启动容器 A 或 B
- java - java set如何判断类似的ListNode
- json - 使用 Powershell 从 JSON 文件中提取字段到 CSV
- firebase - firebase deploy --only 函数是否会刷新函数外部的包?
- asp.net - 动态 og 元内容 asp.net webforms 母版和内容页
- spring-boot - 多对多单向关系JPA中的孩子获取父母
- java - 为什么 String 不受浅拷贝的影响?