如何将 tibble 中的每一行与矩阵相乘以获得标准偏差?
How to multiply each row in a tibble with a matrix to get standard deviation?
我有一个标题和一个矩阵。 tibble 包含一个随机权重在 0 到 1 之间的大型数据集。这里只是原始数据集的一小部分(原始数据集有 15.000 行)随机数:
library(tidyquant)
library(tidyverse)
weights_ptf <- tibble(a = runif(10, min=0, max=1), b = runif(10, min=0, max=1),
c = runif(10, min=0, max=1), d = runif(10, min=0, max=1), e = runif(10, min=0, max=1))
矩阵是协方差矩阵。为了简化,矩阵在这种情况下看起来像:
CovMat <- matrix(
c(runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002),
runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002)),
nrow=5,
ncol=5)
colnames(CovMat) <- (c("a", "b", "c", "d", "e"))
rownames(CovMat) <- (c("a", "b", "c", "d", "e"))
我想根据公式 sqrt(t(wts) %*% (CovMat %*% wts))
计算 weights_ptf
中每一行的标准差。 wts
在这种情况下将是 weights_ptf
.
中的每一行
我希望我的问题很清楚。任何帮助将不胜感激。
提前致谢!
for set.seed(2L)
用于创建数据
apply(weights_ptf, 1, function(x) sqrt(t(x) %*% (CovMat %*% x)))
# [1] 0.02935053 0.02150601 0.03854272 0.01795160 0.03706881 0.04465907 0.03659552 0.02438940 0.03720857 0.01956361
我有一个标题和一个矩阵。 tibble 包含一个随机权重在 0 到 1 之间的大型数据集。这里只是原始数据集的一小部分(原始数据集有 15.000 行)随机数:
library(tidyquant)
library(tidyverse)
weights_ptf <- tibble(a = runif(10, min=0, max=1), b = runif(10, min=0, max=1),
c = runif(10, min=0, max=1), d = runif(10, min=0, max=1), e = runif(10, min=0, max=1))
矩阵是协方差矩阵。为了简化,矩阵在这种情况下看起来像:
CovMat <- matrix(
c(runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002),
runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002), runif(5, min=0.0001, max=0.0002)),
nrow=5,
ncol=5)
colnames(CovMat) <- (c("a", "b", "c", "d", "e"))
rownames(CovMat) <- (c("a", "b", "c", "d", "e"))
我想根据公式 sqrt(t(wts) %*% (CovMat %*% wts))
计算 weights_ptf
中每一行的标准差。 wts
在这种情况下将是 weights_ptf
.
我希望我的问题很清楚。任何帮助将不胜感激。
提前致谢!
for set.seed(2L)
用于创建数据
apply(weights_ptf, 1, function(x) sqrt(t(x) %*% (CovMat %*% x)))
# [1] 0.02935053 0.02150601 0.03854272 0.01795160 0.03706881 0.04465907 0.03659552 0.02438940 0.03720857 0.01956361