如何在R中计算参数为a=1、sigma=2、mu=2.5的截断正态分布均值?
在R中计算截断正态分布的均值
要得到和你Python代码一致的结果(标准正态分布在x ≥ 1时的截断均值),可以用以下两种方法:
方法1:使用msm包的tnorm函数
msm包提供了直接计算截断正态分布均值的函数tnorm,无需手动推导公式:
- 先安装并加载包:
install.packages("msm") library(msm)
- 计算截断均值:
# 参数对应标准正态分布(mean=0, sd=1),下界1,上界无穷大 trunc_mean <- tnorm(mean = 0, sd = 1, lower = 1, upper = Inf) print(trunc_mean)
运行后会输出1.525135,和你Python代码的结果一致。
方法2:手动计算(基于截断正态分布的矩公式)
如果你不想额外安装包,可以直接用正态分布的密度函数dnorm和分布函数pnorm手动计算:
# 标准正态分布,左截断点a=1 a <- 1 trunc_mean <- dnorm(a) / (1 - pnorm(a)) print(trunc_mean)
这个公式的原理是:对于左截断在a的标准正态分布,截断均值等于φ(a) / (1 - Φ(a)),其中φ是标准正态密度函数,Φ是标准正态分布函数。
补充:如果你实际想计算的是你描述的mu=2.5、sigma=2、下界1的截断均值
只需调整参数即可:
# 使用msm包 mu <- 2.5 sigma <- 2 a <- 1 trunc_mean_custom <- tnorm(mean = mu, sd = sigma, lower = a, upper = Inf) print(trunc_mean_custom) # 手动计算 z <- (a - mu) / sigma trunc_mean_custom_manual <- mu + sigma * dnorm(z) / (1 - pnorm(z)) print(trunc_mean_custom_manual)
内容的提问来源于stack exchange,提问作者nilsinelabore
相关产品推荐
相关产品推荐

