负实数数据集GPD分析中extRemes包decluster函数结果不符问题
解决extRemes::decluster处理负数极值的问题
你的核心问题是decluster默认逻辑和你的极值定义不匹配:decluster默认针对极大值分析(找数值大于阈值的点),若之前得到相反结果,大概率是对阈值方向的理解偏差或隐含了极小值类型参数。以下是两种直接解决方法:
方法1:明确指定极大值类型
直接显式设置type="max"(虽为默认值,但能避免混淆),让函数筛选出大于阈值的点(也就是你需要的靠近0的负数):
library(extRemes) # 示例数据 data <- c(-5, -7, -9, -10, -11) u <- -8 # 阈值 # 去簇处理,明确指定极大值类型 declustered_data <- decluster(data, threshold = u, method = "intervals", type = "max") as.numeric(declustered_data) # 输出:-5 -7
方法2:数据反转后处理(适合习惯正数极值分析的场景)
把负数数据集取反转为正数,此时你要的靠近0的负数会变成靠近0的正数,再用极小值类型筛选,最后反转回负数:
data_inv <- -data # 反转数据:5,7,9,10,11 u_inv <- -u # 反转阈值:8 # 筛选反转后小于阈值的点(对应原数据大于-8的点) declustered_inv <- decluster(data_inv, threshold = u_inv, method = "intervals", type = "min") declustered_data <- -as.numeric(declustered_inv) # 反转回负数:-5 -7
后续GPD拟合
得到去簇后的极值点后,可直接用fevd拟合GPD模型:
gpd_model <- fevd(declustered_data, type = "GP", threshold = u) summary(gpd_model)
内容的提问来源于stack exchange,提问作者Norbert Wesolowski
相关产品推荐
相关产品推荐

