Matlab软件进行金融时间序列数据的描述性统计代码

1、数据S&P500的收盘价格,return=100*log(pt/pt-1)

方法1:用python代码

import numpy as np
import pandas as pd

def calculate_log_returns(prices):
    """
    计算价格序列的对数收益率。

    参数:
        prices (numpy.array): 价格序列。

    返回:
        log_returns (numpy.array): 对数收益率序列。
    """
    # 确保输入是NumPy数组
    prices = np.array(prices)

    # 计算连续价格之间的比率
    price_ratios = prices[1:] / prices[:-1]

    # 计算对数收益率
    log_returns = 100 * np.log(price_ratios)
    return log_returns


# 读取CSV文件
df = pd.read_csv('sp500.csv')

# 假设第二列的名字是"closing"(根据你的描述)
closing_prices = df['closing']

# 计算对数收益率
log_returns_np = calculate_log_returns(closing_prices)
# 因为这个对数收益率直接输出是numpy数组,没办法直接用to_csv

# 将NumPy数组转换为Pandas Series
log_returns_series = pd.Series(log_returns_np)

# 如果需要将这一列保存到新的CSV文件中
log_returns_series.to_csv('Sp500-return.csv', index=False, header=["Log_Returns"])

方法2:用matlab软件,关于return的计算在lbtest.m代码里面。这里不重点说。

2、matlab的一些基本描述性代码

x=[ ] 里面粘贴上SP500的收盘价格时间序列,其实就是下面的SP500.mat

命令行窗口输入:

最小值:min(x)

最大值:max(x)

平均值:mean(x)

标准差:std(x)

峰度:skewness(x)

偏度:kurtosis(x)

例子:

S&P500描述性统计表
S&P500
Min-0.0947
Max 0.1096
Mean0.00022728
Std0.0123
Skewness-0.2295
Kurtosis10.6859

3、matlab进行Jarque-Bera、Q(20)=Ljung-Box Q-test、ARCH、KPSS、ADF检验的代码

3.1 matlab进行Jarque-Bera test

目的总体分布的正态性检验

返回值:h=0 接受x服从正态分布的假设;h=1 拒绝该假设

jbtest - Jarque-Bera test - MATLAB - MathWorks 中国

以alpha (默认0.05)显著水平对数据x进行Jarque-Bera检验

[h,pValue,jbstat,cValue]=jbtest (x,alpha)
Function描述
jbtest测试样本是否来自均值和方差未知的正态分布,而不是来自正态分布。

这个表格来自于Matlab官网搜索“Available Hypothesis Tests”里。

https://ww2.mathworks.cn/help/stats/jbtest.html

对于结果的输出情况:

(1) h — Hypothesis test result
        1 | 0
    假设检验结果,返回1或0。

    如果h=1,则表示在α显著性水平上拒绝了零假设。
    如果h=0,则表示在α显著性水平上未能拒绝零假设。


(2)pValue:范围(0,1)内的标量值

    测试的p值,以(0,1)范围内的标量值返回。p是观察到检验统计量与零假设下的观察值一样极端或更极端的概率。较小的p值使人们对零假设的有效性产生怀疑。

     当p不在表列范围[0.001,0.50]内时,jbtest会发出警告,并返回最小或最大的表列值。在这种情况下,您可以使用mctol来计算更准确的p值。

(3)jbstat--测试统计
    非负标量值

    Jarque-Bera检验的检验统计量,以非负标量值返回。

(4) crival——临界值
    非负标量值

    在α显著性水平上,Jarque-Bera检验的临界值以非负标量值返回。如果alpha在[0.001,0.50]范围内,并且样本量小于或等于2000,则jbtest会在预计算值表中查找测试的临界值。
    如果使用mctol,jbtest将使用蒙特卡洛模拟确定测试的临界值。当jbstat>crival时,零假设被拒绝。

关于更多Jarque-Bera Test的知识

蒙特卡罗标准误差(Monte Carlo Standard Error)
           蒙特卡洛标准误差是由于模拟p值而产生的误差。

