首页 > 解决方案 > 流动持续时间曲线 (fdc) 提取低阈值

问题描述

我是一个使用流量持续时间曲线和函数的新手fdc。我正在使用 300 多个系列,我有兴趣保存Qlow.thr生成的图中出现的低四分位阈值:

在此处输入图像描述

这是可重现的示例:

dat <- c(13.05, 90.29,  5.68, 49.13, 26.39, 15.06, 23.39, 17.98,  4.21,  2.51, 38.29,  8.57,  2.48 , 3.78, 18.09 ,15.16, 13.46,  8.69, 6.85, 11.97, 12.10,  9.87 ,21.89,  2.60  ,2.40, 27.40,  4.94, 83.17 ,12.10,  5.08 ,12.42,  6.19  ,3.60 ,32.58, 53.69, 38.49,3.61, 14.84, 34.48,  1.91, 21.79, 31.53,  6.70,  9.52, 22.64,  1.80 , 8.13, 10.60, 12.73,  4.17,  6.70 ,16.45)

fdc(dat,plot = T,lQ.thr=0.8,ylab='Hm3',main='Upstream monthly duration curve',thr.shw=TRUE)

fdc 函数返回一个概率向量,但我不确定如何将这些概率转换为原始单位并选择以 Hm3 表示的 80% 百分位值pnorm,例如在使用正常概率的情况下。

非常感谢。

标签: r

解决方案


您可以自己构建 FDC

dat <- c(13.05, 90.29,  5.68, 49.13, 26.39, 15.06, 23.39, 17.98,  
         4.21,  2.51, 38.29,  8.57,  2.48 , 3.78, 18.09 ,15.16,
         13.46,  8.69, 6.85, 11.97, 12.10,  9.87 ,21.89,  2.60,
         2.40, 27.40,  4.94, 83.17 ,12.10,  5.08 ,12.42,  6.19,
         3.60 ,32.58, 53.69, 38.49,3.61, 14.84, 34.48,  1.91, 
         21.79, 31.53,  6.70,  9.52, 22.64,  1.80 , 8.13, 10.60, 
         12.73,  4.17,  6.70 ,16.45)

dat <- sort(dat, decreasing = T)
df  <- data.frame(x = 100/length(dat) * 1:length(dat), y = dat)

plot(x = df$x, y = df$y, type = "l", log = "y")

使用 <code>fdc</code> 创建的绘图与使用 <code>plot</code> 创建的绘图

因此,排序后的流量数据只是简单地绘制在超出百分比范围内。这个比例是通过将 100% 除以数据点的数量来创建的,这为我们提供了每个点的增量。所以

quantile(dat, p = c(0.2, 0.8), type = 1)

给你你想要的结果。

请注意,分位数的计算在 中有所不同fdc。好像他们只是使用

p <- c(0.8, 0.2)
dat[round(p * length(dat))]

> [1]  4.21 27.40

计算值。


推荐阅读