Home » Factor Congurence Calculation in Stata

# Factor Congurence Calculation in Stata

This is a code I had written for factor congruence analysis based on the formula that I was provided. It calculates the congruence for multiple datasets of results of factor analysis (again – not original data but results). Each db being an excel file with two sheets – factor analysis results of even numbed patients and odd numbered patients.

```.wp-block-code {
border: 0;
}

.wp-block-code > span {
display: block;
overflow: auto;
}

.shcb-language {
border: 0;
clip: rect(1px, 1px, 1px, 1px);
-webkit-clip-path: inset(50%);
clip-path: inset(50%);
height: 1px;
margin: -1px;
overflow: hidden;
position: absolute;
width: 1px;
word-wrap: normal;
word-break: normal;
}

.hljs {
box-sizing: border-box;
}

.hljs.shcb-code-table {
display: table;
width: 100%;
}

.hljs.shcb-code-table > .shcb-loc {
color: inherit;
display: table-row;
width: 100%;
}

.hljs.shcb-code-table .shcb-loc > span {
display: table-cell;
}

.wp-block-code code.hljs:not(.shcb-wrap-lines) {
white-space: pre;
}

.wp-block-code code.hljs.shcb-wrap-lines {
white-space: pre-wrap;
}

.hljs.shcb-line-numbers {
border-spacing: 0;
counter-reset: line;
}

.hljs.shcb-line-numbers > .shcb-loc {
counter-increment: line;
}

.hljs.shcb-line-numbers .shcb-loc > span {
}

.hljs.shcb-line-numbers .shcb-loc::before {
border-right: 1px solid #ddd;
content: counter(line);
display: table-cell;
text-align: right;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 1%;
}
```foreach db in db1.xls db2.xls db3.xls db4.xls {
clear
import excel "`db'", sheet("FA_even") firstrow case(lower)
count
rename itemname name
save FA_even_patients, replace

clear
import excel "`db'", sheet("FA_odd") firstrow case(lower)
rename itemname name
save FA_odd_patients, replace
duplicates report item

clear
use FA_even_patients
duplicates report item
drop if item ==.
count
merge 1:1 item using FA_odd_patients
drop _merge
drop if item ==.
mvdecode odd_* even_*, mv(0=.)
mvencode _all, mv(0.0)
save "congruence_dataset`db'.dta", replace

// FACTOR CONGRUENCE
save "congruence_dataset2`db'.dta", replace
capture log close
log using "congruence_analysis`db'.smcl", replace
foreach fa in  2 3 4 5 6 7 8 9 10  {  // FOR EACH NUMBER OF FACTORS
matrix mat`fa' = J(`fa',`fa',.) // CREATE EMPTY MATRIX
forvalues nx = 1(1)`fa' {   // Schedule loop to run till nx FACTOR Numbers for Even patients
forvalues ny = 1(1)`fa'  { // Schedule loop to run till nx FACTOR Numbers for Odd patients
foreach x in `fa'fac`nx' {  // Pick Factor for even patients
foreach y in `fa'fac`ny' {  // Pick Factor for Odd patients
capture drop e`x'_x_o`y'
gen e`x'_x_o`y' = even_`x' * odd_`y'       // A*B

capture drop o_`y'_sq
gen o_`y'_sq = odd_`y' * odd_`y'   // B-square

capture drop e_`x'_sq
gen e_`x'_sq = even_`x' * even_`x'	// A-Square

capture drop  e`x'_x_o`y'_s
egen e`x'_x_o`y'_s = total(e`x'_x_o`y')  // Sigma (A*B)

capture drop o_`y'_sqs
egen o_`y'_sqs = total(o_`y'_sq)  // Sigma (B-sq)

capture drop e_`x'_sqs
egen e_`x'_sqs = total(e_`x'_sq)   // Sigma (A-sq)

// CONGRUENCE FACTOR CALCULATION
capture drop e`x'_x_o`y'_c
gen e`x'_x_o`y'_c = e`x'_x_o`y'_s / (o_`y'_sqs *e_`x'_sqs)^0.5
di " Even `x' Vs. Odd `y' Congruence IS "
list e`x'_x_o`y'_c in 1
sum e`x'_x_o`y'_c
di r(mean)
matrix mat`fa'[`nx', `ny']=r(mean)
capture drop e_`x'_x_o_`y'
capture drop e`x'_x_o`y'
capture drop o_`y'_sq
capture drop e_`x'_sq
capture drop  e`x'_x_o`y'_s
capture drop o_`y'_sqs
capture drop e_`x'_sqs
}
}
}
}
mat rownames mat`fa'= even1_`fa'
mat colnames mat`fa'= odd1_`fa'
}
preserve

// SAVING MATRICES
foreach fa in  2 3 4 5 6 7 8 9 10  {
mat list mat`fa'
clear
svmat mat`fa', names(odd_`fa'_)
gen even = "even_`fa'_"
gen rownum = _n
egen col1 = concat (even rownum)
order col1
drop even
drop rownum
outsheet using "mat`fa'`db'.csv", comma replace
export excel using "`db'results_congruence.xlsx", sheet("`fa'_factors") firstrow(variables) sheetreplace
}
restore
save "congruence_analysis3`db'.dta", replace
capture log close
view "congruence_analysis`db'.smcl"

}```Code language: PHP (php)```

This example show shows the following techniques, some of which may help:

• Creating Empty Matrix
• Replacing contents of cell of a matrix using indexation
• Matrix rownames and column names
• Saving matrices as data