我已经编写了一些代码来演示在计划投资组合时使多种资产多样化的好处。
#Portfolio variance
y <- function(x) {
vars <- rnorm(n = x, mean = 0.7, sd = 0.07)
# rho generating function:
ranrho <- function(z) {
c(rep(0, times = z), runif(n = x-z, min = -1, max = 0.9)) + 0.1
}
#you get the lower diagonal of the covar matrix:
rhold <- sapply(1:x, ranrho)
rhold
#and the full corr matrix
corr <- rhold + t(rhold)
corr <- corr * sqrt(vars)
corr <- t(t(corr) * sqrt(vars))
#And the variance-covariance matrix:
vcov <- corr + if(x==1) {vars
} else {diag(vars)}
#And recover the portfolio variance through the following equation
portvar <- (1/x^2)*sum(vars) + if(x==1) { as.numeric(0)
} else {(1/x^2)*(sum(corr)/2)}
return(portvar)
}
y(1)
y(5)
y(10)
y(20)
y(50)
y(100)
plot(1:100, y(1:100))
对于每个输入的x值,y返回一个值。 x是代表资产数量的整数,y是投资组合的结果方差。我有一些示例,说明了x的不同值,每个示例都为y返回了一个合理的值,而没有任何问题。
我的问题是,尝试绘制函数时出现以下错误:
rhold + t(rhold)中的错误:不一致的数组 另外:警告消息: 在1:x中:数值表达式包含100个元素:仅第一个使用
首先,由于代码在我编写y([whatever])时起作用,因此rhold和t(rhold)显然是一致的。我不确定第二个错误是什么意思。我使用的绘图功能不正确吗?
另一个问题-我已经看过,但似乎找不到找到如何绘制仅在其域中接受x的整数值,但在连续实线上返回y值的函数的图。
感谢您的帮助。
答案 0 :(得分:0)
代码的问题是您的函数需要一个数字,并且您正在使用100
只需使用lappy:
#Portfolio variance
y <- function(x) {
vars <- rnorm(n = x, mean = 0.7, sd = 0.07)
# rho generating function:
ranrho <- function(z) {
c(rep(0, times = z), runif(n = x-z, min = -1, max = 0.9)) + 0.1
}
#you get the lower diagonal of the covar matrix:
rhold <- sapply(1:x, ranrho)
rhold
#and the full corr matrix
corr <- rhold + t(rhold)
corr <- corr * sqrt(vars)
corr <- t(t(corr) * sqrt(vars))
#And the variance-covariance matrix:
vcov <- corr + if(x==1) {vars
} else {diag(vars)}
#And recover the portfolio variance through the following equation
portvar <- (1/x^2)*sum(vars) + if(x==1) { as.numeric(0)
} else {(1/x^2)*(sum(corr)/2)}
return(portvar)
}
y(1)
y(5)
y(10)
y(20)
y(50)
y(100)
plot(1:100,lapply(1:100,y))