我正在尝试使用以下命令绘制洛伦兹曲线:
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,0)的原因是因为变量的值不包含0。
排名的最小值为1/_N
。虽然这个值会渐近逼近0,但它实际上永远不会达到0。
要看到这一点,请尝试:
quietly sum rank
di r(min)
di 1/_N
此外,通过将程序代码应用于您的数据(从ado文件中的第152行开始并删除不必要的位),可以很容易地看到,如果没有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))
迫使洛伦兹曲线从原点开始(如果还没有)的一个快速(非常)粗略的修复是在获得等级和yord之后添加对数据的观察,然后在你拥有之后删除它你的曲线:
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的任何其他值。 {1}}关于推断的数据。