R语言下DAX收益率常数分位数回归的代码问题排查
代码问题排查与常数分位数回归正确实现
代码中的问题点
- 拼写错误:
ggplo是ggplot的拼写错误,导致代码中断 - 变量提前引用:在定义
dax1前就调用dax1$Rendite,会触发"对象'dax1'未找到"的错误 - 冗余代码:多次重复加载
quantreg包、创建未使用的变量K - 缺失值未处理:
data_DAX$Rendite第一行为NA,后续分析未过滤可能影响结果 - 偏离任务目标:部分代码使用
dax1$Rendite ~ dax1$Kurs引入自变量,不符合"基于常数的分位数回归"(仅截距项的回归:y ~ 1)的要求 - 无意义的绘图标签:
xlab = "xx"未提供有效信息
基于常数的分位数回归正确实现步骤
1. 环境初始化与数据读取
# 清理环境 rm(list=ls()) # 设置工作目录(仅RStudio环境有效) setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) # 加载数据读取包 library(readr) # 读取DAX数据,确认文件路径与格式匹配 data_DAX <- read_delim("DAX-Performenceindex Kopie 2.csv", delim = ";", escape_double = FALSE, col_types = cols(Monat = col_date(format = "%Y-%m"), Kurs = col_double(), ...3 = col_skip()), na = "null", comment = "#", trim_ws = TRUE)
2. 计算连续收益率并处理缺失值
# 计算对数差分形式的连续月度收益率 data_DAX$Rendite <- c(NA, diff(log(data_DAX$Kurs))) # 过滤含NA的行(第一行无收益率数据) data_DAX_clean <- na.omit(data_DAX)
3. 探索性数据分析(可选)
# 查看数据结构 str(data_DAX_clean) # 收益率描述统计 summary(data_DAX_clean$Rendite) # 收益率分布可视化 hist(data_DAX_clean$Rendite, main="DAX月度收益率分布", xlab="收益率") boxplot(data_DAX_clean$Rendite, main="DAX月度收益率箱线图") # QQ图检验正态性 qqnorm(data_DAX_clean$Rendite, main="QQ图:DAX收益率 vs 正态分布", datax=TRUE) qqline(data_DAX_clean$Rendite, datax=TRUE)
4. 拟合基于常数的分位数回归
基于常数的分位数回归核心是仅用截距项估计指定分位数下的收益率,公式为Rendite ~ 1。
# 加载分位数回归包 library(quantreg) # 拟合单个分位数(以中位数tau=0.5为例) qr_median <- rq(Rendite ~ 1, tau=0.5, data=data_DAX_clean) # 查看带标准误的结果 summary(qr_median, se="nid") # 拟合多个分位数(0.05到0.95,步长0.05) qr_multi <- rq(Rendite ~ 1, tau=seq(0.05, 0.95, by=0.05), data=data_DAX_clean) # 查看多分位数回归结果 summary(qr_multi)
5. 结果解读
- 单个分位数回归中,
(Intercept)对应的数值就是该分位下的收益率估计值 - 多分位数回归可展示不同分位的收益率变化,对比0.05、0.95等极端分位能直观看到收益率的尾部特征
6. 可视化分位数回归结果
# 可视化中位数回归线 plot(data_DAX_clean$Monat, data_DAX_clean$Rendite, xlab="年份", ylab="月度收益率", main="DAX月度收益率与中位数回归线") abline(h=qr_median$coef, col="red", lty=2, lwd=2) # 可视化多分位数回归系数变化 plot(summary(qr_multi), main="DAX收益率分位数回归系数(仅截距项)", xlab="分位数tau", ylab="收益率估计值")
7. 分段分析(以2008-2012年为例)
# 筛选2008-2012年数据 dax_subset <- subset(data_DAX_clean, Monat >= as.Date("2008-01-01") & Monat <= as.Date("2012-12-01")) # 拟合该时间段的中位数分位数回归 qr_subset_median <- rq(Rendite ~ 1, tau=0.5, data=dax_subset) # 查看结果 summary(qr_subset_median, se="nid") # 可视化分段数据与回归线 plot(dax_subset$Monat, dax_subset$Rendite, xlab="年份", ylab="月度收益率", main="2008-2012年DAX收益率与中位数回归线") abline(h=qr_subset_median$coef, col="blue", lty=2, lwd=2)
内容的提问来源于stack exchange,提问作者Tolga T.
相关产品推荐
相关产品推荐

