Как умножить каждую строку в таблице с матрицей, чтобы получить стандартное отклонение? - PullRequest
1 голос
/ 07 апреля 2020

У меня есть один кусок и одна матрица. Таблица содержит большой набор случайных весов от 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"))

Я хотел бы рассчитать для каждой отдельной строки в weights_ptf стандартное отклонение по формуле: sqrt(t(wts) %*% (CovMat %*% wts)). wts в этом случае будет каждая строка в weights_ptf.

Я надеюсь, что моя проблема ясна. Любая помощь будет высоко ценится.

Заранее спасибо!

1 Ответ

1 голос
/ 07 апреля 2020

для 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
...