R统计实践—经济结构变动分析与检验

# 引言
近一年多以来,大盘蓝筹股多呈现震荡上涨的走势,部分小盘股持续下跌,沪指和其他指数波动尤为明显。本文以沪指和创业板指日收益率变化进行分析,使用数据试图分析:2023年与2022年相比,沪指与创业板指的日百分比收益率之间的关系是否发生发生显著变化,在哪些方面存在显著差异。
本文使用Rmarkdown语法书写,复制文本内容粘贴至Rmarkdown即可生成带有代码段、运算、绘图结果的word/pdf/html文档。
# 思路
1.对2022年和2023年沪指与创业板指的日百分比收益率分别进行回归分析,观察二者相关性、相关系数的变化。
2.计算每一交易日二者收益率之差,分析2022年收益率之差 与
2023年收益率之差在统计上是否差异显著。
3.经济结构变动检验。
# 分析过程
## 获取数据
```{r message=FALSE, warning=FALSE}
#所需R包
library(pedquant) #数据获取包
library(tidyverse) #数据分析包
library(ggpmisc) #绘图包
library(tseries) #统计检验包
library(strucchange) #统计检验包
```
```{r}
zs <- md_stock(symbol = c('000001.ss','399006.sz'),
from = '2022-01-01',to = Sys.Date())
hz <- zs[[1]]
cyb <- zs[[2]]
df <- rbind(hz,cyb) %>% as_tibble()
```
## 数据预览
```{r}
# 前五行数据
head(df %>% select(1:3,7,8))
```
```{r}
# 最后五行数据
tail(df %>% select(1:3,7,8))
```
```{r}
ggplot(df)+geom_line(aes(x=date,y=close,color=symbol))
```

## 绘制指数日百分比收益图
```{r}
ggplot(df)+geom_line(aes(x=date,y=change_pct,color=symbol))
```

## 日百分比收益平稳性检验
```{r}
adf.test(hz$change_pct)
adf.test(cyb$change_pct)
```
数据显示二者日百分比收益率均为平稳时间序列。
# 回归分析
## 2022年日百分比收益回归分析
```{r}
t22 <- tibble(
date = hz %>% filter(date < "2023-01-01" & date > "2022-06-01") %>% .$date,
hz_pct = hz %>% filter(date < "2023-01-01" & date > "2022-06-01") %>% .$change_pct,
cyb_pct = cyb %>% filter(date < "2023-01-01" & date > "2022-06-01") %>% .$change_pct
)
p22 <- ggplot(data = t22, mapping = aes(x = cyb_pct, y = hz_pct)) +
geom_point(color = "blue") +
geom_smooth(method = "lm", se = FALSE,
color = "black", formula = y ~ x) +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label..,
..rr.label.., sep = "~~~")), parse = TRUE) +
ggtitle("2022 hz(y) return ~ cyb(x) return")
p22
```

回归结果与上图标注相同。
```{r}
m22 <- lm(formula = hz_pct ~ cyb_pct, data = t22)
summary(m22)
```
## 2023年日百分比收益回归分析
```{r}
t23 <- tibble(
date = hz %>% filter(date > "2023-01-01") %>% .$date,
hz_pct = hz %>% filter(date > "2023-01-01") %>% .$change_pct,
cyb_pct = cyb %>% filter(date > "2023-01-01") %>% .$change_pct
)
p23 <- ggplot(data = t23, mapping = aes(x = cyb_pct, y = hz_pct)) +
geom_point(color = "blue") +
geom_smooth(method = "lm", se = FALSE,
color = "black", formula = y ~ x ) +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label..,
..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("2023 hz(y) return ~ cyb(x) return")
p23
```

回归结果与上图标注相同。
```{r}
m23 <- lm(formula = hz_pct ~ cyb_pct, data = t23)
summary(m23)
```
结果显示2022年下半年与2023年上半年,沪指与创业板指日收益率相关系数存在变化。
# 日收益率差异分析
定于一个新变量:日收益率差异=某交易日沪指百分比收益率-当日创业板指百分比收益率
## 日收益率差异的方差分析
```{r}
d23 <- mutate(t23, d2023 = hz_pct - cyb_pct)
d22 <- mutate(t22, d2022 = hz_pct - cyb_pct)
var.test(d23$d2023, d22$d2022)
```
数据显示2022年下半年和2023年上半年,两个指数日收益率的差异的方差存在显著变化。
## 日收益率差异的均值比较
```{r}
t.test(d23$d2023, d22$d2022, var.equal = F)
```
数据显示2022年下半年和2023年上半年,两个指数日收益率的差异的均值无显著差异。即:2022下半年两个指数每天的涨跌幅的偏差的均值
与 2023年上半年两个指数的偏差的均值 在统计上无显著变化。
# 经济结构变动检验
上述分析及检验方法只是粗浅的认识,统计学中有针对于经济结构变动的检验方法,最具代表性的是以经济学家邹至庄命名的"邹检验法"。
其基本逻辑如下:
如果存在结构变动点,例如在t时刻前后结构不同:
1.对整个时间段进行回归,计算残差平方和,记为x;
2.对【开始-t】区间进行回归,计算残差平方和x1;
3.对【t-结束】区间进行回归,计算残差平方和x2;
4.原假设H0:结构无变化,则:x-(x1+x2) 的值应该比较小。
5.构造统计量,检验上述值是否比较小。理论上构造的是F统计量。
F=【(x-(x1+x2))/回归方程解释变量个数】/【(x1+x2)/(样本量-回归方程解释变量个数\*2】
示意图

在左图中,结构无变化,数据点到整段直线 与 到分段直线的距离之和 差别不大;
在右图中,结构发生变化,数据点到分段直线的距离之和 显著变小了。也说明用分段来回归,更准确。
```{r}
# 整理检验数据
tbb <- tibble(
date = hz %>% filter(date > "2022-06-01") %>% .$date,
hz_pct = hz %>% filter(date > "2022-06-01") %>% .$change_pct,
cyb_pct = cyb %>% filter(date > "2022-06-01") %>% .$change_pct
)
# 检验过程及结果
sctest(hz_pct ~ cyb_pct, data = tbb,
type = "Chow", point = 146)
#Chow 代表用邹检验法
#146指数据集中第146个数据点(即2023首个交易日20230103)
```
结果表明,无法拒绝原假设。
上述使用传统的邹检验法,指明了结构变动点。如果结构变动点未知,通过序列遍历的方式寻找结构变动点。
```{r}
sctest(hz_pct ~ cyb_pct, data = tbb,
from = 0.15,to = 0.85,type = "expF")
# 只对序列的中间15%-85%的数据进行遍历查找变动点
```
结果表明,无法拒绝原假设。
# 结论
1.在2022年下半年与2023年上半年两个时间段里,沪指和创业板指走势图存在差异;
2.两个指数日百分比收益率存在显著的相关关系;
3.相关关系在这两个时间段发生了变化;
4.二者日百分比收益率差异的方差在两个时间段显著不同;
5.二者日百分比收益率差异的均值在两个时间段无显著差异;
6.二者日百分比收益率相关性在两个时间段没有显著的结构变动。
# 备注
本文的数据获取、数据清晰、探索性分析、建模、假设检验全过程均使用的R脚本,数据由R自动获取,无需依赖本地数据。
复制本文代码块至R脚本中即可得出相应结果或绘图。
本文是由Rmarkdown自动编译生成。