График эволюции квантильного нелинейного коэффициента: это можно сделать с помощью grqreg? Другие опции?
У меня есть следующая модель:
Y_ {it} = alpha_i + B1 * weight_ {it} + B2 * Dummy_Foreign_ {i} + B3 * (weight * Dummy_Foreign) _ {it} + e_ {it}
и меня интересует влияние на Y веса для иномарок и график изменения соответствующего коэффициента по квантилям с соответствующими стандартными ошибками. То есть мне нужно увидеть эволюцию коэффициентов (B1+ B3). Я знаю, что это нелинейный эффект, и для получения стандартной ошибки (B1 + B3) потребуется некоторый вид дельта-метода для получения дисперсионно-ковариационной матрицы.
Прежде чем углубиться в написание программы, которая пытается это сделать, я подумал, что попробую спросить, есть ли способ сделать это с помощью grqreg. Если это невозможно с grqreg, кто-нибудь может подсказать мне, как они начнут писать код, который вычисляет правильные стандартные ошибки и отображает квантильный коэффициент.
Для примера сечения того, что я пытаюсь сделать, см. Код ниже.
- Я использую grqred для генерации эволюции отдельных коэффициентов (но мне нужен объединенный)- один график для эволюции (B1 + B3) с соответствующими стандартными ошибками.
(Я использую Stata 14.1 на Windows 10):
clear
sysuse auto
set scheme s1color
gen gptm = 1000/mpg
label var gptm "gallons / 1000 miles"
gen weight_foreign= weight*foreign
label var weight_foreign "Interaction weight and foreign car"
qreg gptm weight foreign weight_foreign , q(.5)
grqreg weight weight_foreign , ci ols olsci reps(40)
*** Question 1: How to constuct the plot of the coefficient of interest?
1 ответ
Ваш второй вопрос здесь не по теме, так как является статистическим. Попробуйте сайт CV SE или Statalist.
Вот как вы можете сделать (1) в поперечном сечении, используя margins
а также marginsplot
:
clear
set more off
sysuse auto
set scheme s1color
gen gptm = 1000/mpg
label var gptm "gallons / 1000 miles"
sqreg gptm c.weight##i.foreign, q(10 25 50 75 95) reps(500) coefl
margins, dydx(weight) predict(outcome(q10)) predict(outcome(q25)) predict(outcome(q50)) predict(outcome(q75)) predict(outcome(q95)) at(foreign=(0 1))
marginsplot, xdimension(_predict) xtitle("Quantile") ///
legend(label(1 "Domestic") label(2 "Foreign")) ///
xlabel(none) xlabel(1 "Q10" 2 "Q25" 3 "Q50" 4 "Q75" 5 "Q95", add) ///
title("Marginal Effect of Weight By Origin") ///
ytitle("GPTM")
Это производит график как это:
Я не переделывал CI здесь, так как он выглядел бы беспорядочно, но это сделало бы его больше похожим на ваш график. Просто добавь recastci(rarea)
к вариантам.
К сожалению, ни одна из панельных команд квантильной регрессии не работает с факторными переменными и margins
, Но мы можем взломать что-нибудь вместе. Во-первых, вы можете рассчитать суммы коэффициентов с nlcom
(вместо более естественного lincom
которой то не хватает post
вариант), храните их и используйте Бен Янна coefplot
чтобы наметить их. Вот игрушечный пример, чтобы дать вам основную идею, где мы рассмотрим влияние членства в профсоюзе:
set more off
estimates clear
webuse nlswork, clear
gen tXu = tenure*union
local quantiles 1 5 10 25 50 75 90 95 99 // K quantiles that you care about
local models "" // names of K quantile models for coefplot to graph
local xlabel "" // for x-axis labels
local j=1 // counter for quantiles
foreach q of numlist `quantiles' {
qregpd ln_wage tenure union tXu, id(idcode) fix(year) quantile(`q')
nlcom (me_tu:_b[tenure]+_b[tXu]), post
estimates store me_tu`q'
local models `"`models' me_tu`q' || "'
local xlabel `"`xlabel' `j++' "Q{sub:`q'}""'
}
di "`models'
di `"`xlabel'"'
coefplot `models' ///
, vertical bycoefs rescale(100) ///
xlab(none) xlabel(`xlabel', add) ///
title("Marginal Effect of Tenure for Union Members On Each Conditional Quantile Q{sub:{&tau}}", size(medsmall)) ///
ytitle("Wage Change in Percent" "") yline(0) ciopts(recast(rcap))
Это делает кривую дромадера, которая предполагает, что эффект владения больше в середине распределения заработной платы, чем в хвостах: