Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.

# Re: st: use loop to add plots to scatter plot

 From Alberto Dorantes To statalist@hsphsun2.harvard.edu Subject Re: st: use loop to add plots to scatter plot Date Wed, 27 Mar 2013 16:57:28 -0600

```Hi Linda.
I did something similiar few weeks ago. The example I did was about
graphing different investment portfolios based on 2 stocks, but
varying the correlation among the monthly stock returns. Try my
following code (just copy and paset on your do-file-editor, and run
it):

clear
* Create a dataset of 11 observations with 2 variables: weight a and weight b
set obs 11
egen a=fill(0(1)10)
replace a=a/10
gen b=1-a
* Each observation represents 2 weights or percentages invested in 2
financial assets, so each observation represents 1 investment
portfolio
* I will use real data of 2 Stocks, A and B.
local paramgraficas ""
local i=0
* Define the expected values of monthly Stock Return A and Stock
Return B, based on the last 27 months:
scalar ERA = .01387535
scalar ERB = .00309298
* The variance-covariance matrix (2x2) of historical monthly returns
of both Stocks is the following:
matrix input COV = (0.005692,-0.00108\-0.00108,0.011222)
* I do a loop varying the pairwise correlation between the returns
forvalues rho1=-1(0.5)1 {
local i=`i' + 1
* Calculate the expected value of the portfolio return based on the
Expected value of Stock A and Stock B returns:
gen ERP`i' = a*ERA + b*ERB
label variable ERP`i' "rho = `rho1'"
* Calculate the expected value of the portfolio variance:
gen varP`i' = a^2*COV[1,1] + b^2*COV[2,2] +
2*a*b*`rho1'*sqrt(COV[1,1])*sqrt(COV[2,2])
* Now calculate the risk of the portfolio i:
gen sdP`i' = sqrt(varP`i')
* Now append the twoway graph parameters:
local paramgraficas "`paramgraficas'(connected ERP`i' sdP`i', mlabel(a)) "
}
* Finally do a twoway graph using the appended macro paramgraficas:

twoway `paramgraficas', note(Weights of Stock A are shown in each point) ///
title(Portfolio Frontiers (2 Stocks) varying their pairwise
correlation ) ///
ytitle(Return) xtitle(Risk)

I hope this help.

Alberto Dorantes

2013/3/23 Harris, Linda J <ljharris@scharp.org>:
> I have macros with names `antigen01' to `antigen40'
>
> I want to create a two way graph with the following:
>
> 1)   scatter plots with a variable # of these items (approx 5 and not in numeric order), each with a different marker
> 2)   linear fits for the same items, with lines in the same color as the markers
> 3)   a linear fit that is based on the aggregate selection of items following to a selection of these antigens (say approx 5):
>
> If possible, I would like to use a loop with a foreach statement rather than having to modify the specific items and # of items each time i ran this.
> I know that the last line is wrong - just have no idea how to accomplish this
>
>
> This is my first posting - hope I've done it right!  I'm also new to Stata programming, so hope this isn't too trivial a question.
>
> example  - say want `antigen01',  `antigen04'  `antigen05'
>
> twoway  ///
> (scatter yvar xvar if ANTIGEN==`antigen01', mcolor(red)) ///
> (lfit yvar xvar if ANTIGEN==`antigen01', lcolor (red)) ///
> (scatter yvar xvar if ANTIGEN==`antigen04', mcolor(green)) ///
> (lfit yvar xvar if ANTIGEN==`antigen04'), lcolor(green) ///
> (scatter yvar xvar if ANTIGEN==`antigen05', mcolor(blue)) ///
> (lfit yvar xvar if ANTIGEN==`antigen05', lcolor(blue)) ///
> (lift yvar xvar if ANTIGEN oneof [`antigen01' `antigen04'  `antigen5'], lcolor(black))
>
> Thank you,
> Linda
> *
> *   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/
```