蒙特卡洛标准误差计算如下:

SE=\sqrt{(\frac{(\hat{p})(1-\hat{p})}{mcreps})}
其中,\hat{p}是假设检验的估计p值,mcreps是执行的蒙特卡洛复制次数。jbtest选择足够大的蒙特卡洛复制次数(mcreps),以使蒙特卡洛标准误差\hat{p}小于为mctol指定的值。

例子

[h,pValue,jbstat,cValue]=jbtest (returns,0.05)


[h,pValue,jbstat,cValue]=jbtest (returns)

这两个的结果是一样的,说明默认alph=0.05

S&P500描述性统计表
S&P500
Jarque-Bera12521.37***

3.2 matlab进行Ljung-Box Q-test

目的:检验残差自相关

返回值:h=1拒绝了零假设,并表明XX残差序列中滞后1到20中至少有一个显著自相关的证据是强有力的。

官网解释Ljung-Box Q-test (lbqtest) 
# https://ww2.mathworks.cn/help/econ/lbqtest.html

[h,pValue,stat,cValue] = lbqtest(res)

# 返回测试的 p值,测试统计值,临界值
# 一般表格里面记录 测试统计值和p值就可以

p<0.1, *
p<0.05, **
p<0.01, ***

例子

  1. 创建一个新的文件夹,自行命名
  2. 创建一个SP500.mat

    3.然后是新建SP500.m,代码如下:

%%对数据向量进行Ljung Box Q检验

load SP500;
%-load('SP500.mat');

plot(SP500);
title('\bf SP500 Closing price');
ylabel('Closing Price');
xlabel('S&P500 Price Since January 3, 1997');

%% 每次运行代码之前,命令行窗口clear

补充:这个图的横坐标、纵坐标的刻度都是可以调整的,有需要可留言。

4.新建lbtest.m,代码如下:

%%按照以下步骤对数据进行预处理:
%通过计算每日回报来稳定该系列。
%计算与平均回报的偏差。

load SP500;

returns = price2ret(SP500);
residuals = returns - mean(returns);

%%测试残差序列是否存在1到20个滞后的显著自相关。返回测试决策、p值、测试统计量和临界值。

[h,pValue,stat,cValue] = lbqtest(residuals);

运行出来的结果:

h=1和pValue=4.3887e-13拒绝了零假设,并表明S&P500收益残差序列中滞后1到20中至少有一个显著自相关的证据是强有力的。

S&P500描述性统计表
S&P500
Q(20) 就是 Ljung-Box 检验102.5521***

我最终出来的结果,和原论文的值不是完全一样,有轻微的差异。但是,学会怎么做,才是我们的目的。

3.3 matlab进行ARCH(10) 检验

目的:剩余异方差的恩格尔检验

[h,pValue,stat,cValue] = archtest(res)

例子(ARCH的10怎么设定?未解决)

S&P500描述性统计表
S&P500
ARCH(10)219.4485***

了解更多archtest - Engle test for residual heteroscedasticity - MATLAB - MathWorks 中国

补充一些关于ARCH解释:

ARCH(Autoregressive Conditional Heteroskedasticity)模型的经济学含义是残差的平方会影响下一个时刻的波动性。在 ARCH 模型中,条件方差(波动性)是过去残差的平方的线性组合,这反映了过去的波动性对当前波动性的影响。即大的波动会导致下一个时刻的大的波动性。

这个模型表明,当前时刻的波动性受到过去 p 个时刻残差的平方的影响。如果 αi 的值是正的,那么过去的大残差会对当前的波动性产生积极的影响,即大的残差会导致较大的条件方差,那么当序列中出现一个较大的残差时,它将对未来的波动性产生积极的影响,即波动性会聚集。具体而言,如果在某一时刻 t 发生了极端事件,即 ϵt 较大,那么对应的 ϵt2 项将在条件方差 σt2 中占据主导地位,导致 σt2 增加。这就是波动性聚集的一种形式,即大的波动性往往伴随着大的波动性,反之亦然。反之,如果 αi 的值是负的,那么大的残差会对当前的波动性产生负面影响。

