我有一个简单的问题,非常感谢任何人的建议。
我正在研究投资组合分析问题,并创建了一个时间序列对象,其中包含100只股票的日收益数据。我正在尝试创建100个具有 k 个股票数量的投资组合(即,投资组合1仅包括股票1,投资组合2包括股票1和2,投资组合3包括股票1、2和3,依此类推) 。我的想法是使用cbind编写一个for循环来定义每个投资组合(由于每一列代表一只股票,我们可以将这些列分组以创建一个新对象,其中包括该投资组合中每只股票的收益数据)。不幸的是,我的代码无法正常工作,对于任何人在纠正我的代码或提出更好的方法来实现相同结果方面的帮助,我将深表感谢。
这是我一直在尝试的代码:
port1 <- returns$X1 #defines the first portfolio, which only includes data from the first column (stock 1)
for(i in 2:100)
{port[i] <- cbind(port[i-1],returns$Xi)}
请在下面找到我的初始代码:
prices <- read.csv("ass2data.csv") #import data
prices$Date <- as.Date(prices$Date, format("%d/%m/%Y"))
prices <- prices[order(prices$Date), ]
prices <- as.xts(prices[, 2:101], order.by = prices$Date) #transform data table into time series in order to conduct returns analysis
returns <- Return.calculate(prices) #create variable returns
returns <- returns[-1, ] #remove the first row of returns (which are NA)
colnames(returns) <- paste0("X", 1:100) #update column names
这是前五只股票的收益数据的快照:
> head(returns)
X1 X2 X3 X4 X5
2014-01-02 0.003270007 0.003266847 0.002258356 0.002421568 0.003186671
2014-01-03 -0.018734046 -0.019517029 -0.021293375 -0.016185312 -0.018242174
2014-01-06 -0.001660788 -0.002475299 -0.003453436 -0.014787330 -0.002424078
2014-01-07 0.009156889 -0.001674973 -0.006930807 -0.013347733 -0.002429969
2014-01-08 0.002465390 0.006669705 -0.002210073 0.004210054 0.004871776
2014-01-09 -0.013155214 -0.006625514 -0.003497319 -0.004192403 -0.008884820
这是第三个投资组合的结果示例:
X1 X2 X3
2014-01-02 0.003270007 0.003266847 0.002258356
2014-01-03 -0.018734046 -0.019517029 -0.021293375
2014-01-06 -0.001660788 -0.002475299 -0.003453436
2014-01-07 0.009156889 -0.001674973 -0.006930807
2014-01-08 0.002465390 0.006669705 -0.002210073
2014-01-09 -0.013155214 -0.006625514 -0.003497319
谢谢!