概率密度分布

1 概率密度

概率密度函数和累计分布积分都是来刻画随机变量的不确定性的,描述的是总体的特征,我们可以从变量的样本观测值来估计总体特征。下面以青岛啤酒日收益率为例,说明python如何估计概率分布的过程

    dw = ts.get_k_data("600600",start="2016-01-12")
    dw["ret"] = dw['close'].diff(1)
    dw["log"] = np.log(dw['close']).diff(1)
    dw.dropna(inplace=True)    
    density=stats.kde.gaussian_kde(dw['ret'])
    bins = np.arange(-5,5,0.02)
    plt.subplot(211)
    plt.title(u"青岛啤酒收益率序列概率密度曲线图",fontproperties=font)
    plt.plot(bins,density(bins))
    plt.subplot(212)
    plt.plot(bins, density(bins).cumsum())   
    plt.title(u"青岛啤酒累计分布函数图",fontproperties=font)

使用stats模块中的gaussian_kde可以估计收益率的概率密度,对于累计概率密度可以使用cumsum函数计算。

2 二项分布

二项分布用于描述金融市场只有两种结果之重复事件。例如假设股票上涨为1,股价下跌为0,概率就是1-p,X为n天中股价上涨的天数,X~b(n,p)。
下面以青岛啤酒为例子,估计10天中沪深300指数6天上涨的概率。

    dw = ts.get_k_data("600600",start="2016-01-12")
    dw["ret"] = dw['close'].diff(1)
    #计算青岛啤酒上涨的概率
    p= len(dw[dw['ret']>0])/(1.0*len(dw))
    # 估计10个交易日中,有6个交易日上涨的概率
    prob = stats.binom.pmf(6,10,p)
    print("上涨的概率为{0} 10个交易日中有6个上涨的概率{1:.7f}".format(p, prob))

    #上涨的概率为0.487738419619 10个交易日中有6个上涨的概率0.1946741

3 正态分布

正态分布又名高斯分布,被广泛应用在数学、物理以及金融工程领域。是人们最常用的描述连续性随机变量的概率分布。在金融工程中,收益率等变量的分布常常假定为正态分布或者对数正态分布。由于正太分布的概率密度曲线呈钟型,人们常常称正态分布曲线为钟型曲线。
VaR(Value at Risk)指的是在一定概率水平下(a%),某一金融资产或者金融资产组合在未来特定的一段时间内最大可能的损失。
我们首先计算收益率序列的均值和方差。假定收益率序列服从正态分布,有了均值和方差就可以得到收益率序列的概率密度函数和累积分布函数。之后使用ppf函数获取累积密度值为0.05的分位数,得到的值为0.666017805141%, 这说明,VaR为-0.666017805141%,即有95%的概率损失不会超过0.666017805141%

    dw = ts.get_k_data("600600",start="2016-01-12")
    dw["ret"] = dw['close'].diff(1)
    dw.dropna(inplace=True)    
    meam=dw["ret"].values.mean()
    var=dw["ret"].values.var()
    print("Var is {0}".format(stats.norm.ppf(0.05,meam,var**0.5)))
    Var is -0.666017805141

4 卡方分布

Z0,Z1,...,Zn为n个相互独立的服从标准正态分布的随机变量,则
其之和自由度为n的卡方分布。

    plt.plot(np.arange(0,5,0.02),\
             stats.chi.pdf(np.arange(0,5,0.02),3 ))
    plt.title("Probability Density Plot of Chi-Squre Distribution")

5 t分布

绘制t分布

    x = np.arange(-4,4.004, 0.004)
    plt.plot(x, stats.norm.pdf(x),label="Normal")
    plt.plot(x, stats.t.pdf(x,5),label="df=5")
    plt.plot(x, stats.t.pdf(x,30),label="df=30")
    plt.legend()

6 F分布

    plt.plot(np.arange(0,5,0.02),\
             stats.f.pdf(np.arange(0,5,0.02),4, 40 ))
    plt.title("Probability Density Plot of F Distribution")

你可能感兴趣的:(概率密度分布)