Parece que el paquete tempdisagg no permite la desagregación mensual a diaria. Del td()
archivo de ayuda 'a' argumento:
frecuencia de destino de alta frecuencia como una cadena de caracteres ("trimestral" o "mensual") o como un escalar (por ejemplo, 2, 4, 7, 12). Si las series de entrada son objetos ts, el argumento es necesario si no se proporciona ningún indicador. Si las series de entrada son vectores, debe ser un escalar que indique la relación de frecuencia.
Su mensaje de error "argumento 'a': cadena de caracteres desconocida" se debe a que el to =
argumento solo acepta 'trimestralmente' o 'mensual' como cadenas.
Aquí hay una discusión sobre la desagregación de datos mensuales en el stackstack de estadísticas aquí: /stats/258810/disaggregate-monthly-forecasts-into-daily-data
Después de algunas búsquedas, parece que nadie usa constantemente datos desagregados mensualmente a diario. El tempdisagg
paquete parece ser capaz de lo que la mayoría de los demás han descubierto que es posible: anual a trimestral o mensual, y períodos de tiempo que son consistentes, incluso múltiples.
Eric, he agregado un script a continuación que debería ilustrar lo que estás tratando de hacer, tal como lo entiendo.
Aquí usamos datos de precios reales para pasar de los precios diarios -> precios mensuales -> retornos mensuales -> retornos diarios promedio.
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))
Aquí hay tres cuadros que muestran 1. retornos mensuales solamente, 2. promedio diario de retornos mensuales, 3. ambos juntos. Como son idénticos, el trazado excesivo en la tercera imagen muestra solo uno.



dput(head(x))
odata.frame(...)
) directamente. ¡Gracias!dput(ts(head(1:50)))
, entonces consigostructure(1:6, .Tsp = c(1, 6, 1), class = "ts")
. Su imagen sugiere que sudat
es una serie temporal, pero suc(...)
no. ¿Son esos dosdat
s iguales?tempdisagg.pdf
, no puedo encontrar"daily"
ningún lugar, yto=
dice que admite "frecuencia de destino de alta frecuencia como una cadena de caracteres (" trimestral "o" mensual ") o como un escalar (por ejemplo, 2, 4, 7, 12)" . ¿Dónde se sugiere queto="daily"
sea compatible? Se puede tratarto=1
? (Realmente no puedo ayudar mucho más allá de eso. No conozco bien el paquete, pensé que podría ayudar genéricamente.)