关于在Stata上绘制洛伦兹曲线的查询
Query on plotting Lorenz curves on Stata
我正在尝试使用以下命令绘制洛伦兹曲线:
glcurve drugs, sortvar(death) pvar(rank) glvar(yord) lorenz nograph
generate rank1=rank
label variable rank "Cum share of mortality"
label variable rank1 "Equality Line"
twoway (line rank1 rank, sort clwidth(medthin) clpat(longdash))(line yord rank , sort clwidth(medthin) clpat(red)), ///
ytitle(Cumulative share of drug activity, size(medsmall)) yscale(titlegap(2)) xtitle(Cumulative share of mortality (2012), size(medsmall)) ///
legend(rows(5)) xscale(titlegap(5)) legend(region(lwidth(none))) plotregion(margin(zero)) ysize(6.75) xsize(6) plotregion(lcolor(none))
但是,在生成的曲线中,等线不是从0开始的,有没有办法解决这个问题?
为了获得完美的45度平等线,是否推荐使用以下:
(function y=x, range(0 1)
此外,绘制上图至少需要多少次观察?它也适用于 2 个观察结果吗?
你的完全平等线没有通过 (0,0) 的原因是你的变量值不包含 0。
排名的最小值为 1/_N
。虽然这个值会逐渐趋近于 0,但实际上永远不会达到 0。
要查看此内容,请尝试:
quietly sum rank
di r(min)
di 1/_N
此外,通过将程序代码应用于您的数据(从 ado 文件中的第 152 行左右开始并删除不必要的位),可以很容易地看到如果 drugs 的值为 0,则 yord 不能取值为 0:
glcurve drugs, sortvar(death) pvar(rank) glvar(yord) lorenz nograph
sort death drugs , stable
gen double rank1 = _n / _N
qui sum drugs
gen yord1= (sum(drugs) / _N) / r(mean)
绘制平等的最佳方法是您编辑的方法,即:
twoway(function y = x, ra(0 1))
强制洛伦兹曲线从原点开始(如果还没有的话)的一个快速但(非常)粗略的修复方法是在获得秩和码后向数据添加观察值,然后在之后删除它你有你的曲线:
glcurve drugs, sortvar(death) pvar(rank) glvar(yord) lorenz nograph
expand 2 in 1
replace yord = 0 in 1
replace rank = 0 in 1
twoway (function y = x, ra(0 1)) ///
(line yord rank)
drop in 1
就像我说的那样,这确实很粗糙,甚至有些不明智,但目前我看不到更好的选择,并且使用这种方法你不会改变 yord 的任何其他值运行 glcurve
外推数据。
我正在尝试使用以下命令绘制洛伦兹曲线:
glcurve drugs, sortvar(death) pvar(rank) glvar(yord) lorenz nograph
generate rank1=rank
label variable rank "Cum share of mortality"
label variable rank1 "Equality Line"
twoway (line rank1 rank, sort clwidth(medthin) clpat(longdash))(line yord rank , sort clwidth(medthin) clpat(red)), ///
ytitle(Cumulative share of drug activity, size(medsmall)) yscale(titlegap(2)) xtitle(Cumulative share of mortality (2012), size(medsmall)) ///
legend(rows(5)) xscale(titlegap(5)) legend(region(lwidth(none))) plotregion(margin(zero)) ysize(6.75) xsize(6) plotregion(lcolor(none))
但是,在生成的曲线中,等线不是从0开始的,有没有办法解决这个问题?
为了获得完美的45度平等线,是否推荐使用以下:
(function y=x, range(0 1)
此外,绘制上图至少需要多少次观察?它也适用于 2 个观察结果吗?
你的完全平等线没有通过 (0,0) 的原因是你的变量值不包含 0。
排名的最小值为 1/_N
。虽然这个值会逐渐趋近于 0,但实际上永远不会达到 0。
要查看此内容,请尝试:
quietly sum rank
di r(min)
di 1/_N
此外,通过将程序代码应用于您的数据(从 ado 文件中的第 152 行左右开始并删除不必要的位),可以很容易地看到如果 drugs 的值为 0,则 yord 不能取值为 0:
glcurve drugs, sortvar(death) pvar(rank) glvar(yord) lorenz nograph
sort death drugs , stable
gen double rank1 = _n / _N
qui sum drugs
gen yord1= (sum(drugs) / _N) / r(mean)
绘制平等的最佳方法是您编辑的方法,即:
twoway(function y = x, ra(0 1))
强制洛伦兹曲线从原点开始(如果还没有的话)的一个快速但(非常)粗略的修复方法是在获得秩和码后向数据添加观察值,然后在之后删除它你有你的曲线:
glcurve drugs, sortvar(death) pvar(rank) glvar(yord) lorenz nograph
expand 2 in 1
replace yord = 0 in 1
replace rank = 0 in 1
twoway (function y = x, ra(0 1)) ///
(line yord rank)
drop in 1
就像我说的那样,这确实很粗糙,甚至有些不明智,但目前我看不到更好的选择,并且使用这种方法你不会改变 yord 的任何其他值运行 glcurve
外推数据。