关于在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 外推数据。