2017-02-04 114 views
0

想从三角形分布生成数字,它只有三个参数:在我的情况下,a,b,c和c被定义为(a + b)/ 2。 比方说,我有一个向量x:三角形分布的随机样本:R

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 < c)返回(REP(南安倍= n)): 条件长度> 1且仅使用第一个元素 2:In if(a!= c){: 条件长度> 1且仅使用第一个元素 3:在p [i] *(b - a)中: 较长的物体长度不是较短物体长度的倍数 4:在p [i] < - a + sqrt(p [i] *(b - a)*(c - a))中: 要替换的项数不是替换长度的倍数 5: (1-p [j])*(b-a): 较长的对象长度不是较短的对象长度的倍数 6:在p [j] < -b-sqrt b - α)*(b - C)): 数项替换的是不更换长

+0

参数'a'为0,但'b'和'c'不是单个数字。我不清楚你如何尝试抽样。 –

+0

从'rtriangle'的帮助下:'a,b和c可能是适当的长度向量,除了rtriangle的情况。' –

+0

我想得到一个向量(向量长度对应于向量中的一些负数* * x **)从三角形分布采样的数字。我想在从_a_(_a = 0_)到_b_(_b是向量_ ** x **中的负向元素的绝对值)的范围内采样,并且参数_c_是:_c = b/2_。 – marianess

回答

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个不同三角形分布的随机样本。

+0

谢谢,现在我明白你的评论是关于什么的。看起来答案有帮助。 – marianess