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.

299 lines
6.1 KiB
Plaintext

7 months ago
capture program drop convdiv
program convdiv
syntax varlist, PARTition(numlist integer >0) [SCOrename(string) TCONVdiv(real 0.4) convdivboxplots]
preserve
qui set autotabgraphs on
local C = 0
foreach z in `partition' {
local C = `C' + `z'
}
local nbvars : word count `varlist'
if `C' != `nbvars' {
di in red "The sum of the numbers in the partition option is different from the number of variables precised in varlist"
exit 119
}
local P:word count `partition'
if "`scorename'" !="" {
local S:word count `scorename'
if `P'!=`S' {
di in red "The number of score names given is different from the number of dimensions in the partition option"
exit 119
}
}
qui detect `varlist', partition(`partition')
matrix A = r(Corrrestscores)
matrix B = r(Corrscores)
local i = 1
local y = 1
foreach x in `partition' {
if `i' == 1 local s = `x'
else local s = `s' +`x'
forvalues z = `y'/`s' {
matrix B[`z',`i'] = A[`z',`i']
}
local `i++'
local y = `s'+1
}
if "`scorename'"!="" {
matrix colnames B = `scorename'
}
else {
local name
local nname
forvalues i = 1/`P' {
local name "Dim`i'"
local nname `nname' `name'
}
local scorename = "`nname'"
matrix colnames B = `scorename'
}
/* coupure noms des scores */
/*
local i = 1
foreach s in `scorename' {
local len = length("`s'")
if `len' > 5 {
local c = substr("`s'",1,4)
local d = substr("`s'",-1,1)
local s`i' "`c'" "~" "`d'"
}
else local s`i' = "`s'"
local sc `sc' `s`i''
local `++i'
}
*/
/* coupure noms des items */
/*
local i = 1
foreach s in `varlist' {
local len = length("`s'")
if `len' > 10 {
local c = substr("`s'",1,9)
local d = substr("`s'",-1,1)
local var`i' "`c'" "~" "`d'"
}
else local var`i' = "`s'"
local `++i'
}
*/
local i = 1
foreach v in `varlist' {
local var`i' = abbrev("`v'",10)
local `++i'
}
local i = 1
foreach s in `scorename' {
local s`i' = abbrev("`s'",7)
local sc `sc' `s`i''
local `++i'
}
di as result "{hline}"
di "{bf:Correlation matrix}"
di "{hline}"
di
/*
local i = 1
foreach x in `varlist' {
local var`i' = "`x'"
local `++i'
}
*/
/*
tokenize `sc'
local max = 3
forvalues j=1/`P' {
local len`j' = length("`s`j''")
if `len`j'' > `max' local max = `len`j''
}
local maxit = 1
forvalues i=1/`nbvars' {
local len = length("`var`i''")
if `len' > `maxit' local maxit = `len'
}
*/
local dec = 10
local col = `dec'
local decit = 14
local colit = `decit'
local col1 = `decit'
forvalues i=1/`P' {
di _col(`col1') "{bf:`s`i''}" _c
local col1 = `col1' + `dec'
}
di
local h = (`P'-1)*`dec'+`decit'+4
di "{hline `h'}"
local i = 1
local j = 1
local y = 1
foreach p in `partition' {
if `j' == 1 local s = `p'
else local s = `s' +`p'
forvalues z = `y'/`s' {
di as text "{bf:`var`z''}" _c
local col = `decit'-1
local dd = `z' // [counting cptdiv (one per item)]
forvalues k = 1/`P' {
local t = B[`z',`k']
local t : di %6.3f `t'
if `k' == `i' {
if `t' < `tconvdiv' {
di in red _col(`col') "{bf:`t'}" _c
local cptconv = `cptconv'+1
local col = `col' + `dec'
}
else {
di _col(`col') "{bf:`t'}" _c
local col = `col' + `dec'
}
}
else {
if B[`z',`k'] > B[`z',`i'] {
di in red _col(`col') "`t'" _c
if `dd' == `z' local cptdiv = `cptdiv'+1 // [one per item]
local dd = 0
local col = `col' + `dec'
}
else {
di as text _col(`col') "{text:`t'}"_c
local col = `col' + `dec'
}
}
}
di
}
di "{dup `h':-}"
local `i++'
local `j++'
local y = `s'+1
}
local y = 1
local h = 1
local np : word count `partition'
foreach p in `partition' {
if `h' == 1 local s = `p'
else local s = `s' +`p'
forvalues j = 1/`np' {
mat C_`h'_`j' = B[`y'..`s',`j']
tempvar tp_`h'_`j'
mat colnames C_`h'_`j' = `tp_`h'_`j''
svmat C_`h'_`j', names(col)
*rename C_`h'_`j'
*mat li C_`h'_`j'
}
local `++h'
local y = `s'+1
}
if "`convdivboxplots'" != "" {
forvalues h = 1/`np' {
tokenize `scorename'
local call = ""
local callbox = ""
local callleg = ""
forvalues j = 1/`np' {
*rename C_`h'_`j' _``j''
*di "`tp_`h'_`j''"
local call `call' /*_``j''*/ `tp_`h'_`j''
*if `h' == `j' local color = "blue"
*else local color = ""
local callbox `callbox' box(`j',fcolor(`color') lcolor(`color')) marker(`j', mcolor(`color'))
local lab = "``j''"
local lab = `"`lab'"'
local callleg `callleg' `j' "`lab'"
*di `"`callleg'"'
*di "`call'"
}
graph box `call', name("Conv_div_``h''",replace) `callbox' legend(order(`"`callleg'"') stack rows(1) size(small)) title(Correlations between items of ``h'' and dimensions) yline(`tconvdiv', lpattern(dot) lcolor(black))
qui set autotabgraphs on
*drop `call'
}
}
/*
foreach var of varlist ioc1 ioc2 ioc3 {
loc varlab `""`:var l `var''""'
loc varlabs `"`varlabs'`varlab'"'
di "`varlab'"
}
*/
/*
svmat B
local y = 1
local h = 1
qui gen d = 0
foreach p in `partition' {
if `h' == 1 local s = `p'
else local s = `s' +`p'
replace d = `h' in `y'/`s'
local `++h'
local y = `s'+1
}
twoway (scatter B1 d)
*/
local t : di %5.3f `tconvdiv'
local p1 = (`nbvars'-`cptconv')/`nbvars'*100
local p1 : di %4.1f `p1'
local p2 = (`nbvars'-`cptdiv')/`nbvars'*100
local p2 : di %4.1f `p2'
di
di as result "Convergent validity:" _c
di as text " `=`nbvars'-`cptconv''/`nbvars' items (`p1'%) have a correlation coefficient with the score of "
di _col(22) "their own dimension greater than `t'"
di
di as result "Divergent validity:" _c
di as text " `=`nbvars'-`cptdiv''/`nbvars' items (`p2'%) have a correlation coefficient with the score"
di _col(22) "of their own dimension greater than those computed with other scores."
end
*convdiv ioc1-ioc37, partition(4 4 7 3 3 4 7 5) scorename(Hddfdfdffda PSE W BCC Afdfdfererdfc AE LI MOC) tconvdiv(0.4) // convdivboxplots
*convdiv x1-x40, partition(5 5 5 5 5 5 5 5) scorename(Hdfda PSE W BCC Afdfdfererdfc AE LI MOC) tconvdiv(0.4) // convdivboxplots