【问题标题】:Identify vector index or value at a specific cumulative sum (or probability) in R在 R 中以特定累积和(或概率)识别向量索引或值
【发布时间】:2015-06-10 19:24:39
【问题描述】:

这似乎是一个简单的问题,但由于某种原因我一直无法找到解决方案。

我有一个总和为 1 的概率矩阵,我想知道在哪个值处我的累积总和为 0.5。换句话说,如果我把这个矩阵变成一个排序的向量,我必须从最高值走多远才能得到 0.5 的累积和。

我将矩阵转换为值向量并使用 plot(cumsum(x)) 生成以下图表:

我可以做类似的事情

P<-ecdf(x)
P(0.00001)

要获得 x 值为 0.00001 的累积和,但我想朝另一个方向前进,即累积和为 0.5 的 x 值是多少?

quantile() 给我排序值的 50% 的值(例如,它会给我上图中 sort(x)[4e+05] 的值),这不是我想要的。

感谢您对这个看似简单的问题的帮助!

干杯, 乔什

解决办法:

x[max(which(cumsum(x)<=0.5))]

给出的值是 0.5 的累积总和(感谢@plafort),尽管似乎应该有更简单的方法!

【问题讨论】:

  • 如果您将reproducible example 包含在样本输入数据中并希望用于该样本,将会很有帮助。 cumsum 返回一个向量,所以我不明白你怎么做 P(0.00001) 因为P 应该是一个向量,而不是一个函数。
  • 正如@MrFlick 正确指出的那样,P 必须是一个函数,在你的情况下有一个情节 - 它必须适合你的数据点的分析(通常是平滑)函数跨度>
  • 同上之前所说的。这是一个简单的前任。 vec &lt;- seq(.01, 1, length.out=30)。解决方案:max(which(cumsum(vec) &lt;= 0.5)) 会给出一个位置编号,cumsum(vec)[max(which(cumsum(vec) &lt;= 0.5))] 会给出接近 0.5 但不会超过的值。
  • 大家好,在两个方面道歉:1)我认为我遗漏了一些非常简单的东西,以至于我没有包含可重复的数据,2)我使用 ecdf() 来获得相应的累积总和,而不是 cumsum() (现在在上面的文本中修复)。 @plafort,您的代码可以解决问题,但似乎应该只有一个与 ecdf() 相反的函数!

标签: r quantile cumsum


【解决方案1】:

我想我得到了你想要的;这是我的解决方案:我的目标是找出矩阵的元素,例如cumsum&gt;= 20。 尽管我认为必须有一种超级简单的方法来实现这一点。

set.seed(1)
data <- matrix(rnorm(9, 10), 3, 3)
data
          [,1]      [,2]     [,3]
[1,]  9.373546 11.595281 10.48743
[2,] 10.183643 10.329508 10.73832
[3,]  9.164371  9.179532 10.57578
which(cumsum(data) >= 500)[1]
[1] NA
which(cumsum(data) >= 20)[1]
[1] 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2019-10-12
    • 2018-05-05
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多