有没有办法在 Stata 的散点图中抖动置信区间?
Is there a way to jitter confidence intervals in a scatterplot in Stata?
我正在尝试使用 twoway scatter
为两组(foreign==0
和 foreign==1
)创建一个随时间变化的平均值和相关置信区间 (CI) 的图和 rcap
。但是,即使我使用不同的颜色或线条样式,也很难区分重叠的 CI。
我尝试使用 jitter
选项随机偏移图上的点。虽然这适用于 scatter
,但它似乎不适用于我用来绘制 CI 的 rcap
。它接受选项,没有错误,但它不会抖动 CI。我曾希望通过使用具有相同种子的 jitterseed
选项,我能够将来自 scatter
的标记和来自 rcap
的 CI 偏移到图上的相同位置。
This post 关于 2005 年的 Statalist 表明 rcap
不支持 jitter
。我在当前 rcap
文档中找不到对 jitter
选项的引用,所以我认为情况仍然如此。我对使用除 rcap
以外的绘图命令围绕均值绘制 CI 的解决方案持开放态度。 TIA.
可重现的例子:
sysuse auto, clear
* Generate required statistics by repair record and foreign
collapse (mean) mean_price = price ///
(sd) sd_price = price ///
(count) n_price = price , by(foreign rep78)
* Compute confidence intervals
gen lb_price = mean_price - invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
gen ub_price = mean_price + invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
* No jitter
twoway (scatter mean_price rep78 if foreign == 0, ///
c(L) lcol(black) msym(O) mcol(black) ) ///
///
(scatter mean_price rep78 if foreign == 1, ///
c(L) lcol(black) msym(O) mcol(black) ) ///
///
(rcap lb_price ub_price rep78 if foreign == 0, ///
lcol(black) ) ///
///
(rcap lb_price ub_price rep78 if foreign == 1, ///
lcol(black) )
* With jitter
twoway (scatter mean_price rep78 if foreign == 0, ///
c(L) lcol(black) msym(O) mcol(black) jitter(10) jitterseed(123)) ///
///
(scatter mean_price rep78 if foreign == 1, ///
c(L) lcol(black) msym(O) mcol(black) jitter(10) jitterseed(456)) ///
///
(rcap lb_price ub_price rep78 if foreign == 0, ///
lcol(black) jitter(10) jitterseed(123)) ///
///
(rcap lb_price ub_price rep78 if foreign == 1, ///
lcol(black) jitter(10) jitterseed(456))
感谢您提供可重现的示例。您从 2007 年引用的 post 并没有提出 twoway rcap
不允许使用 jitter()
的建议:它正确地说明了这一点。但据记载,jitter()
适用于使用 scatter
或 graph matrix
的点,如果它适用于其他地方,则会明确记录。
但这不是遗憾的理由。置信区间的抖动尖峰或上限条看起来一团糟,也不能保证它们与点估计的抖动标记对齐。该图看起来太像 child 的小图了。即使在原则上使用相同的种子也无济于事。
Stata 不支持您在 twoway
图形中直接需要的内容,因此需要进行一些设置偏移的工作。对于成对的估计值和置信区间,我左右移动显示。在这个例子中,偏移量足够小,数据范围如此之大,我得到了自动有意义的 x 轴标签,尽管在其他问题中你可能需要直接拼出什么你要
我不喜欢同一命令行中不同图形命令的括号表示法,因为已经有足够多的括号了。我也不理解为什么您要坚持为两组使用相同的颜色和标记符号,但这可能反映了您对实际问题的一些不同逻辑或需求。
假设要比较三组,我会向左移动一个估计值,向右移动一个估计值,将第三个估计值留在中间。对于四个或更多组,您通常需要更加努力地思考。
毫无疑问,很多人都想到了抵消的想法,就像文学作品中经常做的那样,但它写在 this Stata Journal tip by James Cui 中。
sysuse auto, clear
* Generate required statistics by repair record and foreign
collapse (mean) mean_price = price ///
(sd) sd_price = price ///
(count) n_price = price , by(foreign rep78)
* Compute confidence intervals
gen lb_price = mean_price - invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
gen ub_price = mean_price + invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
local offset 0.1
gen rep78_L = rep78 - `offset'
gen rep78_R = rep78 + `offset'
* No jitter
twoway scatter mean_price rep78_L if foreign == 0, c(L) lcol(blue) msym(Oh) mcol(blue) ///
|| scatter mean_price rep78_R if foreign == 1, c(L) lcol(orange) msym(Th) mcol(orange) ///
|| rcap lb_price ub_price rep78_L if foreign == 0, lcol(blue) ///
|| rcap lb_price ub_price rep78_R if foreign == 1, lcol(orange) ///
xtitle("Repair record 1978") ytitle(Price (USD)) legend(order(1 "Domestic" 2 "Foreign"))
community-contributed 命令可能会支持类似的东西,例如 coefplot
,一个我从未使用过的很棒的命令。
我正在尝试使用 twoway scatter
为两组(foreign==0
和 foreign==1
)创建一个随时间变化的平均值和相关置信区间 (CI) 的图和 rcap
。但是,即使我使用不同的颜色或线条样式,也很难区分重叠的 CI。
我尝试使用 jitter
选项随机偏移图上的点。虽然这适用于 scatter
,但它似乎不适用于我用来绘制 CI 的 rcap
。它接受选项,没有错误,但它不会抖动 CI。我曾希望通过使用具有相同种子的 jitterseed
选项,我能够将来自 scatter
的标记和来自 rcap
的 CI 偏移到图上的相同位置。
This post 关于 2005 年的 Statalist 表明 rcap
不支持 jitter
。我在当前 rcap
文档中找不到对 jitter
选项的引用,所以我认为情况仍然如此。我对使用除 rcap
以外的绘图命令围绕均值绘制 CI 的解决方案持开放态度。 TIA.
可重现的例子:
sysuse auto, clear
* Generate required statistics by repair record and foreign
collapse (mean) mean_price = price ///
(sd) sd_price = price ///
(count) n_price = price , by(foreign rep78)
* Compute confidence intervals
gen lb_price = mean_price - invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
gen ub_price = mean_price + invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
* No jitter
twoway (scatter mean_price rep78 if foreign == 0, ///
c(L) lcol(black) msym(O) mcol(black) ) ///
///
(scatter mean_price rep78 if foreign == 1, ///
c(L) lcol(black) msym(O) mcol(black) ) ///
///
(rcap lb_price ub_price rep78 if foreign == 0, ///
lcol(black) ) ///
///
(rcap lb_price ub_price rep78 if foreign == 1, ///
lcol(black) )
* With jitter
twoway (scatter mean_price rep78 if foreign == 0, ///
c(L) lcol(black) msym(O) mcol(black) jitter(10) jitterseed(123)) ///
///
(scatter mean_price rep78 if foreign == 1, ///
c(L) lcol(black) msym(O) mcol(black) jitter(10) jitterseed(456)) ///
///
(rcap lb_price ub_price rep78 if foreign == 0, ///
lcol(black) jitter(10) jitterseed(123)) ///
///
(rcap lb_price ub_price rep78 if foreign == 1, ///
lcol(black) jitter(10) jitterseed(456))
感谢您提供可重现的示例。您从 2007 年引用的 post 并没有提出 twoway rcap
不允许使用 jitter()
的建议:它正确地说明了这一点。但据记载,jitter()
适用于使用 scatter
或 graph matrix
的点,如果它适用于其他地方,则会明确记录。
但这不是遗憾的理由。置信区间的抖动尖峰或上限条看起来一团糟,也不能保证它们与点估计的抖动标记对齐。该图看起来太像 child 的小图了。即使在原则上使用相同的种子也无济于事。
Stata 不支持您在 twoway
图形中直接需要的内容,因此需要进行一些设置偏移的工作。对于成对的估计值和置信区间,我左右移动显示。在这个例子中,偏移量足够小,数据范围如此之大,我得到了自动有意义的 x 轴标签,尽管在其他问题中你可能需要直接拼出什么你要
我不喜欢同一命令行中不同图形命令的括号表示法,因为已经有足够多的括号了。我也不理解为什么您要坚持为两组使用相同的颜色和标记符号,但这可能反映了您对实际问题的一些不同逻辑或需求。
假设要比较三组,我会向左移动一个估计值,向右移动一个估计值,将第三个估计值留在中间。对于四个或更多组,您通常需要更加努力地思考。
毫无疑问,很多人都想到了抵消的想法,就像文学作品中经常做的那样,但它写在 this Stata Journal tip by James Cui 中。
sysuse auto, clear
* Generate required statistics by repair record and foreign
collapse (mean) mean_price = price ///
(sd) sd_price = price ///
(count) n_price = price , by(foreign rep78)
* Compute confidence intervals
gen lb_price = mean_price - invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
gen ub_price = mean_price + invttail(n_price-1,0.025)*(sd_price / sqrt(n_price))
local offset 0.1
gen rep78_L = rep78 - `offset'
gen rep78_R = rep78 + `offset'
* No jitter
twoway scatter mean_price rep78_L if foreign == 0, c(L) lcol(blue) msym(Oh) mcol(blue) ///
|| scatter mean_price rep78_R if foreign == 1, c(L) lcol(orange) msym(Th) mcol(orange) ///
|| rcap lb_price ub_price rep78_L if foreign == 0, lcol(blue) ///
|| rcap lb_price ub_price rep78_R if foreign == 1, lcol(orange) ///
xtitle("Repair record 1978") ytitle(Price (USD)) legend(order(1 "Domestic" 2 "Foreign"))
community-contributed 命令可能会支持类似的东西,例如 coefplot
,一个我从未使用过的很棒的命令。