1

当我尝试计算加权方差时,我从 R 和 SAS 得到不同的结果。有谁知道可能导致这种差异的原因是什么?

我创建权重和值的向量,然后使用 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
4

1 回答 1

1

您可能对方差的计算方式有所不同。SAS 为您提供了一个选项,VARDEF,这在这里可能会有所帮助。

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

在您的数据集上给出的方差类似于r。两者都是“正确的”,具体取决于您选择如何计算加权方差。(在我的商店,我们计算它的第三种方式,当然......)

PROC MEANS 文档中的完整文本:

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

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 是校正的平方和,等于 Sum((Xi-Xbar)^2)。当您对分析变量加权时,CSS 等于 sum(Wi*(Xi-Xwbar)^2),其中 Xwbar 是加权平均值。

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

提示:当您使用 WEIGHT 语句且 VARDEF=DF 时,方差是 Sigma^2 的估计值,其中第 i 个观察的方差是 Sigma^2/wi,wi 是第 i 个观察的权重。该方法产生对具有单位权重的观测值的方差的估计。

提示:当您使用 WEIGHT 语句和 VARDEF=WGT 时,计算的方差是渐近(对于大 n)Sigma^2/wbar 的估计值,其中 wbar 是平均权重。该方法产生具有平均权重的观测方差的渐近估计。

于 2014-01-09T19:55:44.233 回答