Доступ к подмножеству data.frame к определенным датам создает NA - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть data.frame, где каждый столбец содержит ежемесячные доходы по различным акциям с 2014 года, а первый столбец содержит дату наблюдения.Мне нужно получить доступ к доходам по этим акциям в определенные даты (например, 2018-01-31 или между 2014-02-03 и 2018-01-01), чтобы вычислить несколько статистических данных.Набор данных выглядит следующим образом:

       Date           aer  api            ar           ccj           cve          fcu
2014-02-20  0.1114229582 <NA>  0.0274509804  0.0458167331 -0.0684382963  0.245283019
2014-02-21  0.1486823856 <NA>  0.0364592781  0.0434139122 -0.0666423889  0.196261682
2014-02-24  0.1714285714 <NA>  0.0701561065  0.0552788845 -0.0488694384  0.284313725
2014-02-25  0.1584653878 <NA>  0.0585154416  0.1024531025 -0.0465631929  0.317307692

Когда я вычисляю ковариационную матрицу для возвратов по конкретным диапазонам дат, назначение работает правильно.Однако, когда я пытаюсь выполнить ту же самую операцию для одной конкретной даты, чтобы умножить эту строку возвратов на другой вектор, я получаю NA

library(timeSeries)
library(quantmod)
library(PerformanceAnalytics)
library(ggplot2)
library(caTools)
library(dplyr)
library(portfolio)
library(fBasics)
library(zoo)

data.returns$Date<-as.Date(data.returns$Date,format="%Y-%m-%d")
data.returns_m$Date<-as.Date(data.returns_m$Date,format="%Y-%m- 
%d")
# defining monthly dates to compute returns
date_enddec17<-as.Date("2017-12-29")
date_endjan18<-as.Date("2018-01-31")
date_endfeb18<-as.Date("2018-02-28")
date_endmar18<-as.Date("2018-03-29")
date_endapr18<-as.Date("2018-04-30")
date_endmay18<-as.Date("2018-05-31")
date_endjun18<-as.Date("2018-06-29")
date_endjul18<-as.Date("2018-07-31")
date_endaug18<-as.Date("2018-08-31")
date_endsep18<-as.Date("2018-09-28")
date_endoct18<-as.Date("2018-10-31")
date_endnov18<-as.Date("2018-11-30")
date_enddic18<-as.Date("2018-12-31")

date_list <- c(date_enddec17, date_endjan18, date_endfeb18, 
date_endmar18, date_endapr18, date_endmay18, date_endjun18, 
           date_endjul18, date_endaug18, date_endsep18, 
date_endoct18, date_endnov18, date_enddic18)

# initialising the lists for the statistics
Covariance <- list()
W_gmv <- list()
ret_m <- list()

# for loop to calculate the statistics for each date
local <- 0
for (i in date_list) {
  local <- local + 1
  Covariance[[local]] <- 
cov(na.omit(data.returns[data.returns$Date>=i-365*4 & 
data.returns$Date<=i,2:ncol(data.returns)]))
      W_gmv[[local]<-  (solve(Covariance[[local]])%*%e)%*%solve(t(e)%*%solve(Covariance[[local]])%*%e)

      ret_m[[local]] <- 1 + t(as.matrix(as.numeric(data.returns_m[data.returns_m$Date==i+30,-1]))) %*%W_gmv[[local]]

}

Я ожидал получить список (ret_m) с 13 числами,каждый из них представляет ежемесячный доход на эту конкретную дату, вместо этого я получил список из 13 НС.Удивительно, но этого не произошло с вычислением ковариации (первая команда в цикле), которая работала совершенно нормально.

1 Ответ

0 голосов
/ 25 февраля 2019

Если вы просто хотите получать ежемесячные возвраты, пробовали ли вы использовать quantmod :: monthReturn ()?

Если ваши данные находятся в кадре данных, вам, возможно, потребуется сначала преобразовать их в объект xts.Пакет timekt полезен для преобразования из фреймов данных в объекты xts или наоборот.Попробуйте это:

library(timekt)
my_xts <- timekt::tk_xts(my_dataframe)
quantmod::monthlyReturn(my_xts$ar)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...