【发布时间】:2015-07-13 13:54:47
【问题描述】:
编辑:
好的,对不起,我会尽量说清楚,
我有 50 个场景(这里我随机创建),我将所有这些场景放在一个矩阵中。在我可以应用 ecdf 函数之后,这给了我 50 个 ecdf 的列表。我想从我的 50 个场景的所有这些 ecdf 中计算分位数 90 和 10 以及中位数。
这是一个基本代码:
ma <- matrix(ncol = 50, nrow = 200)
for (i in 1:50) {
x <- runif(1:200, min = 0, max = 100)
ma[,i] <- x
}
ma_ecdf <- apply(ma, 2, ecdf)
plot(ma_ecdf[[1]])
for (i in 1:50) {
lines(ma_ecdf[[i]])
}
所以我可以轻松地绘制所有这些参数,但我只想在图表上表示三个参数(Q10、Q50、Q90)。
编辑:
我找到了确切的方法,所以我分享它,如果有时有人需要它。
您可以尝试代码,图形非常明确,并且很好地解释了我想要做什么。感谢那些试图帮助我的人!
ma_data <- matrix(ncol = 50, nrow = 200)
for (i in 1:50) {
a <- runif(1:200, min = 0, max = 100)
ma_data[,i] <- a
}
ma_ecdf <- apply(ma_data, 2, ecdf)
x <- seq(from = 0, to = 1, by =0.1)
ma <- matrix(ncol = 50, nrow = length(x))
for (i in 1:length(x)) {
prob <- x[i]
for (j in 1:length(ma_ecdf)){
ma[i,j] <- quantile(ma_ecdf[[j]], probs = prob)
}
}
q10 <- apply(ma, 1, quantile, probs = c(0.10))
q90 <- apply(ma, 1, quantile, probs = c(0.90))
med <- apply(ma, 1, median)
plot(ma_ecdf[[1]])
for (i in 2:50) {
lines(ma_ecdf[[i]])
}
lines(med, x, type = 'o', col = 'red', lwd = 2)
lines(q90, x, type = 'o', col = 'green', lwd = 2)
lines(q10, x, type = 'o', col = 'green', lwd = 2)
您可以选择使用分位数和中位数绘制所有 ecdf,或者仅使用分位数和中位数绘制以使其更清晰。
【问题讨论】:
-
您能否以 MWE(最小工作示例)的形式展示您已有的代码?这将有助于我们进一步指导您。
-
请阅读有关提供reproducible example的信息。
-
好吧,对不起,我试着提出一个比它更好的问题
-
创建
ecdf的列表,然后使用lapply或sapply使用返回所需分位数的函数循环遍历它们应该不难。目前还不清楚“对于 y 轴的每一行”是什么意思 -
你的问题很不清楚。您不能简单地从原始数据中计算分位数吗?
apply(ma, 2, quantile, prob = c(0.1, 0.5, 0.9))