【问题标题】:Stata xtline overlayed plot for multiple groups多组的Stata xtline叠加图
【发布时间】:2017-08-16 08:55:40
【问题描述】:

我试图通过为每个组显示不同的绘图样式来生成一个覆盖的 -xtline- 图,以区分男性和女性(或任意数量的多个组)。我选择将 xtline 图重铸为“连接”,并使用圆形标记显示男性,使用三角形标记显示女性。从this question on Statalist 获取线索,我生成了类似于下面的代码。当我尝试此解决方案时,Stata 会产生“选项太多”错误,考虑到大量独特的人,这可能是可以预测的。我知道this solution 使用组合图,但鉴于我的数据中有大量独特的个体,这也不实用。

对于这个问题是否存在更简单的解决方案? Stata 是否有能力像 -twoway- 图一样覆盖多个 -xtline- 图?

下面的代码使用来自 UCLA 优秀的 Stata 指南的公开数据显示了我的基本代码并重现了错误:

use http://www.ats.ucla.edu/stat/stata/examples/alda/data/alcohol1_pp, clear 
xtset id age

gsort -male id
qui levelsof id if !male, loc(fidlevs)
qui levelsof id if male, loc(midlevs)
qui levelsof id, loc(alllevs)

tokenize `alllevs'

loc len_f : word count `fidlevs'
loc len_m : word count `midlevs'
loc len_all : word count `alllevs'

loc start_f = `len_all' - `len_f'

forval i = 1/`len_all' {
    if `i' < `start_f' {
        loc m_plot_opt "`m_plot_opt' plot`i'opts(recast(connected) mcolor(black) msize(medsmall) msymbol(circle) lcolor(black) lwidth(medthin) lpattern(solid))"
    }
    else if `i' >= `start_f' {
        loc f_plot_opt "`f_plot_opt' plot`i'opts(recast(connected) mcolor(black) msize(medsmall) msymbol(triangle) lcolor(black) lwidth(medthin) lpattern(solid))"
    }
}

di "xtline alcuse, legend(off) scheme(s1mono) overlay `m_plot_opt' `f_plot_opt'"
xtline alcuse, legend(off) scheme(s1mono) overlay `m_plot_opt' `f_plot_opt'

【问题讨论】:

    标签: stata


    【解决方案1】:

    (对我来说)很难将这里的编程问题与统计或图形视图区分开来,以了解哪种图表效果好,或者根本没有。即使使用这个适度的数据集,也有 82 个不同的标识符,所以任何试图清楚地显示它们的尝试都没有用,只是因为生成的图例占据了大部分空间。

    问题代码在处理所有标识符方面有相当大的独创性,但粗略的方法似乎也行得通。试试这个:

    use http://www.ats.ucla.edu/stat/stata/examples/alda/data/alcohol1_pp, clear 
    xtset id age
    separate alcuse, by(male) veryshortlabel 
    label var alcuse1 "male"
    label var alcuse0 "female"  
    line alcuse? age, legend(off) sort connect(L)  
    

    重点:

    1. xtline 没有什么特别之处。它只是一个方便的包装器。当对其有线选择感到沮丧时,人们通常只需要line

    2. 要获得不同的颜色,不同的变量就足够了,这就是separate 发挥作用的地方。另见this Tip

    3. 虽然示例数据集表现良好,但额外选项 sort connect(L) 在某些情况下将有助于消除个人或小组之间的虚假连接。 (在极端情况下,请联系linkplot (SSC)。)

    这也可以:

    line alcuse age if male || line alcuse age if !male, legend(order(1 "male" 2 "female")) sort connect(L)
    

    【讨论】:

    • 非常感谢您的回答尼克。不幸的是,据我所知,使用 -separate- 和 -line- 不尊重 xt 设置,Stata 绘制连接个人的线。但是我接受了您的建议,即简单地使用 -line- 而不是 -xtline- 并且能够通过使用本地人累积生成情节线语句而不是情节选项来适应我以前的策略。我也感谢您对这种图形表示的关注。虽然有问题的示例数据没有显示,但在我自己的数据中,男性和女性表现出截然不同的模式。
    • 只需使用sortconnect(L) 即可避免大多数虚假连接。 ssc desc linkplot 也有旧代码。
    • 非常感谢尼克,添加选项“排序连接(L)”解决了它。我建议使用编辑将这些添加到您的代码中,以便其他人不会错过它,我接受您的回答。再次感谢。
    • 好主意。我又加了一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多