Рассмотрим очень простую команду оценки, regress
.В руководстве в разделе «Методы и формулы» мы читаем:
Итак, согласно руководству, для fweights
Stata берет мой вектор весов (введенный с помощью fw=
) и создает диагональную матрицу D
.Теперь диагональные матрицы имеют одинаковую транспонированность.Следовательно, мы могли бы определить D=C'C=C^2
, где C
- это матрица, содержащая квадратный корень из моих весов в диагонали.
Теперь, учитывая мои обозначения и текст выше, мы можем воспроизвести метод Статы путем предварительного умножения на X
и y
(и Z
) с матрицей C
.Таким образом, (CX)'CX=X'C'CX=X'DX
и так далее.На практике мы достигаем этого путем умножения каждой переменной на квадратный корень веса, наблюдение за наблюдением.
Теперь я попытался повторить оценки Статы вручную, но я получил другой результат.Пример кода ниже:
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 реализует веса?