【问题标题】:Difference between Hmisc wtd.var and SAS proc Mean generated weighted varianceHmisc wtd.var 和 SAS proc 之间的差异均值生成加权方差
【发布时间】:2014-01-09 19:37:05
【问题描述】:

当我尝试计算加权方差时,我从 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

【问题讨论】:

  • 请 SAS 发布其代码。 Hmisc::wtd.var 随时可用。
  • SAS 使几乎所有的统计计算都可用(不是以 java/c++ 中的代码,而是以数学形式),包括方差计算(如已回答)。向他们索要源代码是相当愚蠢的,除非您要向 Microsoft 索要 Windows 7 的源代码并期望他们同意?

标签: r sas hmisc


【解决方案1】:

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

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

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

来自PROC MEANS documentation的完整文本:

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 是平均重量。该方法产生渐近 估计具有平均权重的观测值的方差。

【讨论】:

  • 谢谢。我的根本问题(而不是我给出的玩具示例)中的另一个问题是我使用的是频率权重而不是分析权重。我没有意识到 SAS 有一个单独的命令。因此,使用 vardef=WDF 或用 freq wt2 替换 weights wt 纠正了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2015-01-09
  • 1970-01-01
  • 2019-03-09
  • 2021-11-15
  • 2014-04-20
相关资源
最近更新 更多