【发布时间】: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 <- seq(.01, 1, length.out=30)。解决方案:max(which(cumsum(vec) <= 0.5))会给出一个位置编号,cumsum(vec)[max(which(cumsum(vec) <= 0.5))]会给出接近 0.5 但不会超过的值。 -
大家好,在两个方面道歉:1)我认为我遗漏了一些非常简单的东西,以至于我没有包含可重复的数据,2)我使用 ecdf() 来获得相应的累积总和,而不是 cumsum() (现在在上面的文本中修复)。 @plafort,您的代码可以解决问题,但似乎应该只有一个与 ecdf() 相反的函数!