/* * Faktorenstrukturvergleich nach Tucker (1951), Gebhardt (1967) und Skakun et al. (1976, 1977) zitiert nach Bortz (1999, S. 538ff) * * Timo Gnambs * URL: http://timo.gnambs.at * Zuletzt geändert: 2004-08-23 * * * Literatur: * > Bortz, J. (1999). Statistik für Sozialwissenschafter. Berlin: Springer. * > Gebhardt, F. (1967). Über die Ähnlichkeit von Faktorenmatrizen. Psychol. Beiträge 10, 591-599. * > Skakun, E. N., Maguire, T. O. & Hakistan, A. R. (1976). An application of inferential statistics to the factorial invariance problem. Multiv. bevh. res. 11, 325-328. * > Skakun, E. N., Maguire, T. O. & Hakistan, A. R. (1977). Erratum. Multiv. bevh. res. 12, 68. * > Tucker, L. R. (1951). A method for synthesis fo factor analytic studies. Personnel research section report no. 984. Washington: Departement of the Army. * */. matrix. * BEGINN der Konfiguration. * Stichprobenumfang der zu vergleichenden Samples. compute n1 = 100. compute n2 = 100. * Durch die Faktoren erklärter Varianzanteil in Prozent. compute var1 = 68.50. compute var2 = 82.00. * Signifikanzniveau als z-Wert. * 25%: 0,68; 10%: 1,28; 5%: 1.645; 1%: 2,326. compute z = 1.645. /* Zu vergleichenden Faktorladungsmatrizen A und B */ compute mat1 = {0.80,0.00;0.80,0.00;0.00,0.68;0.00,1.00}. compute mat2 = {0.80,0.40;0.80,0.40;0.80,-0.20;0.80,-0.60}. * Alternativ können die Daten natürlich aus einem bestehenden File eingelesen werden. Z. B.:. * get matr /file=demo.sav. * compute mat1 = transpos({matr(1,4:7:1);matr(2,4:7:1)}). * compute mat2 = transpos({matr(3,4:7:1);matr(4,4:7:1)}). * * ENDE der Konfiguration. /* Matrix M: M = B´ * A * A´ * B */ compute m = transpos(mat2) * mat1 * transpos(mat1) * mat2. /* Eigenwertmatrix E & Eigenvektor V */ call eigen(m, eigenv, eigenw). /* Matrix U: U = A´ * B * V *E^(-1/2) */ do if(ncol(mat1) > 1). compute #ews = sqrt(mdiag(eigenw)). else. compute #ews = sqrt(eigenw). end if. do if(#ews(1,1) > 0). compute #ewsr = {1/#ews(1,1)}. else. compute #ewsr = {0}. end if. do if(ncol(#ews) > 1). loop #j = 2 to nrow(#ews). do if (#ews(#j,#j) > 0). compute #ewsr = {#ewsr;1/(#ews(#j,#j))}. else. compute #ewsr = {#ewsr;0}. end if. end loop. compute u = transpos(mat1) * mat2 * eigenv * mdiag(#ewsr). else. compute u = transpos(mat1) * mat2 * eigenv * #ewsr. end if. /* Transformationsmatrix T: T = V * U´ */ compute matt = eigenv * transpos(u). /* Rotierte Matrix B* */ compute matr2 = mat2 * matt. /* C von A und B */ /* C von A und B* */ compute c = ident(ncol(mat1),1). compute cr = ident(ncol(mat1),1). loop #i = 1 to ncol(mat1). compute c(#i,1) = msum(mat1(:,#i) &* mat2(:,#i)) / sqrt(mssq(mat1(:,#i)) * mssq(mat2(:,#i))). compute cr(#i,1) = msum(mat1(:,#i) &* matr2(:,#i)) / sqrt(mssq(mat1(:,#i)) * mssq(matr2(:,#i))). end loop. /* FC von A und B */ /* FC von A und B* */ compute fc = trace(transpos(mat1) * mat2) / sqrt(trace(transpos(mat1) * mat1) * trace(transpos(mat2) * mat2)). compute fcr = trace(transpos(mat1) * matr2) / sqrt(trace(transpos(mat1) * mat1) * trace(transpos(matr2) * matr2)). /* Matrix E: E = A - B* */ compute e = mat1 - matr2. /* w */ compute w = sqrt(trace(transpos(e) * e / (nrow(mat1) * ncol(mat1)))). /* Stichprobenumfang n */ do if (n1 = n2). compute n = n1. else. compute n = 2 / ((1/n1) + (1/n2)). end if. /* Mittelwert von w */ compute wmean = sqrt(ncol(mat1) / n) / 4. /* Varianz von w (harmonisches Mittel von n) */ compute wvar = 1 / sqrt(12 * n * ncol(mat1)). /* kritisches w */ compute wkrit = wmean + (z * wvar). /* korrigiertes kritisches w */ compute cor1 = sqrt((100 - var1) / (ncol(mat1) + 1)) + 1. compute cor2 = sqrt((100 - var2) / (ncol(mat2) + 1)) + 1. compute wkkrit = wkrit * (cor1 + cor2) / 2. /* Ergebnisse ausgeben*/ print /title '----------------------'. print /title 'Faktorenstrukturvergleich'. print /title 'Autor: Timo Gnambs '. print /title '----------------------'. print /title 'Datenquelle'. print mat1 /format = f8.3 /title 'Faktorladungsmatrix 1'. print mat2 /format = f8.3 /title 'Faktorladungsmatrix 2'. print matr2 /format = f8.3 /title 'Rotierte Faktorladungsmatrix 2'. print /title ' '. print /title 'Kongruenkoeffizient C nach Tucker (1951)'. print c /format = f8.3 /title 'C der unrotierten Faktoren'. print cr /format = f8.3 /title 'C der rotierten Faktoren'. print /title ' '. print /title 'Kongruenkoeffizient FC nach Gebhardt (1967)'. print fc /format = f8.3 /title 'FC (unrotiert)'. print fcr /format = f8.3 /title 'FC (rotiert)'. print /title ' '. print /title 'Signifikanztest nach Skakun et al. (1976, 1977)'. print z /format = f8.3 /title 'z'. print w /format = f8.3 /title 'w'. print wkkrit /format = f8.3 /title 'Kritisches (korrigiertes) w'. print /title '----------------------'. end matrix. exe.