如何在R语言中编写三角概率分布函数?
构建三角分布密度函数的具体实现方案
1. 明确三角分布的密度公式
三角分布的概率密度函数(PDF)分三段定义:
- 当
x < a或x > b时,密度为 0 - 当
a ≤ x ≤ c时,密度为2*(x - a)/[(b - a)*(c - a)] - 当
c < x ≤ b时,密度为2*(b - x)/[(b - a)*(b - c)]
2. 编写R函数实现
结合你给出的参数定义,实现带参数校验、支持对数输出的完整函数:
#' 三角分布密度函数 #' @param x - (double) 计算密度的取值点 #' @param a - (double) 分布最小值 #' @param b - (double >a) 分布最大值 #' @param c - (double [a,b]) 密度峰值位置 #' @param log - (logical) 是否返回对数密度,默认FALSE #' @return 对应x的密度值(或对数密度) dtriangle <- function(x, a, b, c, log = FALSE) { # 参数合法性校验 if (b <= a) stop("参数b必须大于a") if (c < a || c > b) stop("参数c必须在[a, b]区间内") # 初始化密度向量 dens <- numeric(length(x)) # 分段计算密度 dens[x < a | x > b] <- 0 dens[a <= x & x <= c] <- 2 * (x[a <= x & x <= c] - a) / ((b - a) * (c - a)) dens[c < x & x <= b] <- 2 * (b - x[c < x & x <= b]) / ((b - a) * (b - c)) # 处理log参数 if (log) { dens <- log(dens) } return(dens) }
3. 函数测试示例
用以下代码验证函数正确性:
# 测试对称三角分布:a=0, b=10, c=5 x <- seq(-1, 11, by=0.1) dens <- dtriangle(x, a=0, b=10, c=5) plot(x, dens, type="l", main="对称三角分布密度曲线", col="black") # 测试对数密度输出 log_dens <- dtriangle(x, a=0, b=10, c=5, log=TRUE) lines(x, log_dens, col="red", lty=2) legend("topright", c("密度", "对数密度"), col=c("black", "red"), lty=c(1,2))
4. 扩展建议
- 可继续实现三角分布的完整函数族:累积分布函数(
ptriangle)、分位数函数(qtriangle)和随机数生成函数(rtriangle) - 累积分布函数(CDF)的分段公式:
- x < a: 0
- a ≤ x ≤ c:
(x - a)^2 / [(b - a)*(c - a)] - c < x ≤ b:
1 - (b - x)^2 / [(b - a)*(b - c)] - x > b: 1
内容的提问来源于stack exchange,提问作者stuckunderthebridge
相关产品推荐
相关产品推荐

