Python-统计学应用-随机变量及其概率与概率分布

文章目录

  • 随机变量
    • 离散型随机变量
    • 连续性随机变量
  • 分布类型
    • 二项分布(离散型)
    • 正态分布(高斯分布)
    • 卡方分布
    • t分布
    • F分布
    • 指数分布
    • 对数正态分布
  • 变量关系
    • 变量独立性
    • 变量相关性

随机变量

import matplotlib.pyplot as plt
import pandas as pd
from scipy import stats
import numpy as np

离散型随机变量

离散型随机变量样本的频数分布:

pd.Series(xxx).value_counts() # 生成频数
pd.Series(xxx).value_counts()/size # 生成频率

连续性随机变量

stats模块中的 gaussian_kde() 可以估计序列的概率密度,使用 cumsum() 得出序列的累积分布概率密度。

# example 1
hs300 = pd.read_csv('return300.csv')
density = stats.kde.gaussian_kde(hs300.iloc[:, 1])
bins = np.arange(-5, 5, 0.02)
plt.subplot(211)
plt.plot(bins, density(bins))
plt.title('概率密度曲线图')
plt.subplot(212)
plt.plot(bins, density(bins).cumsum())
plt.title('累计分布函数图')
plt.show()

# example 2
wage = pd.read_csv('Bwages.csv')
plt.subplot(311)
plt.hist(wage.wage, density=True) # 频率直方图
plt.subplot(312)
plt.hist(wage.wage, density=True, cumulative=True) # 累积分布直方图
kde = stats.gaussian_kde(wage.wage)
bins = np.linspace(0, 50, num=200)
plt.subplot(313)
plt.plot(bins, kde(bins).cumsum()) # 累积分布函数图
plt.show()

分布类型

二项分布(离散型)

生成二项分布随机数 binomial(n, p, size=None)

num = np.random.binomial(100, 0.5, 20)

二项分布概率质量函数:
N次试验中有n次 A现象(出现概率为p)出现的概率 stats.binom.pmf(n, N, p)

bino = stats.binom.pmf(50,100,0.5) # 100次试验中50次硬币正面朝上的概率值

二项分布累积分布函数:
N次试验中有不大于n次 A现象(出现概率为p)出现的概率 stats.binom.cdf(n, N, p)

history = pd.read_csv('history.csv', index_col='date')
revenue = len(history[history.Emerging_Markets > 0])
loss = len(history[history.Emerging_Markets < 0])
p = revenue / (revenue + loss)
p_revenue = 1 - stats.binom.cdf(6, 12, p) # 12个月中6个月以上月份盈利的概率
print(revenue, loss, p, p_revenue)

正态分布(高斯分布)

生成正态分布随机数 normal(loc=0.0, scale=1.0, size=None)

  1. loc为生成正态分布的均值
  2. scale为生成正态分布的标准差
  3. size为生成正态分布随机数的数量
Norm = np.random.normal(size = 5)

生成正态分布随机数的密度值 pdf()

norm_pdf = stats.norm.pdf(Norm)

生成正态分布随机数的累计密度值 cdf()

norm_cdf = stats.norm.cdf(Norm)

获取累计密度值为0.05的分位数 ppf(0.05, 均值,标准差)
(正态分布应用——VaR)

q = stats.norm.ppf(0.05, r_mean(), r_var()**0.5) # -1.817673%;即95%的概率损失不会超过1.817673%
# 绘制不同均值和方差的正态分布的概率密度函数
norm_bins = np.linspace(-5, 5, num=200)
plt.plot(norm_bins, stats.norm.pdf(norm_bins, 0, 1), label='N(0,1)', color='r')
plt.plot(norm_bins, stats.norm.pdf(norm_bins, 0, 0.5 ** 0.5), label='N(0,0.5)', color='yellow')
plt.plot(norm_bins, stats.norm.pdf(norm_bins, 0, 2 ** 0.5), label='N(0,2)', color='blue')
plt.plot(norm_bins, stats.norm.pdf(norm_bins, 2, 1), label='N(2,1)', color='green')
plt.legend()
plt.show()

卡方分布

ξ₁、ξ₂、……、ξn 均独立同标准正态分布,则其平方和为服从自由度为n的卡方分布。
卡方分布以0为起点,分布是非对称的,服从卡方分布的随机变量值不可能取负值。自由度为n的卡方分布,其期望值为n,方差为2n。

# 自由度为3的卡方分布图
plt.plot(np.arange(0, 5, 0.002),stats.chi.pdf(np.arange(0, 5, 0.002), 3))
plt.show()

t分布

在这里插入图片描述

t分布概率密度曲线是以0为中心、左右对称的单峰分布(“尖峰厚尾”);其形态变化与自由度n的大小有关——自由度越小,分布越分散;自由度越大,变量在其均值周围的聚集程度越高,也越接近标准正态分布曲线(当自由度为30时,t分布已经接近标准正态分布曲线)。

x = np.arange(-4, 4, 0.004)
plt.plot(x, stats.norm.pdf(x), label='Normal', ls='-')
plt.plot(x, stats.t.pdf(x, 5), label='df=5', color='r')
plt.plot(x, stats.t.pdf(x, 30), label='df=30', color='b')
plt.legend()
plt.show()

Python-统计学应用-随机变量及其概率与概率分布_第1张图片

F分布

两个独立的随机变量Z,Y,且一个为服从自由度为m的卡方分布,一个为服从自由度为n的卡方分布,则变量(Z / m) / (Y / n)为服从第一自由度为m、第二自由度为n的F分布,即F~(m,n)。
取值范围为非负,其期望和方差存在与否依赖于第二自由度n:n>2,存在期望;n>4,存在方差。
也为非对称分布。

plt.plot(np.arange(0, 5, 0.002), stats.f.pdf(np.arange(0, 5, 0.002), 4, 40))
plt.show()

指数分布

X~Exp(λ)

bins = np.linspace(0, 1000000, 100000)
plt.plot(bins, stats.expon.pdf(bins, scale=50000))
plt.show()

对数正态分布

X~Lognormnal(μ, σ2)
[Y=lnX 服从正态分布]

log_bins = np.linspace(0, 10, num=200)
plt.plot(log_bins, stats.lognorm.pdf(log_bins, 1, 0, 1))
plt.show()

变量关系

变量独立性

变量相关性

  1. 散点图
plt.scatter(A, B)
plt.xlabel('A')
plt.ylabel('B')
plt.show()
  1. 相关系数
corr_A_B = A.corr(B)

你可能感兴趣的:(python,统计学,python)