我想从三角形分布中生成带有三个参数的数字: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))中: 要替换的项目数量不是替换长度的倍数
答案 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个不同三角形分布的随机样本。