推断统计的工作主要包含两类:参数估计(Parameter Estimation) 和 假设检验(Hypothesis) 。
1.参数估计
参数估计通常有点估计(Point Estimate) 和 区间估计(Interval Estimation) 两种形式。
1.1 点估计
点估计是用一个具体的值来估计一个总体的未知参数,也叫定值估计。能直接告诉我们未知参数的估计值是多少。但是样本毕竟只是总体的一部分,捕捉的信息终究有局限。因此我们使用样本数据估计出的结果不可避免地回有一定的偏差。
相比于其它中心指标,一般使用样本均值去估计总体均值得到的结果更为准确。
点估计的方法之一是矩估计法(Moment Estimation)。
其中,x1,x2,…,xn是抽得的一组样本。
一般来说,样本容量n较大时才能保证矩估计结果的优良性。
1.2 区间估计
1.2.1 区间估计概述
区间估计考虑到了估计存在的误差,因而不是使用一个具体的值,而是使用两个数值所构成的区间来估计一个未知参数。这样估计结果包含真实值的概率增加了,但是缺点是没有直观的数值。
1.2.2 区间估计的方法
要进行区间估计,一般要先对参数进行点估计,得到点估计值,然后用该点估计的值加减 误差幅度(Margin of Error) 与 置信系数(Confidence Coefficent) 的乘积而得到两个取值,则是置信区间的两个端点。
举个栗子:
1.3 进行区间估计的Python函数
Python中的stats模块中的t类的interval()函数用于在总体方差未知时进行区间估计。其函数语法为:
interval(alpha,df,loc,scale)
- alpha为置信水平
- df是检验量的自由度
- loc为样本均值
- scale为标准差
假设我们要估计一批产品的重量的期望,抽样了十个进行称重得到重量为为:
10.1, 10, 9.8, 10.5, 9.7, 10.1, 9.9, 10.2, 10.3, 9.9
假设所称出物体重量服从正态分布,我们可以用interval()求置信度为0.95的置信区间:
from scipy import stats
import numpy as np
x = [10.1, 10, 9.8, 10.5, 9.7, 10.1, 9.9, 10.2, 10.3, 9.9]
# np.mean(x) #求x均值
# stats.sem(x) # 求样本的标准误
# 样本均值服从t分布,样本均值的标准差为标准误
# 在区间估计时,用标准误来表示样本均值的标准差
stats.t.interval(0.95, len(x)-1, np.mean(x),stats.sem(x))
结果如下:
2. 案例分析
沪深300(399300.SZ)收益率均值的参数估计
以近一年数据为样本计算
# 调取数据
import numpy as np
import tushare as ts
import pandas as pd
token = 'Your Token' # 输入你的接口密匙,获取方式及相关权限见Tushare官网。
pro = ts.pro_api(token)
df = pro.index_daily(ts_code='399300.SZ')
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index(['trade_date'], inplace=True) # 将日期列作为行索引
df = df.sort_index()
# 提取沪深300的收益率序列
Retindex=df.pct_chg['2020']
# 绘制沪深300收益率的直方图
plt.hist(Retindex)
Retindex.hist()
结果如图所示:
from scipy import stats
import matplotlib.pyplot as plt
# 求沪深300收益率的均值
mu = Retindex.mean()
# 求沪深300收益率的标准差
sigma = Retindex.std()
# 在直方图上添加正态分布曲线
fig = plt.figure()
ax1 = ax1 = fig.add_subplot(111)
ax1.plot(np.arange(-6, 6.02, 0.02), stats.norm.pdf(np.arange(-6, 6.02, 0.02), mu, sigma), 'r')
ax2 = ax1.twinx()
ax2.hist(Retindex)
plt.show()
结果如图:
stats.t.interval(0.95, len(Retindex)-1, mu, stats.sem(Retindex))
结果如下:
(备注:这里序列中的收益率如-0.02是以-2来表示的,0.032则以3.2表示,而不是0.032。所以得到的置信区间结果不能读错了,-0.07意思不是跌了七个点。)