如何在 R 中生成负指数分布

Sha*_*and 4 math r exponential

我今天手动创建负指数分布,并试图找出更快/更简单的解决方案。首先,我只是手动制作了一个几何序列,如下所示,不断乘以 0.60 直到接近零:

x <- 400
x*.60
Run Code Online (Sandbox Code Playgroud)

这样做大约 20 次,我得到了这个解向量并绘制了分布图,如下所示:

y <- c(400,240,144,86.4, 51.84, 31.104, 18.6624, 11.19744, 6.718464, 4.031078,
       2.418647, 1.451188, .8707129, .5224278, .3134567, .188074, .1128444,
       .06770664, .04062398, .02437439)
plot(y)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而,我试图找出用 来执行此操作的更简单方法seq,但我只知道如何用算术序列来执行此操作。我尝试重现我在下面所做的事情:

plot(seq(from=400,
    to=1,
    by=-.60))
Run Code Online (Sandbox Code Playgroud)

这显然不会产生相同的效果,绘制时会导致非常线性的下降:

在此输入图像描述

有更简单的解决方案吗?我不得不想象这是 R 中相当基本的函数。

jay*_*.sf 5

您可以使用dexp.

(x <- dexp(1:20, rate=.5)*1000)
# [1] 303.26532986 183.93972059 111.56508007  67.66764162  41.04249931  24.89353418  15.09869171   9.15781944   5.55449827
# [10]   3.36897350   2.04338572   1.23937609   0.75171960   0.45594098   0.27654219   0.16773131   0.10173418   0.06170490
# [19]   0.03742591   0.02269996

plot(x)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

为了使其恰好从 400 开始,我们可以最小化(400 - dexp(1, rate=.5)*x)^2使用optimize.

f <- function(x, a) (a - dexp(1, rate=.5)*x)^2
xmin <- optimize(f, c(0, 4000), a=400)

(x <- dexp(seq_len(20), rate=.5)*xmin$minimum)
# [1] 400.00000000 242.61226389 147.15177647  89.25206406  54.13411329  32.83399945  19.91482735  12.07895337   7.32625556
# [10]   4.44359862   2.69517880   1.63470858   0.99150087   0.60137568   0.36475279   0.22123375   0.13418505   0.08138735
# [19]   0.04936392   0.02994073
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想要任何不同的内容,rate=您应该在optimize创建值时使用它。