📄 _mds_display_classical.ado
字号:
*! version 1.0.0 24mar2005
program _mds_display_classical
version 8
syntax [, CONfig Neigen(str) noPLot ]
if !inlist("`neigen'", "", "max") {
confirm integer number `neigen'
if `neigen' < 0 {
dis as err "invalid neigen()"
exit 198
}
}
else if "`neigen'" == "max" {
local neigen = e(np)
}
else {
local neigen = 10
}
// header
dis _n as txt "Classical metric multidimensional scaling"
_mds_dataheader
if `e(addcons)' > 0 {
dis _col(5) as txt "Const. added to D^2 = " ///
as res %9.0g e(addcons) _c
}
dis _col(47) as txt "Number of obs = " ///
as res %9.0f e(N)
dis _col( 5) as txt "Eigenvalues > 0 = " ///
as res %9.0f e(np) ///
_col(47) as txt "Mardia fit measure 1 = " ///
as res %9.4f `e(mardia1)'
dis _col( 5) as txt "Retained dimensions = " ///
as res %9.0f e(p) ///
_col(47) as txt "Mardia fit measure 2 = " ///
as res %9.4f `e(mardia2)'
if "`e(unique)'" == "0" {
dis _col(5) as txt ///
"(solution not unique in " e(p) " dimensions " ////
"due to common eigenvalues)"
}
// tables and plots
if (`neigen' > 0) EigenTable `neigen'
if ("`config'" != "") estat config
if ("`plot'" == "") mdsconfig
end
program EigenTable
args neigen
tempname csumabs csumsq evabs evsq sumabs sumsq Ev
local n = min(`neigen', e(np))
matrix `Ev' = e(Ev)
local m = colsof(`Ev')
scalar `sumabs' = 0
scalar `sumsq' = 0
forvalues i = 1/`m' {
scalar `sumabs' = `sumabs' + abs(`Ev'[1,`i'])
scalar `sumsq' = `sumsq' + `Ev'[1,`i']^2
}
dis
Hline TT
dis as txt _col(18) "{c |} " _skip(18) ///
"abs(eigenvalue) (eigenvalue)^2"
dis as txt _col(5) " Dimension {c |} " ///
" Eigenvalue Percent Cumul. Percent Cumul."
Hline +
scalar `csumabs' = 0
scalar `csumsq' = 0
forvalues i = 1/`n' {
scalar `evabs' = abs(`Ev'[1,`i'])
scalar `evsq' = `Ev'[1,`i']^2
scalar `csumabs' = `csumabs' + `evabs'
scalar `csumsq' = `csumsq' + `evsq'
dis as txt _col(10) %6.0f `i' " {c |} " ///
as res _col(21) %10.0g `Ev'[1,`i'] ///
as res _col(38) %6.2f 100*( `evabs'/`sumabs') ///
_col(48) %6.2f 100*(`csumabs'/`sumabs') ///
_col(62) %6.2f 100*( `evsq'/`sumsq') ///
_col(72) %6.2f 100*( `csumsq'/`sumsq')
if (`i'==e(p) & e(p)<`n') Hline +
}
Hline BT
end
program Hline
args c
dis as txt _col(5) "{hline 13}{c `c'}{hline 60}"
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -