[关闭]
@Channelchan 2017-03-08T11:21:41.000000Z 字数 1244 阅读 26572

StatsModels 置信区间

未分类


Confidence Interval:(区间估计)
品种收益置信区间

  1. import tushare as ts
  2. import pandas as pd
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from scipy import stats
  6. data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
  7. data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')
  8. per = data['close'].pct_change()[1:]
  9. p_mu = np.mean(per)
  10. p_std = np.std(per)
  11. cil, cir = stats.norm.interval(0.95, loc=p_mu, scale=p_std)
  12. print(cil, cir)

输出结果:说明用一年的数据计算出这只股票一天的涨跌幅95%的概率在(-2.27%,2.27%)之间

  1. (-0.022749357724022465, 0.022726966268070206)
  1. x = np.linspace(per.min(), per.max(), len(per))
  2. y = stats.norm.pdf(x,p_mu, p_std)
  3. plt.plot(x, y)
  4. plt.vlines(cil,0, 35, colors='r', linestyles='dashed')
  5. plt.vlines(cir, 0, 35, colors='r', linestyles='dashed')
  6. plt.show()

Sample Mean vs. Population Mean


使用t分布作为样本分布,抽取样本越多,置信区间越窄。

  1. sample_size = 100
  2. sample = np.random.normal(p_mu, p_std, size=sample_size)
  3. s_mu = np.mean(sample)
  4. s_std = np.std(sample)
  5. se = s_std/np.sqrt(sample_size)
  6. cil, cir = stats.t.interval(0.95, len(sample)-1, loc=s_mu, scale=se)
  7. print(cil, cir)
  8. x = np.linspace(sample.min(), sample.max(), len(sample)-1)
  9. y = stats.norm.pdf(x, np.mean(sample), np.std(sample))
  10. plt.plot(x, y)
  11. plt.vlines(cil,0, 20, colors='r', linestyles='dashed')
  12. plt.vlines(cir, 0, 20, colors='r', linestyles='dashed')
  13. plt.show()

策略收益置信区间

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注