Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: st: graphing median values against time


From   Timothy Mak <[email protected]>
To   "[email protected]" <[email protected]>
Subject   RE: st: graphing median values against time
Date   Thu, 10 Apr 2014 19:21:41 +0800

Dear Nick,

Thanks for your suggestion. I think -lgraph- is already overloaded with features as it is, so that it's no longer clear what it is designed to do. When I first wrote it, I wanted to draw line graphs with error bars of the same colours, possibly stratified by a third variable. Years later, I wanted to use it for graphing multilevel and/or longitudinal data, and I introduced a lot of features for doing that. But, judging by the SSC access statistics, its demand has decreased over time, even as I include more features.

I have a version at home which has still more features in relation to stratification of lines by more than 1 variables, and if I have time, my priority will be to fix a known bug in it - the default legend is wrong if multiple axes were used. However, at the moment, I don't think I'll include an option for multiple point summaries unless there is huge demand for it.

But thanks anyway,

Tim



-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Nick Cox
Sent: 10 April 2014 16:04
To: [email protected]
Subject: Re: st: graphing median values against time

It is easy to suggest more work for others, but my impression is that
-lgraph- (SSC) is a convenient wrapper  for the default of means, but
increasingly awkward for the user when two or more statistics are
wanted. In the first case, you cleverly hide the use of a -collapse-
from the user; in the second case that becomes much more evident.

I wonder whether a revised syntax something like -tabstat-

stat(mean)
stat(mean median)

defaulting to -stat(mean)- would be friendlier. Then inside -lgraph-
you take charge of the graphics calls.

However, that still leaves the question of how to tune the display of
the individual statistics, but elsewhere I have introduced bags for
options like

s1opts()
s2opts()

Without having used it I can see that -lgraph- has the flexibility to
plot statistics for different variables, which could not be maintained
easily with this design.

Manifestly, it is your program!!
...
Nick
[email protected]


