如何计算QQP分位数对比图中95%置信区间外的点数?
如何统计QQP图95%置信区间外的点数
当然可行!car包中的qqp函数其实会返回绘图背后的所有关键数据,我们可以利用这些数据轻松找出并统计95%置信区间(CI)外的点。下面一步步来实现:
步骤1:准备数据与拟合分布
先运行你提供的模拟和拟合代码:
require(MASS) require(car) # 模拟60个泊松分布值 Resp <- rpois(60, 1) # 拟合负二项分布 nbinom <- fitdistr(Resp, "Negative Binomial")
步骤2:捕获QQP图的返回数据
调用qqp时,把返回结果赋值给一个变量——这个变量包含了观测分位数、理论分位数以及置信区间的上下限:
# 绘制QQP图并保存返回数据 qqp_result <- qqp(Resp, "nbinom", size = nbinom$estimate[[1]], mu = nbinom$estimate[[2]])
你可以用str(qqp_result)查看这个返回对象的结构,核心元素包括:
y:观测分位数(对应原始数据的排序后值)lower:95%置信区间的下限upper:95%置信区间的上限
步骤3:找出并统计CI外的点
通过简单的逻辑比较,就能定位超出置信区间的点:
# 找出超出CI的点的索引 outliers_index <- which(qqp_result$y < qqp_result$lower | qqp_result$y > qqp_result$upper) # 提取这些点的原始数值 outliers_values <- Resp[outliers_index] # 统计超出CI的点的数量 outliers_count <- length(outliers_index)
封装成可复用函数
如果需要多次使用,可以把上述逻辑封装成一个函数,方便调用:
count_qqp_outliers <- function(data, dist_name, ...) { # 生成QQP图并获取数据 qqp_res <- qqp(data, dist_name, ...) # 筛选超出95%CI的点 out_idx <- which(qqp_res$y < qqp_res$lower | qqp_res$y > qqp_res$upper) # 返回结果列表 list( outliers_index = out_idx, outliers_values = data[out_idx], outliers_count = length(out_idx) ) }
测试函数
用你之前的模拟数据测试这个函数:
result <- count_qqp_outliers(Resp, "nbinom", size = nbinom$estimate[[1]], mu = nbinom$estimate[[2]]) # 查看超出CI的点数量 cat("置信区间外的点数:", result$outliers_count, "\n") # 查看这些点的具体数值 cat("置信区间外的点数值:", result$outliers_values, "\n")
注意事项
- 不同分布的
qqp调用参数会有差异,比如正态分布只需要mean和sd,负二项需要size和mu,调用函数时要根据分布传入正确的参数 - 如果你使用的
car包版本较旧,qqp的返回结构可能略有不同,建议先用str(qqp_result)确认元素名称后再提取
内容的提问来源于stack exchange,提问作者Leprechault




