如何在Stata中为不同参与者绘制ve与hr的多组拟合图?
Stata绘制分参与者的ve-hr关系lowess图
你需要以ve为纵轴、hr为横轴,为每个不同id的参与者分别展示二者的lowess拟合关系,你的原始命令是可行的,但可以根据需求选择更高效的写法:
1. 原始命令的正确性
你写的命令:
twoway (lowess ve hr if id==1) (lowess ve hr if id==3) (lowess ve hr if id==6)
本身是正确的,能够生成指定id参与者的ve-hr lowess拟合曲线,每条曲线对应一个参与者。但这种写法需要手动为每个id添加一条语句,当id数量较多时会非常繁琐。
2. 更高效的实现方法
方法一:将每个参与者的图放在单独子图中
如果希望每个参与者的关系图独立展示,可以使用by()选项,Stata会自动按id分组生成子图:
twoway lowess ve hr, by(id) ytitle("ve") xtitle("hr")
方法二:将所有参与者的拟合曲线放在同一幅图中
如果要把所有曲线叠加在同一图里,用循环自动生成所有曲线,避免手动重复编写:
- 如果id是数值类型(如1、3、6):
levelsof id, local(ids) local plots "" foreach i of local ids { local plots "`plots' (lowess ve hr if id==`i')" } twoway `plots', legend(rename(1 "P`=word("`ids'",1)'") rename(2 "P`=word("`ids'",2)'") rename(3 "P`=word("`ids'",3)'")) /// ytitle("ve") xtitle("hr") title("ve与hr的关系(按参与者分组)")
- 如果id是字符串类型(如直接是"P1"、"P3"):
levelsof id, local(ids) local plots "" foreach i of local ids { local plots "`plots' (lowess ve hr if id=="`i'")" } twoway `plots', legend(rename(1 "`=word("`ids'",1)'") rename(2 "`=word("`ids'",2)'") rename(3 "`=word("`ids'",3)'")) /// ytitle("ve") xtitle("hr") title("ve与hr的关系(按参与者分组)")
这段代码会自动获取所有唯一的id值,为每个id生成对应的lowess曲线,并在图例中标注对应的参与者名称。
内容的提问来源于stack exchange,提问作者Sophie
相关产品推荐
相关产品推荐

