2014-01-09 26 views
1

当我尝试计算加权方差时,得到R和SAS的不同结果。有谁知道什么可能会导致这种差异?Hmisc wtd.var和SAS proc之间的区别平均生成的加权变化

我创建的重量和价值的载体和我然后使用 Hmisc库计算加权方差wtd.var功能:

library(Hmisc) 
wt <- c(5, 5, 4, 1) 
x <- c(3.7,3.3,3.5,2.8) 
wtd.var(x,weights=wt) 

我得到的答案:

[1] 0.0612381 

但如果我尝试在SAS中重现这些结果,我得到了一个完全不同的结果:

data test; 
    input wt x; 
cards; 
5 3.7 
5 3.3 
4 3.5 
1 2.8 
; 
run; 
proc means data=test var; 
var x; 
weight wt; 
run; 

答案结果

0.2857778 
+2

要求SAS发布其代码。'Hmisc :: wtd.var'随时可用。 –

+1

SAS使得几乎所有的统计计算都可用(不是以代码形式存在于java/C++中,而是以数学形式),包括方差计算(如答案)。问他们的源代码是非常愚蠢的,除非你要问微软的Windows 7的源代码,并期望他们说是的? – Joe

回答

1

您可能在计算方差方面有差异。 SAS给你一个选项,VARDEF,这可能对此有所帮助。

proc means data=test var vardef=WDF; 
var x; 
weight wt; 
run; 

对您的数据集的这种差异会产生类似于r的差异。两者都是“正确的”,这取决于你选择如何计算加权方差。 (在我的商店,我们计算它第三种方式,当然...)

PROC MEANS documentation

完全文本:

VARDEF =除数指定的 方差和标准差的计算中使用的除数。下表显示了除数和相关除数的可能值 。

Possible Values for VARDEF= 
Value   Divisor      Formula for Divisor 
DF    degrees of freedom   n - 1 
N    number of observations  n 
WDF    sum of weights minus one ([Sigma]iwi) - 1 
WEIGHT | WGT  sum of weights    [Sigma]iwi 

的过程计算方差作为CSS/Divisor,其中CSS 是正方形的校正后的总和,等于总和((XI-Xbar的)^ 2)。当你分析变量的权重时,CSS等于总和(Wi *(Xi-Xwbar)^ 2),其中Xwbar是加权平均值。

默认值:DF要求:要计算平均值的标准误,平均值的置信限或学生t检验使用VARDEF =的默认值 。

提示:当您使用WEIGHT语句和 VARDEF = DF,方差是西格玛^ 2,其中 方差的第i个观察是西格玛^ 2 /无线的估计,并wi是用于所述 重量ith观察。该方法得出单位重量观测值的方差估计值。

提示:当您使用 WEIGHT语句和VARDEF = WGT,计算出的方差是 渐近(对于大的n)西格玛^ 2/wbar,其中 wbar是平均重量的估计值。该方法对平均重量的观察结果的方差产生渐近估计。

+0

谢谢。我的根本问题(而不是我给出的玩具示例)中的另一个问题是我使用频率权重而不是分析权重。我没有意识到SAS有一个单独的命令。所以使用vardef = WDF或用freq wt2替换weight wt纠正了我的问题。 – Martin