繁体   English   中英

来自三角分布的随机样本:R

[英]A random sample from triangular distribution: R

我想从具有三个参数的三角形分布中生成数字: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 <c)return(rep(NaN,times = 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的倍数:In(1- p [j])*(b -a):较长的对象长度不是较短的对象长度6的倍数:在p [j] <-b-sqrt((1- p [j])*(b-a)*(b-c))中:要替换的项目数不是替换长度的倍数

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM