求 R 中截断正态分布的均值

Find mean of truncated normal distribution in R

提问人:nilsinelabore 提问时间:6/17/2023 更新时间:6/18/2023 访问量:77

问:

如何找到 R 中截断正态分布的平均值,其中下界为 1、2 和 2.5?我已经使用了该库,但它暂时没有任何功能。在 Python 中,我尝试了以下代码:asigmamutruncnorm

import numpy as np
from scipy.stats import truncnorm
a, b = 1, np.inf
mean, var, skew, kurt = truncnorm.stats(a, b, moments='mvsk')
print(mean)

这给了.如何在 R 中实现相同的结果?mean = 1.52513528

python r 统计 态分布 被截断

评论

0赞 nilsinelabore 6/17/2023
嗨,@user2554330,文档用法指出,函数中已经指定了不意味着吗?我似乎找不到其他资源etruncnorm(a=-Inf, b=Inf, mean=0, sd=1) etruncnorm

答:

2赞 Onyambu 6/18/2023 #1

在您的 python 代码中,您没有设置位置和比例,因此采用位置 = 0 和比例 = 1 的默认值。这就是为什么你得到 1.525。您应该考虑以下几点:

您在 python 中的示例:

import numpy as np
from scipy.stats import truncnorm
a, b = 1, np.inf
mean, var, skew, kurt = truncnorm.stats(a, b, moments='mvsk')
print(mean)
1.525135276160982

在 R 中,你可以简单地执行以下操作:

a <- 1
b <- Inf
diff(dnorm(c(b, a)))/diff(pnorm(c(a,b)))
[1] 1.525135

truncnorm::etruncnorm(a, b)
[1] 1.525135

要使用提供的数据,请执行以下操作:

import numpy as np
from scipy.stats import truncnorm
a, b = 1, np.inf
mu, sigma = 2.5, 2
mean, var= truncnorm.stats((a-mu)/sigma, (b - mu)/sigma, mu, sigma)
print(mean)
3.278764113471854

在 R 中,您可以编写一个简单的代码来计算平均值:

truncnorm::etruncnorm(a, b, mu, sigma)
[1] 3.278764

你总是可以使用基数 R 来确认你的答案:

qnorm(pnorm(diff(dnorm(c(b, a), mu, sigma))/diff(pnorm(c(a,b), mu, sigma))), mu, sigma^2)
[1] 3.278764