在前面的文章中,我先将概率值分配给各个事件,得到事件的概率分布。
通过事件与随机变量的映射,让事件“数值化”,事件的概率值转移到随机变量上,获得随机变量的概率分布。
我们使用随机变量的函数,来定制新的随机变量。随机变量的函数是从旧有的随机变量到一个新随机变量的映射。通过函数的映射功能,原有随机变量对应新的随机变量。通过原有随机变量的概率分布,我们可以获知新随机变量的概率分布。事件,随机变量,随机变量函数的关系如下:
一个简单的例子是掷硬币。出现正面的话,我赢1个筹码,负面的话,我输1个筹码。那么,投掷一次,赢的筹码数是一个随机变量X,X可能取值为1和-1。因此X的分布为:
换一个角度来思考,我们将正负面“换算”成输赢的钱。如果一个筹码需要10元钱买,那么投掷一次硬币,赢的钱是一个随机变量Y,且 Y = 10X 。Y的分布为:
Y实际上是随机变量X的一个函数。X的1对应Y的10,X的-1对应Y的-10。即[Y = 10X ]
小总结,在上面的实验中,硬币为正面为一个事件。赢得的筹码数为一个随机变量X。赢得的钱是X的函数Y,它也是一个随机变量。
随机变量的函数还可以是多变量函数,Y = g(X_1, X_2, ..., X_n)。Y的值y对应的是多维空间的点(x_1, x_2,..., x_n)。比如掷硬币,第一次赢的筹码为X_1,第二次赢的筹码为X_1。我们可以构成一个新的随机变量Y = X_1 + X_2,即两次赢得的筹码的总和。
绘制密度函数
import numpy as np
import matplotlib.pyplot as plt
pi = np.pi
x = np.linspace(-10, 10, 200)
y = np.linspace(0.1, 10, 100)
fx = 1/np.sqrt(2*pi)*np.exp(-x**2/2)
fy = 1/np.sqrt(2*pi)*(y**(-1/2))*np.exp(-y/2)
plt.plot(x, fx, color = "red", label="X distribution")
plt.plot(y, fy, label="Y distribution")
plt.title("Y = X*X")
plt.xlabel("RV")
plt.ylabel("pdf")
plt.legend()
plt.show()
代码如下:
# By Vamei
import numpy as np
import scipy.integrate
import matplotlib.pyplot as plt
pi = np.pi
'''
core of the integral
'''
def int_core(y):
f = lambda x: 1.0/(2*pi)*np.exp(-0.5*(x**2 + (y-x)**2))
return f
'''
calculate f(y)
'''
def density(y):
rlt = scipy.integrate.quad(int_core(y), -np.inf, np.inf)
return rlt[0]
# get distribution
y = np.linspace(-10, 10, 100)
fy = map(density, y)
plt.plot(y, fy)
plt.title("PDF of X1+X2")
plt.ylabel("f(y)")
plt.xlabel("y")
plt.show()
通过随机变量的函数,我们可以利用已知随机变量,创建新的随机变量,并获得其分布。