J'ai des données de fréquence mensuelles que j'essaie de désagréger en données de fréquence quotidiennes. J'utilise donc la commande td
du package tempdisagg
dans R en utilisant le code ci-dessous:
dat=ts(data[,2])
result=td(dat~1, conversion = "average", to = "day", method = "chow-lin-maxlog")
Ensuite, j'obtiens le message d'erreur suivant:
Error in td(dat ~ 1, conversion = "average", to = "day", method = "chow-lin-maxlog") : 'to' argument: unknown character string
Les données que j'utilise pour dat
sont les suivantes:
> dput(head(dat))
c(82.47703009, 84.63094431, 70.00659987, 78.81135651, 74.749746,82.95638213)
Ainsi, bien que ces données dat
aient une fréquence mensuelle, le début et la fin ne le reflètent pas encore. En fait, la date de début est 1/1997 et la date de fin est 9/2019.
Puis-je obtenir de l'aide sur la ventilation de ces données mensuelles dat
en données de fréquence quotidiennes s'il vous plaît?
Il semble que le package tempdisagg ne permette pas une ventilation mensuelle à quotidienne. Depuis l'argument td()
du fichier d'aide 'to':
fréquence de destination haute fréquence sous forme de chaîne de caractères ("trimestrielle" ou "mensuelle") ou sous forme scalaire (par exemple 2, 4, 7, 12). Si les séries en entrée sont des objets ts, l'argument est nécessaire si aucun indicateur n'est donné. Si les séries d'entrée sont des vecteurs, to doit être un scalaire indiquant le rapport de fréquence.
Votre message d'erreur "argument" à ": chaîne de caractères inconnue" est dû au fait que le to =
l'argument n'accepte que "trimestriellement" ou "mensuellement" comme chaînes.
Il y a une discussion sur la ventilation des données mensuelles à quotidiennes sur les statistiques stackexchage ici: https://stats.stackexchange.com/questions/258810/disaggregate-monthly-forecasts-into-daily-data
Après quelques recherches, il semble que personne n'utilise systématiquement des données mensuelles à quotidiennes désagrégées. Le package tempdisagg
semble être capable de ce que la plupart des autres ont trouvé possible - annuel à trimestriel ou mensuel, et des périodes de temps cohérentes même multiples.
Eric, j'ai ajouté un script ci-dessous qui devrait illustrer ce que vous essayez de faire, si je comprends bien.
Ici, nous utilisons des données de tarification réelles pour passer des prix quotidiens -> prix mensuels -> rendements mensuels -> rendements quotidiens moyens.
library(quantmod)
library(xts)
library(Zoo)
library(tidyverse)
library(lubridate)
# Get price data to use as an example
getSymbols('MSFT')
#This data has more information than we want, remove unwanted columns:
msft <- Ad(MSFT)
#Add new column that acts as an 'indexed price' rather than
# actual price data. This is to show that calculated returns
# don't depend on real prices, data indexed to a value is fine.
msft$indexed <- scale(msft$MSFT.Adjusted, center = FALSE)
#split into two datasets
msft2 <- msft$indexed
msft$indexed <- NULL
#msft contains only closing data, msft2 only contains scaled data (not actual prices)
# move from daily data to monthly, to replicate the question's situation.
a <- monthlyReturn(msft)
b <- monthlyReturn(msft2)
#prove returns based on rescaled(indexed) data and price data is the same:
all.equal(a,b)
# subset to a single year
a <- a['2019']
b <- b['2019']
#add column with days in each month
a$dim <- days_in_month(a)
a$day_avg <- a$monthly.returns / a$dim ## <- This must've been left out
day_avgs <- data.frame(day_avg = rep(a$day_avg, a$dim))
# daily averages timesereis from monthly returns.
z <- Zoo(day_avgs$day_avg,
seq(from = as.Date("2019-01-01"),
to = as.Date("2019-12-31"),
by = 1)) %>%
as.xts()
#chart showing they are the same:
PerformanceAnalytics::charts.PerformanceSummary(cbind(a$monthly.returns, z))
Voici trois graphiques montrant 1. les rendements mensuels seulement, 2. la moyenne quotidienne des rendements mensuels, 3. les deux ensemble. Comme ils sont identiques, le surplotage dans la troisième image n'en montre qu'une seule.