You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:37:25