J'ai une série chronologique x_0 ... x_t
. Je voudrais calculer la variance pondérée de manière exponentielle des données. C'est:
V = SUM{w_i*(x_i - x_bar)^2, i=1 to T} where SUM{w_i} = 1 and x_bar=SUM{w_i*x_i}
ref: http://en.wikipedia.org/wiki/Weighted_mean#Weighted_sample_variance
Le but est essentiellement de peser moins d’observations dans le temps. C’est très simple à mettre en oeuvre, mais j’aimerais utiliser le plus possible la fonctionnalité intégrée. Est-ce que quelqu'un sait à quoi cela correspond dans R?
Merci
R fournit la moyenne pondérée. En fait,? Weighted.mean montre cet exemple:
## GPA from Siegel 1994
wt <- c(5, 5, 4, 1)/15
x <- c(3.7,3.3,3.5,2.8)
xm <- weighted.mean(x, wt)
Un pas de plus:
v <- sum(wt * (x - xm)^2)
Le paquet Hmisc contient les fonctions dont vous avez besoin.
Ainsi:
x <- c(3.7,3.3,3.5,2.8)
wt <- c(5, 5, 4, 1)/15
xm <- wtd.mean(x, wt)
var <- wtd.var(x, wt)
sd <- sqrt(var)
Malheureusement, l'auteur du paquet Hmisc n'inclut pas de fonction explicite wtd.sd
. Vous devez racine carrée wtd.var.
Charles Kangai
Je reçois aussi des erreurs de Hmisc
lors de l'utilisation de la fonction wtd.var()
. Heureusement, SDMTools
a des fonctionnalités comparables et calcule même le DD directement pour vous, sans qu'il soit nécessaire de prendre des variations.
library(SDMTools)
x <- c(3.7,3.3,3.5,2.8)
wt <- c(5, 5, 4, 1)/15 ## Note: no actual need to normalize weights to sum to 1, this will be done automatically.
wt.mean(x, wt)
wt.sd(x,wt)
wt.var(x, wt)
Le paquet Hmisc fournit cette fonctionnalité:
http://rgm2.lab.nig.ac.jp/RGM2/func.php?rd_id=Hmisc:wtd.stats