Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的相关矩阵级数_R_Dplyr_Correlation - Fatal编程技术网

R中的相关矩阵级数

R中的相关矩阵级数,r,dplyr,correlation,R,Dplyr,Correlation,鉴于以下婴儿片段: d1=as.Date('April 26, 2001',format='%B %d, %Y') d2=as.Date('April 27, 2001',format='%B %d, %Y') d3=as.Date('April 28, 2001',format='%B %d, %Y') tibble(DATE=c(d1,d1,d2,d2,d3,d3), Symbol=c("A","B","A","B","A","B"), voladj=c(0.2, 0.3, -0.2, -0

鉴于以下婴儿片段:

d1=as.Date('April 26, 2001',format='%B %d, %Y')
d2=as.Date('April 27, 2001',format='%B %d, %Y')
d3=as.Date('April 28, 2001',format='%B %d, %Y')
tibble(DATE=c(d1,d1,d2,d2,d3,d3), Symbol=c("A","B","A","B","A","B"), voladj=c(0.2, 0.3, -0.2, -0.1, 0.3, 0.2))
导致

# A tibble: 6 x 3
  DATE       Symbol voladj
  <date>     <chr>   <dbl>
1 2001-04-26 A         0.2
2 2001-04-26 B         0.3
3 2001-04-27 A        -0.2
4 2001-04-27 B        -0.1
5 2001-04-28 A         0.3
6 2001-04-28 B         0.2
等等。 显然更有趣的是,一旦涉及到更多的符号

更新了答案,给出了评论 下面是一种使用
quantmod
从雅虎财经检索5只股票三周的方法。我们将
xts
对象中的
Close
变量组合到一个数据帧中,使用
lubridate::week()
生成
week
标识符,
split()

原始答案 以下是一种使用
quantmod
从雅虎财经检索道琼斯30指数四天数据的方法,
apply()
do.call()
rbind()
将数据推送到单个数据帧中,以及
split()
按天分割以生成每日协方差矩阵

library(quantmod)
from.dat <- as.Date("12/02/19",format="%m/%d/%y")
to.dat <- as.Date("12/06/19",format="%m/%d/%y")

theSymbols <- c("AAPL","AXP","BA","CAT","CSCO","CVX","XOM","GS","HD","IBM",
                "INTC","JNJ","KO","JPM","MCD","MMM","MRK","MSFT","NKE","PFE","PG",
                "TRV","UNH","UTX","VZ","V","WBA","WMT","DIS","DOW")
getSymbols(theSymbols,from=from.dat,to=to.dat,src="yahoo")
# since quantmod::getSymbols() writes named xts objects, need to use
# get() with the symbol names to access each data frame
# e.g. head(get(theSymbols[[1]]))
# convert to list
symbolData <- lapply(theSymbols,function(x){
     y <- as.data.frame(get(x))
     colnames(y) <- c("open","high","low","close","volume","adjusted")
     # add date and symbol name to output data frames 
     y$date <- rownames(y)
     y$symbol <- x
     y
})
#combine to single data frame
combinedData <- do.call(rbind,symbolData)
# split by day
symbolsByDay <- split(combinedData,as.factor(combinedData$date))
covariances <- lapply(symbolsByDay,function(x){
     cov(x[,1:6]) # only use first 6 columns 
})
# print first covariance matrix
covariances[1]

你想生产什么产品?除了
voladj
,还有哪些数值变量进入协方差矩阵?我们试图计算每个符号经波动调整后的收益率的协方差。所以这里我期待一系列的2x2矩阵,你能包括你想要的输出吗?我不知道你在计算什么,也不知道你是如何分组的(按日期和符号?),谢谢。我们只需要收盘时的协方差矩阵,列和行将对应于符号如果每天每个符号有一个且只有一个数据元素,并且每个协方差矩阵表示一天,则没有足够的自由度来计算两个或多个股票符号之间的协方差。你能解释一下你打算如何解决自由度问题吗?一种方法是将每个矩阵中包含的时间段从一天增加到一周或一个月。感谢您的回复。根据您发布的样本数据,每个股票符号每天似乎只有一次观察。为了模拟t1-t\n,我将数据按周分割。另外,因为我们只对关闭数据感兴趣,所以我直接从从Yahoo Finance检索的
xts
对象创建组合数据框。@tschm感谢您的反馈。如上所述,每个子周期包括5只股票的5天,因此它符合您最近的要求中所述的要求。
M_1 =    A    B
      A  1.0  c1

      B  c1   1.0
library(quantmod)
from.dat <- as.Date("12/03/19",format="%m/%d/%y")
to.dat <- as.Date("12/24/19",format="%m/%d/%y")

theSymbols <- c("AAPL","AXP","BA","CAT","CSCO")
getSymbols(theSymbols,from=from.dat,to=to.dat,src="yahoo")

#combine to single data frame
combinedData <- data.frame(date = as.Date(rownames(as.data.frame(AAPL))),
                           AAPL$AAPL.Close,
                           AXP$AXP.Close,
                           BA$BA.Close,
                           CAT$CAT.Close,
                           CSCO$CSCO.Close)
colnames(combinedData) <- c("date","AAPL","AXP","BA","CAT","CSCO")
# split by week
library(lubridate)
combinedData$week <- week(combinedData$date)
symbolsByWeek <- split(combinedData,as.factor(combinedData$week))
covariances <- lapply(symbolsByWeek,function(x){
        cov(x[,-c(1,7)])
})
covariances[[1]] 
> covariances[[1]]
           AAPL        AXP         BA        CAT        CSCO
AAPL 19.4962156  7.0959976  3.9093027  5.4158116 -0.66194433
AXP   7.0959976  3.0026695  2.0175793  2.2569625 -0.18793832
BA    3.9093027  2.0175793 10.4511473  1.8555752  0.55619975
CAT   5.4158116  2.2569625  1.8555752  1.8335361 -0.11141911
CSCO -0.6619443 -0.1879383  0.5561997 -0.1114191  0.07287982
> 
library(quantmod)
from.dat <- as.Date("12/02/19",format="%m/%d/%y")
to.dat <- as.Date("12/06/19",format="%m/%d/%y")

theSymbols <- c("AAPL","AXP","BA","CAT","CSCO","CVX","XOM","GS","HD","IBM",
                "INTC","JNJ","KO","JPM","MCD","MMM","MRK","MSFT","NKE","PFE","PG",
                "TRV","UNH","UTX","VZ","V","WBA","WMT","DIS","DOW")
getSymbols(theSymbols,from=from.dat,to=to.dat,src="yahoo")
# since quantmod::getSymbols() writes named xts objects, need to use
# get() with the symbol names to access each data frame
# e.g. head(get(theSymbols[[1]]))
# convert to list
symbolData <- lapply(theSymbols,function(x){
     y <- as.data.frame(get(x))
     colnames(y) <- c("open","high","low","close","volume","adjusted")
     # add date and symbol name to output data frames 
     y$date <- rownames(y)
     y$symbol <- x
     y
})
#combine to single data frame
combinedData <- do.call(rbind,symbolData)
# split by day
symbolsByDay <- split(combinedData,as.factor(combinedData$date))
covariances <- lapply(symbolsByDay,function(x){
     cov(x[,1:6]) # only use first 6 columns 
})
# print first covariance matrix
covariances[1]
> covariances[1]
$`2019-12-02`
                  open          high           low         close        volume      adjusted
open          5956.289      5962.359      5811.514      5818.225 -9.274871e+07      5809.939
high          5962.359      5968.557      5817.580      5824.272 -9.314473e+07      5816.005
low           5811.514      5817.580      5671.809      5678.470 -9.188418e+07      5670.276
close         5818.225      5824.272      5678.470      5685.467 -9.155485e+07      5677.246
volume   -92748711.735 -93144729.578 -91884178.312 -91554853.356  4.365841e+13 -90986549.261
adjusted      5809.939      5816.005      5670.276      5677.246 -9.098655e+07      5669.171

>