You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中计算参数为a=1、sigma=2、mu=2.5的截断正态分布均值?

在R中计算截断正态分布的均值

要得到和你Python代码一致的结果(标准正态分布在x ≥ 1时的截断均值),可以用以下两种方法:

方法1:使用msm包的tnorm函数

msm包提供了直接计算截断正态分布均值的函数tnorm,无需手动推导公式:

  1. 先安装并加载包:
install.packages("msm")
library(msm)
  1. 计算截断均值:
# 参数对应标准正态分布(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:57:20