# Re: [R] Problem with Weighted Variance in Hmisc

From: Frank E Harrell Jr <f.harrell_at_vanderbilt.edu>
Date: Fri, 01 Jun 2007 07:11:50 -0500

```>> The function wtd.var(x,w) in Hmisc calculates the weighted variance
>> of x
>> where w are the weights.  It appears to me that wtd.var(x,w) = var
>> (x) if all
>> of the weights are equal, but this does not appear to be the case. Can
>> someone point out to me where I am going wrong here?  Thanks.
```

>
> The true formula of weighted variance is this one:
> http://www.itl.nist.gov/div898/software/dataplot/refman2/ch2/
> weighvar.pdf
> But for computation purposes, wtd.var uses another definition which
> considers the weights as repeats instead of true weights. However if
> the weights are normalized (sum to one) to two formulas are equal. If
> you consider weights as real weights instead of repeats, I would
> recommend to use this option.
> With normwt=T, your issue is solved:
>
> > a=1:10
> > b=a
> > b[]=2
> > b
>  2 2 2 2 2 2 2 2 2 2
> > wtd.var(a,b)
>  8.68421
> # all weights equal 2 <=> there are two repeats of each element of a
> > var(c(a,a))
>  8.68421
> > wtd.var(a,b,normwt=T)
>  9.166667
> > var(a)
>  9.166667
>
> Cheers,
>
> JiHO

The issue is what is being assumed for N in the denominator of the variance formula, since the unbiased estimator subtracts one. Using normwt=TRUE means you are in effect assuming N is the number of elements in the data vector, ignoring the weights.

Frank Harrell

> ---
> http://jo.irisson.free.fr/
>
> ______________________________________________
> R-help_at_stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.
>

```--
Frank E Harrell Jr   Professor and Chair           School of Medicine
Department of Biostatistics   Vanderbilt University

______________________________________________
R-help_at_stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help