python 相关性检验怎么计算p值_(第二弹)python实现股票价格布朗运动的正态性检验与蒙特卡洛模拟的拟合优度分析...

(第二弹)python实现股票价格布朗运动的正态性检验与蒙特卡洛模拟的拟合优度分析

前情回顾:一周前,我们复习了经典期权定价理论中关于股票价格服从几何布朗运动的部分,并用python实现了股票价格布朗运动的蒙特卡洛模拟方法,接下来让我们用一些科学的统计方法检验我们得出的结论。

f0099cf45d380b940cca3aa1703a33de.png

热身准备

01

#输入外包import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport scipy.stats as statsfrom scipy.stats import kstest #用于正态性检验import statsmodels.api as smfrom statsmodels.formula.api import ols #用于OLS回归 #读取csv,提取股票价格date=pd.read_csv(r'C:\Users\59298\Desktop\homework\000681.csv',sep='\t',encoding='utf-16')pture=pd.DataFrame(date)pture=pture.iloc[:,1] #计算样本数量、mu、sigmadays=len(pture)dt=1#时间间隔为1天

真实股票价格的正态性检验

02

#计算日收益率、mu、sigmasture=pd.DataFrame(np.zeros((days)))for i in range(days):    sture.iloc[i]=pture.iloc[i]/pture.iloc[i-1]-1mu=np.mean(sture)sigma=np.std(sture) #真实数值的正态性检验dsture=sture-sture.shift() #shift()实现sture的列向下平移,即每个单元格滞后一期;ds=s-s(-1)ds_div_s=dsture.div(sture,axis=0)ds_div_s.iloc[0]=0print(kstest(ds_div_s,'norm'))

输出结果:(第一项数值为统计数,第二项为p值)

3165212da3e88169ac76c5ae2ff708c6.png

基本上p值>0.05,均可认为股票服从对应的正态分布。

蒙特卡洛模拟拟合优度分析

03

(1)蒙特卡洛模拟
#创建股票价格模拟值dataframe,使期初价格与真实值相等num=30 #模拟次数为30psimu=pd.DataFrame(np.zeros((days,num)))psimu.loc[0]=pture.loc[0]#蒙特卡洛模拟for j in range(num):    for i in range(days-1):        psimu.iat[i+1,j]=psimu.iat[i,j]+psimu.iat[i,j]*(mu*dt+np.random.standard_normal()*sigma*np.sqrt(dt))#股票价格保留两位小数formater='{0:.02f}'.formatpsimu=psimu.applymap(formater)psimu=pd.DataFrame(psimu,dtype='float')

(2)拟合优度分析

#创建各解释变量(平均值mean、极差range、中位数median、方差var、偏度skew、峰度kurt)的dataframepmean=pd.DataFrame(np.zeros((num,1)))prange=pd.DataFrame(np.zeros((num,1)))pvar=pd.DataFrame(np.zeros((num,1)))pskew=pd.DataFrame(np.zeros((num,1)))pkurt=pd.DataFrame(np.zeros((num,1)))for i in range(num):   pmean.iloc[i]=psimu.iloc[:,i].mean()   prange.iloc[i]=psimu.iloc[:,i].max()-psimu.iloc[:,i].min()   pvar.iloc[i]=psimu.iloc[:,i].var()   pskew.iloc[i]=psimu.iloc[:,i].skew()   pkurt.iloc[i]=psimu.iloc[:,i].kurt()    G.iloc[i]=g.iloc[:,i].sum()pmodel=pd.concat([G,pmean,prange,pvar,pskew,pkurt],axis=1)!
#多元线性回归pmodel.columns = ['G','pmean','prange','pvar','pskew','pkurt']#设置被解释变量与解释变量x_var=pmodel.iloc[:,1:6]y_var=pmodel.iloc[:,0]#ols回归,解释变量:pmean+prange+pvar+pskew+pkurtlm_m=ols('G~pmean+prange+pvar+pskew+pkurt',data=pmodel).fit()print(lm_m.summary()) #R^2相当大,而多个解释变量的p值大于0.1,有理由认为存在多重共线性print(x_var.corr()) #初步判断出pvar与prange存在高度共线性

输出结果:

60b589a332fd6a51144623ec5a91d5e6.png

db5102cc468b0c6e272fbd8a184628ed.png

#计算单独解释变量间线性相关系数print('use pearson ,parametric tests pvar and prange')r,p=stats.pearsonr(pvar,prange)print('pearson r**2:',r**2)print('pearson p:',p) #p值很小,认为两者存在共线性

