如何在R语言中不依赖qqplot绘制Q-Q图验证Gamma分布拟合?
我来帮你搞定这个Gamma分布拟合验证的任务,完全手动实现Q-Q图(不用内置的qqplot函数),同时完成模拟数据的Q-Q图绘制来判断拟合优度。下面是完整的步骤和代码:
步骤1:准备数据与拟合Gamma分布参数
首先我们需要先拟合观测数据的Gamma分布参数(形状参数k和速率参数lambda),这里用MASS包的fitdistr函数来实现:
# 加载拟合参数所需的包 library(MASS) # 替换为你自己的150个观测数据,这里先模拟一组示例数据 set.seed(123) # 固定随机种子保证结果可复现 observed_data <- rgamma(150, shape = 2, rate = 0.5) # 拟合Gamma分布的形状k和速率lambda参数 fit_result <- fitdistr(observed_data, "gamma", start = list(shape = 1, rate = 1)) k <- fit_result$estimate["shape"] lambda <- fit_result$estimate["rate"]
步骤2:手动绘制观测数据的Gamma Q-Q图
我们用(1:n)/(n+1)来计算经验分位数对应的概率点(避免取0或1的极端值),然后生成Gamma分布的理论分位数,再和排序后的观测数据绘图:
n <- length(observed_data) # 计算经验分位数对应的概率点 pp <- (1:n)/(n + 1) # 生成Gamma分布的理论分位数 theoretical_qq <- qgamma(pp, shape = k, rate = lambda) # 对观测数据排序得到经验分位数 sorted_observed <- sort(observed_data)
步骤3:设置布局并绘制所有Q-Q图
按照你给出的布局(2行2列,第一个图占满第一行),我们先绘制观测数据的Q-Q图,再生成3组模拟数据并绘制对应的Q-Q图:
# 设置绘图布局:2行2列,第一个图占第一行两列,后两个占第二行各一列 layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE)) # 1. 观测数据的Gamma Q-Q图 plot(sorted_observed ~ theoretical_qq, main = "Q-Q Plot: Observed Data vs Gamma Distribution", xlab = "Theoretical Gamma Quantiles", ylab = "Sorted Observed Data", pch = 16, col = "#2c3e50") # 添加参考线(通过线性回归拟合的直线,用于判断拟合程度) abline(lm(sorted_observed ~ theoretical_qq), col = "#e74c3c", lwd = 2) # 生成3组符合拟合参数的模拟数据 set.seed(456) sim_data1 <- rgamma(n, shape = k, rate = lambda) sim_data2 <- rgamma(n, shape = k, rate = lambda) sim_data3 <- rgamma(n, shape = k, rate = lambda) # 2. 第一组模拟数据的Q-Q图 sorted_sim1 <- sort(sim_data1) plot(sorted_sim1 ~ theoretical_qq, main = "Q-Q Plot: Simulated Data 1 vs Gamma", xlab = "Theoretical Gamma Quantiles", ylab = "Sorted Simulated Data", pch = 16, col = "#3498db") abline(lm(sorted_sim1 ~ theoretical_qq), col = "#e74c3c", lwd = 2) # 3. 第二组模拟数据的Q-Q图 sorted_sim2 <- sort(sim_data2) plot(sorted_sim2 ~ theoretical_qq, main = "Q-Q Plot: Simulated Data 2 vs Gamma", xlab = "Theoretical Gamma Quantiles", ylab = "Sorted Simulated Data", pch = 16, col = "#2ecc71") abline(lm(sorted_sim2 ~ theoretical_qq), col = "#e74c3c", lwd = 2)
拟合优度判断方法
- 对于观测数据的Q-Q图:如果点紧密贴合红色参考线,说明Gamma分布是适合该数据的模型;如果点明显偏离直线,则说明Gamma分布拟合效果不佳。
- 对比模拟数据的Q-Q图:如果观测数据的Q-Q图和模拟数据的图模式高度相似,说明拟合效果良好;如果观测数据的偏离程度远大于模拟数据,则Gamma可能不是最优模型。
内容的提问来源于stack exchange,提问作者Catherine
相关产品推荐
相关产品推荐

