数据可分为两类:
1、定性数据:对事物性质进行描述的数据,通常只具有有限个取值,往往用于描述类别
2、定量数据:呈现事物数量特征的数据,是由不同数字组成的,数字取值是可以比较大小的
概率(Probability)是用来刻画事物不确定性的一种测度,根据概率的大小,我们可以判断不确定性的高低。概率的取值介于0和1之间,表明一个特定事件以多大的可能性发生。
在Python中,通过NumPy包的random模块中的choice()来生成特定的概率质量函数的随机数
choice(a,size=None,replace=True,p=None)
RandomNumber = np.random.choice([1,2,3,4,5],size=100,replace=True,p=[0.1,0.1,0.3,0.3,0.2])
概率密度函数 和 累计分布函数 都是用来刻画随机变量之不确定性的,描述的是总体的特征。用Python实现
from scipy import stats
Numpy库中
binomial(n,p,size=None)
normal(loc=0.0,scale=1.0,size=None)
#生产5个标准正态分布随机数
Normal = np.random.normal(size=8)
from scipy import stats
stats.norm.pdf(Normal)#计算随机数的密度
from scipy import stats
stats.norm.cdf(Normal)#计算随机数的累计密度值
from scipy import stats
1、联合概率分布
多个变量之间的联合行为可用联合概率分布。
2、变量的独立性
3、变量的相关性
例如 用corr()函数来描述上证指数和深证指数的收益率的相关性
Python中stats模块的t类的interval()函数用于在总体方差未知是进行区间估计。
interval(alpha,df,loc,scale)
x=[10.3,9.9,11.1,8.9,10.9,12.4,11.3,10.8,8.3,9.5,12.2]
stats.t.interval(0.95,len(x)-1,np.mean(x),stats.sem(x))
stats.ttest_1samp(样本,均值)
判断两个服从正太分布的总体的均值是否存在显著性差异
stats.ttest_ind(样本1,样本2)
当两个样本并不互相独立是,我们可以使用配对样本t检验对两个总体的均值差异进行检验。
stats.ttest_rel(样本1,样本2)
方差分析的目的在于分析因子对反应变量有无显著影响,即因子的不同水平下反应变量的均值是否有显著差异。一般分为两大类:
1、 不可控的随机因数
2、研究中施加对结果形成影响的可控因素(因子)
导入模型库
import statsmodels.stats.anova as anova
from statsmodels.formula.api import ols
model = osl(‘样本某一列 ~ C(样本另一列)’)
table1= anova.anova_lm(model)
model=ols("Return ~ C(Industry)",data=year_return.dropna()).fit() #建立模型
table=anova.anova_lm(model) #根据模型生成表格
table#不同行业的股票方差
输出结果:
df | sum_sq | mean_sq | F | PR(>F) | |
---|---|---|---|---|---|
Industry | 74.0 | 60.517228 | 0.817800 | 4.177614 | 4.382045e-28 |
Residual | 2302.0 | 450.634318 | 0.195758 | NaN | NaN |
上述结果,p=4.382045e-28,在0.05的显著水平下,p值远远小于0.05,因此我们可以拒绝原假设(‘Return ~ C(Industry)‘),即(‘A~C (B)‘)不同B的A是不一样的,因此B是影响A的一个重要因素
model = osl(‘样本某一列 ~ C(样本另一列)+C(样本另一列)’,data=样本).fit()
table1= anova.anova_lm(model)
加号变乘号
model = osl(‘样本某一列 ~ C(样本另一列)*C(样本另一列)’,data=样本).fit()
table1= anova.anova_lm(model)
构造上证指数和深圳指数收益率的回归模型
import statsmodel.api as sm
model=sm.OLS(SHRet,sm.add_constant(SZRet)).fit()
print(model.summary())
下表为截距项:
coef | std err | t | P>|t| | [95.0% Conf. Int.] | |
---|---|---|---|---|---|
const | -0.0003 | 0.000 | -1.747 | 0.081 | -0.001 3.58e-0.5 |
Retindex | 0.7603 | 0.010 | 75.487 | 0.000 | 0.741 0.780 |
plt.scatter(model.fittedvalues,model.resid)
plt.xlabel("X 拟合值")
plt.ylabel("Y 残差")
plt.legend()
绘制收益率的回归模型
sm.qqplot(model.resid_pearson,stats.norm,line="45")
model = sm.OLS(np.log(pen.rgdpe),sm.add_constant(pen.iloc[:,-6:])).fit()
print(model.summary())
因此,pl_c与pl_k是不显著、pl_i与pl_x与GDP为负相关,pl_g和pl_m则是正相关
剔除pl_c与pl_k
model = sm.OLS(np.log(pen.rgdpe),sm.add_constant(pen.iloc[:,-5:-1])).fit()
print(model.summary())
本文章引用:《量化投资以Python为工具》