web-dev-qa-db-fra.com

Calcul de la moyenne pondérée et de l'écart type

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

24
Alex

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)
30
Matthew Lundberg

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

22
user3770859

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)
4
Michael Ohlrogge

Le paquet Hmisc fournit cette fonctionnalité:

http://rgm2.lab.nig.ac.jp/RGM2/func.php?rd_id=Hmisc:wtd.stats

0
Alex