三角分布的随机样本:R

时间:2017-02-04 06:03:22

标签: r statistics simulation

我想从三角形分布中生成带有三个参数的数字:a,b,c其中c在我的情况下被定义为(a + b)/ 2。 我们说我有一个向量x

x <- c(1,-1,2,-2,3,-3,4,-4,5,-5,11,-11,12,-12,13,-13)

我希望生成与向量x中的负数一样多的新值。因此,我可以用三角分布生成的数字替换负值。

library(triangle)
c = abs(x[x<0])/2
sample <- rtriangle(length(a[which(a<0)]), 0, abs(x[x<0]),c)

显然这不起作用,因为我收到一条警告信息:

  

警告讯息:   1:在if(a> c | b 1,只使用第一个元素   2:在if(a!= c){:    条件的长度> 1,只使用第一个元素   3:在p [i] *(b - a)中:    较长的物体长度不是较短物体长度的倍数   4:在p [i]&lt; -a + sqrt(p [i] *(b-a)*(c-a))中:    要更换的项目数不是更换长度的倍数   5:在(1 - p [j])*(b - a)中:    较长的物体长度不是较短物体长度的倍数   6:在p [j]&lt; -b-sqrt((1-p [j])*(b-a)*(b-c))中:    要替换的项目数量不是替换长度的倍数

1 个答案:

答案 0 :(得分:1)

由于rtriangle不将矢量作为输入,您可以使用sapply创建一个矢量来评估矢量的每个元素,如下所示:

x <- c(1,-1,2,-2,3,-3,4,-4,5,-5,11,-11,12,-12,13,-13)

library("triangle")

sample = sapply(abs(x[x<0]), function(x){ rtriangle(1,0,x,x/2) })

> sample
[1] 0.6514940 0.6366981 1.8598445 0.9866790 1.7517438 2.9444719 4.1537113 2.2315813

您将获得8个不同三角形分布的随机样本。