You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言Form_CharSizePorts2函数输出获取与可视化方法咨询

Form_CharSizePorts2函数输出获取与可视化方法

获取函数输出

这个函数的作用是基于NYSE股票的分位数断点,按50%规模分位、30%/70%目标特征分位构建2×3共6个投资组合,输出各期组合收益以及SMB、HML类因子收益,直接按要求传入参数调用即可拿到输出。
入参要求:

  • main:股票面板原始数据集,必须包含Date(期数/交易日期)、PERMNO(股票唯一ID)、exchcd(交易所代码,值为1代表NYSE),以及后续指定的规模、特征、权重、收益字段
  • size:代表公司规模的字段(如流通市值)
  • var:用于分组的目标特征字段(如账市比、动量等)
  • wght:计算组合加权收益的权重字段(通常用流通市值做市值加权)
  • ret:个股收益率字段

调用前先加载依赖包,再传入对应参数即可:

# 加载依赖
library(dplyr)
library(tidyr)

# 示例调用:假设原始数据集名为stock_data,规模字段为mktcap,特征字段为bm,权重为mktcap,收益字段为ret
port_result <- Form_CharSizePorts2(
  main = stock_data,
  size = mktcap,
  var = bm,
  wght = mktcap,
  ret = ret
)

调用完成后,port_result就是函数的输出结果,是按日期存储的数据框,包含:

  • 6个基础组合的每期收益:Small.Low、Small.Neutral、Small.High、Big.Low、Big.Neutral、Big.High
  • 规模分组合成收益:Small(小市值组合平均)、Big(大市值组合平均)、SMB(小市值减大市值的规模因子)
  • 特征分组合成收益:High(高特征组合平均)、Low(低特征组合平均)、HML(高特征减低特征的特征因子)

排错提示:如果调用报错,优先检查原始数据是否缺失必填字段、NYSE样本(exchcd==1)是否存在、分组字段是否存在大量缺失值导致分位数计算失败。如果函数本身的returnValue报错,把函数最后一行替换为return(Ret)即可。

常用可视化实现

拿到输出结果后,可以根据分析需求做不同类型的可视化,以下是最常用的两种方案,需要先加载ggplot2包:

library(ggplot2)

1. 因子累计收益时序图

用于观察SMB、HML因子的长期收益走势:

# 计算累计净值
cum_ret_data <- port_result %>%
  arrange(Date) %>%
  # 注意:如果你的收益率是小数格式(如0.01代表1%),去掉下面代码里的/100
  mutate(
    SMB = cumprod(1 + SMB/100) - 1,
    HML = cumprod(1 + HML/100) - 1
  ) %>%
  select(Date, SMB, HML) %>%
  pivot_longer(cols = -Date, names_to = "因子", values_to = "累计收益率")

# 绘图
ggplot(cum_ret_data, aes(x = Date, y = 累计收益率, color = 因子)) +
  geom_line(linewidth = 0.8) +
  scale_y_continuous(labels = scales::percent) +
  labs(title = "SMB与HML因子累计收益走势") +
  theme_minimal()

2. 6个基础组合平均收益对比图

用于对比不同规模-特征分组的收益差异:

# 计算各组合全样本平均收益
mean_ret_data <- port_result %>%
  select(Small.Low, Small.Neutral, Small.High, Big.Low, Big.Neutral, Big.High) %>%
  summarise(across(everything(), ~mean(., na.rm = TRUE))) %>%
  pivot_longer(everything(), names_to = "组合", values_to = "平均期收益率")

# 绘图
ggplot(mean_ret_data, aes(x = 组合, y = 平均期收益率, fill = 组合)) +
  geom_col() +
  scale_y_continuous(labels = scales::percent) +
  labs(title = "2×3分组组合平均收益率对比", x = "组合(规模.特征分组)") +
  theme_minimal() +
  theme(legend.position = "none", axis.text.x = element_text(angle = 30, hjust = 1))

如果需要观察分组断点的变化,可以在函数中额外返回Bkpts.NYSE数据集,对每期的规模中位数、特征30%/70%分位值做时序图即可。


内容的提问来源于stack exchange,提问作者35mmongol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:39:14