输出结果:

606ffd0252a7424fbfebbd38a41abced.png

#ols回归,解释变量:pmean+pvar+pskew+pkurtlm_m=ols('G~pmean+pvar+pskew+pkurt',data=pmodel).fit()print(lm_m.summary()) #D.W=2.4,暂且认为无序列相关性

输出结果;

8df7cb50a7cf0365868edb0814c16bd8.png

#残差图plt.scatter(pmean,lm_m.resid,label='pmean')plt.scatter(pvar,lm_m.resid,label='pvar')plt.scatter(pskew,lm_m.resid,label='pskew')plt.scatter(pkurt,lm_m.resid,label='pkurt')plt.legend(loc="upper center")plt.ylabel('resid')

输出结果

89421bea7535180756d5a8d2e2edde48.png

#观察残差图,发现并没有存在明显的异方差性

#得出结论:均值、方差的偏误都会显著影响拟合优度G值,而有关正态性检验的拟合程度对拟合优度影响不明显.

#因此当我们能够较好地预测真实股价的均值、极差、波动率时,我们可以用其作为限制,从而提高模拟结果的准确程度.

fadff682d813fa1baf92cfff484914b5.png

作者:黄昱

编辑校对:郭通

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
## 讲师介绍: 近 5 年个人投资理财年化收益平均超 25%。如果你也想提升自己的睡后收入,轻松赚钱,那么这门课就是为你量身打造。课程基于一个完整真实的量化交易业务来讲授,并融入老师的理财经验以及使用编程技术辅助投资的技巧,让你面对各种复杂投资情况也能做到游刃有余。 ## 学习目标: 从不懂“理财”开始到实现自动交易,成为一个“技术流”理财高手 编程技术 + 核心量化策略 + 交易系统开发 + 讲师经验分享,学会用技术辅助理财 本课程从最基础的什么是量化开始讲起,即使对投资理财不了解同样可以学习,轻松入门无压力。 从如何获取数据开始,到实现实盘交易,课程对量化交易的每一步都进行细致讲解,为你铺开量化交易的每一个细节。 不仅仅只是教你学会使用某种工具,更会教给你量化交易的投资思想,让你面对各种情况都游刃有余。 ## 课程亮点: 设计适合自己并能适应市场的交易策略,才是量化交易的灵魂 课程亲手带你设计并实现两种交易策略,快速培养你的策略思维能力 1. 择时策略:通过这个策略学会如何利用均线,创建择时策略,优化股票买入卖出的时间点。2. 选股策略:掌握选股策略的核心逻辑,并基于收益率创建动量选股策略,并验证其有效性。 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 第三方平台大而全,不易扩展,效率还差,信息安全也是大问题,打造自己的交易平台才是更优解
拟合优度检验和F检验统计学中常用的两种假设检验方法,可以用于判断模型的拟合优度和变量之间的相关性。下面是用Python实现拟合优度检验和F检验的代码示例: 拟合优度检验: ```python from scipy.stats import chi2 # 计算拟合优度检验统计量和p def goodness_of_fit(observed, expected): n = len(observed) k = len(expected) df = n - k chi2_statistic = sum((observed - expected) ** 2 / expected) p_value = 1 - chi2.cdf(chi2_statistic, df) return chi2_statistic, p_value, df # 示例 observed = [10, 20, 30, 40] expected = [15, 15, 30, 40] chi2_statistic, p_value, df = goodness_of_fit(observed, expected) print("拟合优度检验统计量为:", chi2_statistic) print("拟合优度检验的p为:", p_value) ``` F检验: ```python import numpy as np from scipy.stats import f # 计算F检验统计量和p def f_test(x, y): n = len(x) k = 2 df1 = k - 1 df2 = n - k x_mean = np.mean(x) y_mean = np.mean(y) x_sum_sq = sum((x - x_mean) ** 2) y_sum_sq = sum((y - y_mean) ** 2) ssr = (x_mean - y_mean) ** 2 sse = x_sum_sq + y_sum_sq - ssr f_statistic = (ssr / df1) / (sse / df2) p_value = 1 - f.cdf(f_statistic, df1, df2) return f_statistic, p_value, df1, df2 # 示例 x = [10, 20, 30, 40] y = [15, 25, 35, 45] f_statistic, p_value, df1, df2 = f_test(x, y) print("F检验统计量为:", f_statistic) print("F检验的p为:", p_value) ``` 以上是两种方法的Python实现代码,可以根据实际需要进行调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值