On 10 April 2014 06:17, Timothy Mak <[email protected]> wrote:
> Dear Joe and Nick,
>
> Many thanks for your attempting to answer Don's question. I only saw it just now.
>
> My understanding is that if user specifies a -legend- option, it will supersede the lgraph default. Let me know if that is not the case. Otherwise, I think the addplot options are fine, except that if you use brackets, you can take out the ||. Alternatively, you can use || by adding another || at the end of the addplot option. See below for an example:
>
> . sysuse auto, clear
> . lgraph price rep78 foreign, errortype(sd) separate(0.01) alsocollapse((median) price) addplot(connect price rep78 if foreign == 0, color(navy) lpat(dash) || connect price rep78 if foreign == 1, color(maroon) lpat(dash) ||) legend(order(1 "Domestic, mean" 2 "Foreign, mean" 5 "Domestic, median" 6 "Foreign, median"))
>
> The only thing to note is that I've used 5 and 6 to refer to the two added lines instead of 3 and 4, because 3 and 4 refer to the error bars. If you don't have error bars, then you should use 3 and 4.
>
> I hope that's clear.
>
> Tim
>
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of Donald Spady
> Sent: 10 April 2014 03:01
> To: Statalist Statalist
> Subject: Re: st: graphing median values against time
>
> Joe
>   Many thanks for the advice.  I will give it a try.  I am sure that this has taken a fair bit of your time and I very much appreciate it.
>
> Don
> On Apr 9, 2014, at 12:23 PM, Joe Canner <[email protected]> wrote:
>
>> Don,
>>
>> You can avoid the error by putting the -legend()- option up front with the other generic -twoway- options instead of attaching it to one particular added plot:
>>
>> lgraph `name' following if visspell !=. & recnum == 1, by(aborig) xlabel(0 3 9 15, labsize(tiny)) stat(mean) title("Mean `name' (Median:nonFN:Navy; FN:Gold)",size(small)) xlabel(#10) legend(label(1 "non-FN") label(2 "FN")) alsocollapse((median) median = `name') addplot((line median following if aborig == 0, lcolor(dknavy) clwidth(thick)) || (line median following if aborig == 1, lcolor(red) clwidth(thick)))
>>
>> However, because -lgraph- also produces a legend, it seems that the -lgraph- legend supersedes your custom legend.  Adding the -nolegend- option for -lgraph- doesn't help because it adds a -legend(off)- option to the -twoway- command, which suppresses the legend entirely instead of suppressing the production of a default -legend()- option.  You might want to suggest to the author an alternative way to interpret the -nolegend- option.
>>
>> Another alternative would be to use the -nopreserve- option for -lgraph-, which allows you to pull the -twoway- command that is generated from the r(command) and r(options) macros and create your own customized graph.  For example, you could substitute the default legend with your customized legend and run the -twoway- command yourself.
>>
>> Regards,
>> Joe
>>
>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]] On Behalf Of Donald Spady
>> Sent: Wednesday, April 09, 2014 12:43 PM
>> To: Statalist Statalist
>> Subject: Re: st: graphing median values against time
>>
>> I get it to work if I do, starting at also collapse
>> alsocollapse((median) median = `name') addplot((line median followint if aborig == 0, lcolor(dknavy) clwidth(thick)) || (line median followint if aborig == 1, lcolor(red) clwidth(thick)))
>>
>> In other words if I bracket each of the add plot commands i.e. addplot((command set 1)||(command set2))
>>
>> I am now trying to get even fancier, because I want to label the lines in add plot but am running into a bracket problem, i.e.
>> alsocollapse((median) median = `name') addplot((line median followint if aborig == 0, lcolor(dknavy) clwidth(thick)) || (line median followint if aborig == 1, lcolor(red) clwidth(thick)) legend(label(0 "non-FN") label(2 "FN")))
>>
>> the brackets are balanced here, but Stata stops and says
>> ) required
>> r(100)
>>
>> I have counted the brackets many times and do not see where the issue lies.
>>
>> I think that you may be right in that there could be some form of error in lgraph.
>> I did the trace as Nick suggests and it always burps at the two-way command.  It gets to the part ylabel(#10) [which is just asking for 10 nicely spaced numbers]
>> There is no common between label(#10) and alsocollapse. There is nothing in the lgraph command to suggest there should be a comma there.  If I put a comma in, I get the message 'invalid alsocollapse'.
>>
>> For many purposes, I am satisfied with what I have, however it would be really nice to have that extra legend and it makes the graph a bit more self explanatory. It needs to be more or less automatic, as I have a lot of graphs to create.
>>
>> Thanks for all your help.
>>
>> Don
>>
>>
>> On Apr 9, 2014, at 9:34 AM, Joe Canner <[email protected]> wrote:
>>
>>> Don,
>>>
>>> I had a hard time reproducing your error, perhaps because I don't have your data set, but I was eventually able to get results similar to what you found.  I think this might be a bug in -lgraph-.  If you do a -set trace on- (preceded by -set tracedepth 1- if desired) you can see the -twoway- statement that -lgraph- generates and see what might be causing the error.  It appears that when you add the -lcolor(black)- option, -lgraph- gets confused and adds too many commas.
>>>
>>> For those who are more familiar with the ins and outs of -twoway- here are the two commands generated by -lgraph- corresponding to Don's two scenarios (I had to take the label() options out in order to get it to run):
>>>
>>> twoway (connect statistic following if aborig == 0, color(navy) lpat(solid)  ) (connect statistic following if aborig == 1, color(maroon) lpat(solid)  )   || line median following if aborig == 0, lcolor(dknavy) clwidth(thick)|| line median following if aborig == 1, ytitle(`"Mean "') legend(on order( 1 `"0"' 2 `"1"' )) title("Mean cumten (Median:nonFN:Navy; FN:Gold)",size(small))
>>>
>>> twoway (connect statistic following if aborig == 0, color(navy) lpat(solid)  ) (connect statistic following if aborig == 1, color(maroon) lpat(solid)  )   || line median following if aborig == 0, lcolor(dknavy) clwidth(thick)|| line median following if aborig == 1, lcolor(black), ytitle(`"Mean "') legend(on order( 1 `"0"' 2 `"1"' )) title("Mean cumten (Median:nonFN:Navy; FN:Gold)", size(small))
>>>
>>> Hope this helps.
>>>
>>> Regards,
>>> Joe Canner
>>> Johns Hopkins University School of Medicine
>>>
>>> -----Original Message-----
>>> From: [email protected] [mailto:[email protected]] On Behalf Of Donald Spady
>>> Sent: Wednesday, April 09, 2014 10:58 AM
>>> To: Statalist Statalist
>>> Subject: Re: st: graphing median values against time
>>>
>>> I dont think that is the case.  I used a Regex search in two different text editors to look for non-ASCII characters and came up with nothing.  Besides, if there was a non-ascii char, would it not show up in the other commands, where I had not added the lcolor(black) bit.  I have run it many times without that option and no problems.
>>>
>>> Don
>>>
>>> On Apr 9, 2014, at 8:06 AM, Nick Cox <[email protected]> wrote:
>>>
>>>> I'd check for strange characters. Copy your command line into a string
>>>> variable and look for unusual ASCII characters with -charlist- (SSC)
>>>> or any alternative of your choice.
>>>> Nick
>>>> [email protected]
>>>>
>>>>
>>>> On 9 April 2014 14:25, Donald Spady <[email protected]> wrote:
>>>>> Tim
>>>>> After digesting your and Nick's advice I have used the lgraph command to good effect; however I have one problem.  If I write:
>>>>> foreach name in "cumten" "cumswol" {
>>>>> igraph `name' following if visspell !=. & recnum == 1, by(aborig) label(0 3 9 15, lab size(tiny)) stat(mean) title("Mean `name' (Median:nonFN:Navy; FN:Gold)",size(small)) label(#10) also collapse((median) median = `name') addplot(line median following if aborig == 0, lcolor(dknavy) clwidth(thick)|| line median following if aborig == 1)
>>>>> }
>>>>>
>>>>> everything works fine and I get pretty pictures.
>>>>>
>>>>> BUT if I write:
>>>>> foreach name in "cumten" "cumswol" {
>>>>> lgraph `name' following if visspell !=. & recnum == 1, by(aborig) label(0 3 9 15, lab size(tiny)) stat(mean) title("Mean `name' (Median:nonFN:Navy; FN:Gold)",size(small)) label(#10) also collapse((median) median = `name') addplot(line median following if aborig == 0, lcolor(dknavy) clwidth(thick)|| line median following if aborig == 1, lcolor(black))
>>>>> }
>>>>> The only change is the addition of lcolor(black) at the end of the command.
>>>>>
>>>>> I get the message:
>>>>>      invalid 'title'
>>>>>      r(198)
>>>>>
>>>>> Why.  And how do I fix it.
>>>>>
>>>>> Many thanks.
>>>>> Don
>>>>>
>>>>> On Mar 30, 2014, at 8:43 PM, Timothy Mak <[email protected]> wrote:
>>>>>
>>>>>> <>
>>>>>> Thanks Nick very much for helping to answer my question.
>>>>>>
>>>>>> To plot more than one summary statistics is a bit difficult, and you do have to use the -addplot- and the -alsocollapse- options. If you hadn't specified -by(aborig)-, then Nick's syntax would be almost right, except that you don't need the -if bvisittm1N- in the end, i.e. -addplot(line median bvisittm1N)- would do. However, because you have specified -by(aborig)-, you really need to do:
>>>>>>
>>>>>> addplot(line median bvisittm1N if aborig == 1 || line median bvisittm1N if aborig == 2)
>>>>>>
>>>>>> supposing your variable aborig has 2 levels (1,2).
>>>>>>
>>>>>> To understand the use of the -addplot- and the -alsocollapse- option a bit more, you may want to use the -nopreserve- option. This gives you the dataset that -lgraph- actually uses to plot your graph. Also, have a look at the macros `r(command)' and `r(options)'. This gives you the -twoway- syntax that lgraph uses on the collapsed data. Be sure to use command double quotes though when you display the macros, i.e.:
>>>>>>
>>>>>> di `"`r(command)'"'
>>>>>> di `"`r(options)'"'
>>>>>>
>>>>>> I hope that helps.
>>>>>>
>>>>>> Tim
>>>>>>
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: [email protected] [mailto:[email protected]] On Behalf Of Nick Cox
>>>>>> Sent: 31 March 2014 08:38
>>>>>> To: [email protected]
>>>>>> Subject: Re: st: graphing median values against time
>>>>>>
>>>>>> You *must* specify a -twoway- subcommand, not -lgraph-, in the
>>>>>> -addplot()- call. This is documented in the help for -addplot option-.
>>>>>>
>>>>>> I doubt very much that giving the same variable names as in the main
>>>>>> call will do what you want.
>>>>>>
>>>>>> My second guess is that you need something more like
>>>>>>
>>>>>> alsocollapse((median) median=totend28)
>>>>>> addplot(line median bvisittm1N if bvisittm1N)
>>>>>>
>>>>>> Nick
>>>>>> [email protected]
>>>>>>
>>>>>>
>>>>>> On 31 March 2014 01:29, Donald Spady <[email protected]> wrote:
>>>>>>> Nick
>>>>>>> I had tried various combinations of that command and could not get it to work.
>>>>>>>
>>>>>>> here is my command
>>>>>>> .lgraph tottend28  bvisittm1N if bvisittm1N < 55, by(aborig) xlabel(0(3)54) stat(mean)  alsocollapse((median)) addplot(lgraph tottend28  bvisittm1N if bvisittm1N <55, by(aborig))
>>>>>>>
>>>>>>> It doesn't work.  I get the error
>>>>>>> lgraph is not a twoway plot type
>>>>>>> r(198);
>>>>>>>
>>>>>>> Don
>>>>>>> On Mar 30, 2014, at 5:14 PM, Nick Cox <[email protected]> wrote:
>>>>>>>
>>>>>>>> Timothy explains how to do that in the help.
>>>>>>>>
>>>>>>>> addplot(plot) This allows additional twoway plots to be plotted.
>>>>>>>> See addplot_option. Note that
>>>>>>>>    because lgraph collapses the data before plotting in twoway,
>>>>>>>> plots given in addplot(plot)
>>>>>>>>    should also refer to the collapsed data. Specify in
>>>>>>>> alsocollapse(clist) any additional data
>>>>>>>>    that need to be collapsed.
>>>>>>>>
>>>>>>>> So, if you want median as well as mean you must specify
>>>>>>>>
>>>>>>>> alsocollapse(median) addplot(<whatever>)
>>>>>>>>
>>>>>>>> Note that nothing obliges you to use another -line- call.
>>>>>>>>
>>>>>>>> I haven't use -lgraph-, just looked at its help, but Timothy provides
>>>>>>>> lots of functionality.
>>>>>>>> Nick
>>>>>>>> [email protected]
>>>>>>>>
>>>>>>>>
>>>>>>>> On 30 March 2014 23:51, Donald Spady <[email protected]> wrote:
>>>>>>>>> Timothy
>>>>>>>>> I am using your -lgraph- command and wonder if it is possible to have TWO stats created (e.g. mean and median) for the same variable(s) at the same time.  I want to plot both mean and median and cannot create an overlay to do so.
>>>>>>>>>
>>>>>>>>> Many thanks
>>>>>>>>> Don
>>>>>>>>> On Mar 28, 2014, at 1:29 AM, Timothy Mak <[email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> The command -lgraph- that I wrote is for exactly this kind of problem if you don't want to create all the variables before plotting a graph.
>>>>>>>>>> You can see it by typing:
>>>>>>>>>> ssc des lgraph
>>>>>>>>>>
>>>>>>>>>> Tim
>>>>>>>>>>
>>>>>>>>>> -----Original Message-----
>>>>>>>>>> From: [email protected] [mailto:[email protected]] On Behalf Of Donald Spady
>>>>>>>>>> Sent: 28 March 2014 08:59
>>>>>>>>>> To: Statalist Statalist
>>>>>>>>>> Subject: Re: st: graphing median values against time
>>>>>>>>>>
>>>>>>>>>> Nick
>>>>>>>>>> It works.  Just as I needed. Many thanks.
>>>>>>>>>> John: That suggestion didn't work the way I wanted it to, but thanks for the idea.
>>>>>>>>>>
>>>>>>>>>> Don
>>>>>>>>>> On Mar 27, 2014, at 5:48 PM, Nick Cox <[email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> Sure. If you use -egen-'s -median()- and -mean()- functions to get the
>>>>>>>>>>> variables you want, then it's any graph you want.
>>>>>>>>>>>
>>>>>>>>>>> As the median and mean values are repeated, don't plot them repeatedly.
>>>>>>>>>>>
>>>>>>>>>>> Here are some dopey examples.
>>>>>>>>>>>
>>>>>>>>>>> . webuse grunfeld
>>>>>>>>>>>
>>>>>>>>>>> . egen median = median(invest), by(year)
>>>>>>>>>>>
>>>>>>>>>>> . egen mean = mean(invest), by(year)
>>>>>>>>>>>
>>>>>>>>>>> . egen tag = tag(year)
>>>>>>>>>>>
>>>>>>>>>>> . line mean median year if tag
>>>>>>>>>>>
>>>>>>>>>>> For finer subdivisions, just use more variables as arguments to -by()-.
>>>>>>>>>>>
>>>>>>>>>>> Nick
>>>>>>>>>>> [email protected]
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 27 March 2014 22:34, Donald Spady <[email protected]> wrote:
>>>>>>>>>>>> Dear all
>>>>>>>>>>>> I want to graph the median and mean values of a series of variables against a time variable (on the X axis) and with the option of stratifying the variables by another one (such as sex or disease state).  I think I can do this by collapsing the data but is it possible to do this while retaining the data set in its 'original' state.  I have searched the archives and the reference manuals but have not come up with anything that seems to be what I want.
>>>>>>>>>>>> In many ways what I would like is a box plot with JUST the median (or mean) being plotted: no box, no outliers.  Is that possible.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks
>>>>>>>>>>>> Don
>>>>>>>>>>>> *
>>>>>>>>>>>> *   For searches and help try:
>>>>>>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>>>>>>
>>>>>>>>>>> *
>>>>>>>>>>> *   For searches and help try:
>>>>>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> *
>>>>>>>>>> *   For searches and help try:
>>>>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>>>>>
>>>>>>>>>> *
>>>>>>>>>> *   For searches and help try:
>>>>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> *
>>>>>>>>> *   For searches and help try:
>>>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>>>
>>>>>>>> *
>>>>>>>> *   For searches and help try:
>>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> *
>>>>>>> *   For searches and help try:
>>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>
>>>>>> *
>>>>>> *   For searches and help try:
>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>
>>>>>> *
>>>>>> *   For searches and help try:
>>>>>> *   http://www.stata.com/help.cgi?search
>>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>>>
>>>>>
>>>>>
>>>>> *
>>>>> *   For searches and help try:
>>>>> *   http://www.stata.com/help.cgi?search
>>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>
>>>> *
>>>> *   For searches and help try:
>>>> *   http://www.stata.com/help.cgi?search
>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>>
>>>
>>>
>>> *
>>> *   For searches and help try:
>>> *   http://www.stata.com/help.cgi?search
>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>> *   http://www.ats.ucla.edu/stat/stata/
>>>
>>> *
>>> *   For searches and help try:
>>> *   http://www.stata.com/help.cgi?search
>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>> *   http://www.ats.ucla.edu/stat/stata/
>>>
>>
>>
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>> *   http://www.ats.ucla.edu/stat/stata/
>>
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>> *   http://www.ats.ucla.edu/stat/stata/
>>
>
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index