Stata如何实施权重?

Stata如何实施权重?,stata,Stata,考虑一个非常基本的估算命令,回归。在“方法和公式”下,我们阅读: 因此,根据手册,对于fweights,Stata正在获取我的权重向量(输入fw=),并创建一个对角矩阵D。现在,对角矩阵具有相同的转置。因此,我们可以定义D=C'C=C^2,其中C是一个矩阵,包含对角线中我的权重的平方根 现在,根据我的符号和上面的文本,我们可以通过预乘X和y(和Z)与矩阵C来重现斯塔塔的方法。这样,(CX)'CX=X'C'CX=X'DX,依此类推。在实践中,我们通过将每个变量乘以权重的平方根,逐个观察来实现这一

考虑一个非常基本的估算命令,
回归
。在“方法和公式”下,我们阅读:

因此,根据手册,对于
fweights
,Stata正在获取我的权重向量(输入
fw=
),并创建一个对角矩阵
D
。现在,对角矩阵具有相同的转置。因此,我们可以定义
D=C'C=C^2
,其中
C
是一个矩阵,包含对角线中我的权重的平方根

现在,根据我的符号和上面的文本,我们可以通过预乘
X
y
(和
Z
)与矩阵
C
来重现斯塔塔的方法。这样,
(CX)'CX=X'C'CX=X'DX
,依此类推。在实践中,我们通过将每个变量乘以权重的平方根,逐个观察来实现这一点

现在,我试图手动复制Stata的估计,但得到了不同的结果。示例代码如下:

webuse auto, clear

keep if !mi(rep78)
qui regress price weight length [fw=rep78]
estimates store stata
preserve
replace price = price*sqrt(rep78)
replace weight = weight*sqrt(rep78)
replace length = length*sqrt(rep78)

qui regress price weight length
estimates store me
restore
estimates table stata me, b
输出:

----------------------------------------
    Variable |   stata          me      
-------------+--------------------------
      weight |  4.1339379    1.7738167  
      length | -82.996394    16.502356  
       _cons |  9425.5443   -4071.7341  
----------------------------------------

这场比赛糟透了。如果我们使用其他形式的权重更改
fw=
,结果是相同的。什么问题?我的数学或代码错了吗?如果没有,Stata实际上是如何实现权重的?

这种不匹配的发生是因为您忘记缩放截距/常数:

webuse auto, clear
keep if !mi(rep78)
qui regress price weight length [fw=rep78]
estimates store stata
preserve
replace price = price*sqrt(rep78)
replace weight = weight*sqrt(rep78)
replace length = length*sqrt(rep78)
gen constant = 1*sqrt(rep78)
qui regress price weight length constant, nocons
estimates store me
restore
estimates table stata me, b

这将用一个“伪截距”取代通常的一列,该截距是加权版本。

很明显,我亲爱的沃森!谢谢:)不过请注意有小数点的差异。当然不足以在统计上显著,但令人费解,因为两种方法原则上应该给出完全相同的结果。Stata实际上以偏差形式估计模型,因此,当你避免使用乘法方法时,数值精度会更好。除非权重为负数,否则差值不会太大。但由于我使用的数学方法应该与Stata doc中的公式“完全”相同,我认为我可以复制结果。这样做是为了数值稳定性,因为你在使用有限精度的计算机,类似于不实际计算OLS公式中的逆矩阵。该公式与手册中的公式相同。