从密度函数计算概率

时间:2017-04-23 11:06:53

标签: r probability-density

我已经建立了密度函数,现在我想计算新数据点落到"下降的概率。进入选定的区间(例如,a = 3,b = 7)。所以,我正在寻找:

P(a<x<=b)

一些示例数据:

df<- data.frame(x=c(sample(6:9, 50, replace=TRUE), sample(18:23, 25, replace=TRUE)))

dens<- density(df$x)

我很高兴听到任何解决方案,但最好是 base r

提前谢谢

2 个答案:

答案 0 :(得分:7)

您需要将密度作为一个函数(使用approxfun),然后将该函数集成到所需的限制之上。

integrate(approxfun(dens), lower=3, upper=7)
0.258064 with absolute error < 3.7e-05

## Consistency check
integrate(approxfun(dens), lower=0, upper=30)
0.9996092 with absolute error < 1.8e-05

答案 1 :(得分:0)

这是一个R问题,但这也可以使用Riemann近似在Java中完成 您需要定义一个Riemann接口

public interface Riemann extends
BiFunction<Function<Double,Double>,Integer,BinaryOperator<Double>>{}

然后您可以使用lambda演算来实现接口

int N=100000;
Riemann s = (f, n) -> (a, b) -> 
IntStream.range(0, n).mapToDouble(i->f.apply(a + i*((b-a)/n))*((b-a)/n)).sum();

作为示例,我们将使用形状参数k = 1.5计算1/4到3/4之间的威布尔随机变量的概率

double k=1.5;
Optional<Double>weib=
    Optional.of(s.apply(x->k*pow(x,k-1)*exp(-pow(x,k)), N).apply(0.25,0.75));
weib.ifPresent(System.out::println);

结果应为0.36或36%。使用您自己的积分库而不是程序包库的优点是,它有助于了解后台发生了什么。