r - 流动持续时间曲线 (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
,例如在使用正常概率的情况下。
非常感谢。
解决方案
您可以自己构建 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")
因此,排序后的流量数据只是简单地绘制在超出百分比范围内。这个比例是通过将 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
计算值。
推荐阅读
- javascript - 允许用户选择文件夹
- javascript - 如何获取更新的 DOM 元素 javascript
- coldfusion - CF_WKHTMLTOPDF 将页面大小设置为信封
- scala - 使用 Akka 流从迭代器创建源流时如何进行清理?
- docker - docker-compose:版本 3 中共享卷的绝对路径
- powershell - 尝试从批处理文件运行 PowerShell 脚本失败
- python - AssertionError:通过了 5 列,传递的数据有 1 列
- spring-boot - spring-data-jdbc:查询实体,包含与 JOOQ 的 1-n 关系
- google-bigquery - BIGQUERY 表中的整数列分区功能何时可用?
- php - Laravel,使用分页方法 Illuminate\Database\Eloquent\Collection::render 不存在