如何使用SymPy计算对数正态密度(从正常密度开始)

问题描述 投票:2回答:1
from sympy import *
x, y, mu, sigma, density1, density2 = symbols('x y mu sigma density1 density2')
eq1 = Eq(density1, 1/(sqrt(2*pi)*sigma)
                         *exp(-(x-mu)**2/(2*sigma**2)))     # normal 
eq2 = Eq(y, exp(x))                                         # substitution
eq3 = Eq(density2, 1/(y*sqrt(2*pi)*sigma)
                         *exp(-(ln(y)-mu)**2/(2*sigma**2))) # lognormal
[eq1, eq2, eq3]

输出:LaTeX output

如何让SymPy取normal density(eq1),应用x到y替换(eq2)并输出lognormal density(eq3)?

(我在https://stats.stackexchange.com/q/55353/14202没有回答这个问题。)

sympy substitution probability-density
1个回答
1
投票

当我们在概率密度函数中更改变量时,还必须将密度乘以执行替换的函数的导数。这就是替换在积分中的作用,而概率密度必须有积分1,所以我们必须尊重它。

让我们调用替换执行函数f(在你的例子中它是log(y))。以下是该过程的工作原理,从您的设置开始:

f = solve(eq2, x)[0]
new_density = eq1.rhs.subs(x, f) * f.diff()
# test it now
Eq(new_density, eq3.rhs)  #  True
© www.soinside.com 2019 - 2024. All rights reserved.