簡體   English   中英

R中的嵌套For循環

[英]Nested For loop in R

這只是一個簡單的問題,但確實讓我花了很多時間成為R的新手。

我正在嘗試為投資組合的方差編寫代碼。

在此處輸入圖片說明

例如,我有以下內容:

weight=c(0.3,0.2,0.5)
cov  = matrix( c(0.2, 0.4, 0.3, 0.4, 0.5, 0.3,0.3,0.3,0.4),nrow=3, ncol=3, byrow = TRUE)

for (i in 1:3){
for (j in 1:3) {
port = sum((weight[i]^2) * (cov[i,i]^2)) + sum(weight[i] *weight[j]* cov[i,j]) }}

如果我手動計算,答案應該是0.336 但是R給了我port=0.12這是錯誤的。 我的錯誤在哪里?

首先計算矩陣乘積w %*% t(w)

tcrossprod(weight)
#     [,1] [,2] [,3]
#[1,] 0.09 0.06 0.15
#[2,] 0.06 0.04 0.10
#[3,] 0.15 0.10 0.25

然后將其與方差-協方差矩陣相乘,得出所有元素的總和:

sum(tcrossprod(weight) * cov)
#[1] 0.336

或作為循環(效率低下):

port <- 0
for (i in 1:3){
  for (j in 1:3) {
    port  <- if (i == j) {
      port + sum((weight[i]^2) * (cov[i,i]))
    } else {
      port + sum(weight[i] *weight[j]* cov[i,j])
    } 
  }
}
port
#[1] 0.336

注意,方差-協方差矩陣通常包含對角線上的方差(sigma_i ^ 2)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM