本帖参考NormalLaplace包rnl()函数代码,提供一种能够生成多元Laplace分布随机数的方法。
请各位专家赐正。
- mu <- c(0, 10, 100) #各元均值
- Sigma = diag(c(1, 2, 5)) #各元标准差
- Alpha <- c(1, 1, 1 / 2) #各元alpha参数
- Beta <- c(1, 1, 3 / 2) #各元beta参数
- n <- 1000 #样本数
- x <- matrix(NA, n, length(mu)) #位置和形状参数调整矩阵
- y <- rexp(n, 1)
- for (i in 1:length(mu)) {
- probs <- c(1 / Beta[i], 1 / Alpha[i]) / (1 / Beta[i] + 1 / Alpha[i])
- signs <- sample(c(-1, 1), n, replace = TRUE, prob = probs)
- mult <- ifelse(signs < 0, signs / Beta[i], signs / Alpha[i])
- x[, i] <- mult * y
- }
- z <- matrix(rnorm(n * length(mu)), ncol = n) #标准正态分布随机数
- rnlres <- t(mu + t(chol(Sigma ^ 2)) %*% z) + x #多元Laplace分布随机数
- hist(rnlres[, 2], probability = T, breaks = 50,
- xlim = c(0, 20), ylim= c(0, 0.2))#第2列的直方图
- lines(density(rnlres[, 2]), col = "blue", lwd = 2)#第2列的概率密度曲线
- curve(NormalLaplace::dnl(x, param = c(10, 2, 1, 1)),
- col = "red", lwd = 2, add = T)#NormalLaplace包的概率密度曲线
- curve(dnorm(x, 10, 2), lwd = 2, add = T)#对比正态分布
结果对比:黑色为正态分布,蓝色为所生成的第二列向量的概率密度曲线,红色为应用NormalLaplace包dnl()生成的概率密度曲线。红色和蓝色线基本相符,与正态分布对比也符合Laplace分布的特点。



雷达卡




京公网安备 11010802022788号







