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
75 lines
2.3 KiB
Plaintext
8 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
|