J'ai une longue série chronologique de données quotidiennes et 101 colonnes. Chaque mois, je voudrais calculer le cov
de chacune des 100 premières colonnes avec la 101e colonne. Cela générerait une covariance mensuelle avec la 101ème colonne pour chacune des 100 colonnes en fonction des données quotidiennes. Il semble que aggregate
fait ce que je veux avec des fonctions qui prennent un seul vecteur, comme mean
, mais je ne peux pas le faire fonctionner avec cov
(ou prod
).Utilisez l'agrégat avec une fonction qui utilise des données provenant de deux colonnes (par exemple cov ou prod)
S'il vous plaît laissez-moi savoir si un dput
de quelques mois aiderait.
> library("zoo")
> data <- read.zoo("100Size-BM.csv", header=TRUE, sep=",", format="%Y%m%d")
> head(data[, c("R1", "R2", "R3", "R100", "Mkt.RF")])
R1 R2 R3 R100 Mkt.RF
1963-07-01 -0.00212 0.00398 -0.00472 -0.00362 -0.0066
1963-07-02 -0.00242 0.00678 0.00068 -0.00012 0.0078
1963-07-03 0.00528 0.01078 0.00598 0.00338 0.0063
1963-07-05 0.01738 -0.00932 -0.00072 -0.00012 0.0040
1963-07-08 0.01048 -0.01262 -0.01332 -0.01392 -0.0062
1963-07-09 -0.01052 0.01048 0.01738 0.01388 0.0045
mean
fonctionne très bien, et me donne les données mensuelles que je veux.
> mean.temp <- aggregate(data[, 1:100], as.yearmon, mean)
> head(mean.temp[, 1:3])
R1 R2 R3
Jul 1963 0.0003845455 7.545455e-05 0.0004300000
Aug 1963 -0.0006418182 2.412727e-03 0.0022263636
Sep 1963 0.0016250000 1.025000e-03 -0.0002600000
Oct 1963 -0.0007952174 2.226522e-03 0.0004873913
Nov 1963 0.0006555556 -5.211111e-03 -0.0013888889
Dec 1963 -0.0027066667 -1.249524e-03 -0.0005828571
Mais je ne peux pas obtenir une fonction qui utilise deux colonnes/vecteurs différents pour fonctionner.
> cov.temp <- aggregate(data[, 1:100], as.yearmon, cov(x, data[, "Mkt.RF"]))
Error in inherits(x, "data.frame") : object 'x' not found
Je ne peux pas le faire faire du travail une enveloppe cov
.
> f <- function(x) cov(x, data[, "Mkt.RF"])
> cov.temp <- aggregate(data[, 1:100], as.yearmon, f)
Error in cov(x, data[, "Mkt.RF"]) : incompatible dimensions
Devrais-je le faire avec une boucle for
? J'espère qu'il y a une manière plus R
. Merci!
Avez-vous regardé ddply à partir du paquet plyr? Je pense que la distribution de l'ensemble de remodelage pourrait bien fonctionner pour cela aussi. J'aurais besoin de quelques lignes de vos données pour l'essayer! –