这种模型结构使得 ARCH 模型能够更灵活地捕捉时间序列中波动性的动态变化。在金融领域,ARCH 模型经常被用于描述股票收益率或其他金融时间序列中波动性的变化,因为这些数据通常表现出波动性聚集(volatility clustering)的特征,即大波动性往往伴随着大波动性,小波动性伴随着小波动性。ARCH 模型的引入使得我们能够在建模中考虑这种波动性的非常规模式。

总的来说,ARCH 模型通过考虑残差的平方对波动性的影响,能够解释观测序列中波动性的非常规模式,包括波动性聚集现象。

(文字来源)一文说清时间序列ARCH模型的原理、构建、参数估计并且解释为什么ARCH模型能够用来解释股市波动性聚集现象 - 知乎

3.4 matlab进行KPSS 检验

KPSS(Kwiatkowski-Phillips-Schmidt-Shin)test 为了稳定性检验。

[h,pValue,stat,cValue] = kpsstest(x)

例子

命令行窗口

clear
load returns
[h,pValue,stat,cValue] = kpsstest(returns)

S&P500描述性统计表
S&P500
KPSS0.0766

不知道为什么和图中的结果不一样,而且不能拒绝原假设。

Function描述
kruskalwallis测试多个样本是否都来自同一人群(或等效地,来自具有相同分布的不同人群),而不是都来自同一群人。

解释来自:Available Hypothesis Tests - MATLAB & Simulink - MathWorks 中国

3.5 matlab进行ADF 检验

ADF(Augmented Dickey-Fuller)对输入单变量时间序列中的单位根进行增强Dickey-Fuller检验,返回拒绝决定。

目的:稳定性检验

返回值:值1表示拒绝单位根零模型,支持替代模型。值0表示无法拒绝单位根空模型。

[h,pValue,stat,cValue] = adftest(x)


alpha默认:0.05

例子

命令行窗口

clear
load returns
[h,pValue,stat,cValue] = adftest(returns)

S&P500描述性统计表
S&P500
ADF-76.2071***

了解更多:adftest - Augmented Dickey-Fuller test - MATLAB - MathWorks 中国

【课程简介】 本课程适合所有对金融知识和MATLAB感兴趣的同学,通过本课程,你不仅可以学习到如何应用MATLAB,还可以学习到如何使用MATLAB进行金融数据处理与金融数据分析 【完整课程列表】 基于MATLAB金融数据分析 金融MATLAB-第01,02章 金融市场与金融产品 MATLAB基础知识(共47页).ppt 基于MATLAB金融数据分析 金融MATLAB-第03章 MATLAB与Excel文件的数据交换(共41页).ppt 基于MATLAB金融数据分析 金融MATLAB-第05章 贷款按揭与保险产品 现金流分析案例(共44页).ppt 基于MATLAB金融数据分析 金融MATLAB-第06章 随机模拟 概率分布与随机数(共33页).ppt 基于MATLAB金融数据分析 金融MATLAB-第07章 cftool数据拟合 GDP与用电量增速分析(共22页).ppt 基于MATLAB金融数据分析 金融MATLAB-第08章 策略模拟 组合保险策略分析(共32页).ppt 基于MATLAB金融数据分析 金融MATLAB-第09章 KMV模型求解 方程与方程组的数值解(共31页).ppt 基于MATLAB金融数据分析 金融MATLAB-第10章 期权定价模型与数值方法(共23页).ppt 基于MATLAB金融数据分析 金融MATLAB-第12章 马克维兹均值 方差模型(共19页).ppt 基于MATLAB金融数据分析 金融MATLAB-第13章 投资组合绩效(共22页).ppt 基于MATLAB金融数据分析 金融MATLAB-第17章 固定收益证券的久期与凸度(共12页).ppt 基于MATLAB金融数据分析 金融MATLAB-第18章 利率的期限结构(共7页).ppt 基于MATLAB金融数据分析 金融MATLAB-第22章 技术分析 指标计算与绘图(共8页).ppt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值