如何使用 returns 和 returns 的平方计算对数 return 序列的协方差矩阵

How to calculate the covariance matrix for the log return series, using both the returns and returns squared

下面提供了示例数据。

data <- data.frame(normal_return = c(0.02012, 0.03488, 0.00418, 0.01780, 0.00563, -0.00187),
                   log_return = c(0.01992, 0.03429, 0.00418, 0.01764, 0.00562, -0.00187))
               

如何使用 returns 和 returns 平方

计算对数 return 序列的协方差矩阵

这只是简单地使用 cov() 函数吗?

调用cov()是获取方差-协方差矩阵的合适方法。方差在对角线上,协方差由非对角线元素表示。

my_cov <- cov(data)
> my_cov
              normal_return   log_return
normal_return  0.0001808887 0.0001779709
log_return     0.0001779709 0.0001751051

如果你想得到sd,你应该使用这个矩阵对角线的平方根。

> sqrt(diag(my_cov))
normal_return    log_return 
   0.01344949    0.01323273

编辑

如果您还想在协方差矩阵中包含 normal_return 的平方,最简单的方法是创建一个包含这些值的新列。

# new column: square of normal_return
data$sq_return <- data$normal_return^2
my_cov <- cov(data)
> my_cov
              normal_return   log_return    sq_return
normal_return  1.808887e-04 0.0001779709 5.934746e-06
log_return     1.779709e-04 0.0001751051 5.828500e-06
sq_return      5.934746e-06 0.0000058285 2.170196e-07

如果您希望输出固定而不是 exponential/scientific 表示法,您可以 运行 options(scipen = 999).

最后一点,如果您想将协方差矩阵转换为相关矩阵,您可以调用 cov2cor() 函数并使用协方差矩阵作为其参数。

my_corr <- cov2cor(my_cov)
> my_corr
              normal_return log_return sq_return
normal_return     1.0000000  0.9999858 0.9472112
log_return        0.9999858  1.0000000 0.9454920
sq_return         0.9472112  0.9454920 1.0000000

## cov2cor() scales a covariance matrix by its diagonal
##           to become the correlation matrix.