You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.3 KiB
Plaintext

7 months ago
*! version 1.0.1 30sep2005
*! The first version of this module has been wroten by Ken Higbee (StataCorp)
*! Improvements by Jean-Benoit Hardouin
program biplotvlab
version 9
syntax varlist(numeric min=2) [if] [in] [, LABdes(string) stretch(int 1) *]
// run biplot quietly (and nograph) so we can get r(V)
qui biplot `varlist' `if' `in' , `options' nograph
tempname V
mat `V' = r(V)
local nbvar:word count `varlist'
tokenize `varlist'
// build the -text()- option
local topt "text("
local i 0
local miny=`V'[1,2]
local maxy=`V'[1,2]
local minx=`V'[1,1]
local maxx=`V'[1,1]
forvalues i=1/`nbvar' {
local miny=min(`V'[`i',2],`miny')
local maxy=max(`V'[`i',2],`maxy')
local minx=min(`V'[`i',1],`minx')
local maxx=max(`V'[`i',1],`maxx')
}
if `maxx'*`minx'>0 {
local coefx=max(abs(`maxx'),abs(`minx'))
local coefx=`coefx'/20
}
else {
local coefx=abs(`maxx'-`minx')/20
}
if `maxx'*`minx'>0 {
local coefy=max(abs(`maxy'),abs(`miny'))
local coefy=`coefy'/20
}
else {
local coefy=abs(`maxy'-`miny')/20
}
forvalues i=1/`nbvar' {
// y value
if `V'[`i',2]>0 {
local topt `"`topt' `= (`V'[`i',2]+`coefy')*`stretch''"'
}
else {
local topt `"`topt' `= (`V'[`i',2]-`coefy')*`stretch''"'
}
// x value
if `V'[`i',1]<0 {
local topt `"`topt' `= (`V'[`i',1]-`coefx')*`stretch''"'
}
else {
local topt `"`topt' `= (`V'[`i',1]+`coefx')*`stretch''"'
}
// variable label
local lab: var label ``i''
if "`lab'"=="" {
local lab ``i''
}
local topt `"`topt' `"`lab'"' "'
}
if "`labdes'"=="" {
local labdes size(vsmall)
}
local topt `"`topt',`labdes')"'
// call with -colopts(nolabel)- and -text()- just built
biplot `varlist' `if' `in', `options' colopts(nolabel) `topt' stretch(`stretch')
end