Noen SEM-tips. AMOS er et glimrende program for kausalmodeller eller målemodeller med relativt få variabler. En grafisk definering av modellen reduserer mulighetene for feiltenking, og figurene kan gjøres «publiseringsferdige». Men blir det mange variabler, så er det mye jobb å tegne modellen. Nå kan det jo hende at lesere eller redaktører gjerne vil ha en slik visuell fremstilling, og da er jo selvsagt ikke jobben bortkastet. Her er noen tips for definering av modeller i AMOS uten bruk av tegneprogrammet! Trikset er da å bruke en lignende strategi som i SPSS: sett opp modellen med få variabler, definerer analysen (særlig under View, Analysis properties, Output). Deretter «paster» man syntax til en editor. Så redigerer man denne for å få med alle variabler og kjører analysen. Men da få man jo ikke den flotte figuren uten videre i artikkelen sin.. Eller man kan bruke programmet MPLUS. Dette gir mulighet for analyser av flere modeller enn AMOS. Det er et utbredt brukermiljø med diverse fora på nettet. Manualen er god og det ligger mange eksempler med programmet når det installeres. Syntaksen er (om ikke helt gjennomsiktig) ganske enkel. Ulempen er selvsagt at man må ha adgang til programmet, og lisenser er ganske kostbare. Eller man kan bruke R. Men vær obs på at R i utgangspunktet er et programmeringsspråk (S) og fungerer helt annerledes enn SPSS, MPLUS og AMOS! Som AMOS har dette et utbredt brukermiljø og litt googling gir forslag til de fleste analysemetoder. En opplagt fordel med R er at dette er gratis. Jeg legger ved et eksempel på samme analyse med MPLUS og R lenger bak her men først et eksempel med AMOS. Og jeg bruker eksemplet med en to-faktormodell for variablene i «WISC.SAV» som vi brukte tidligere. Som dere ser gir programmene identiske resultater men analysen er vesentlig enklere å sette opp i MPLUS. På den annen side er man litt dreven med copy-paste, så går det fort i AMOS også mens R krever litt forarbeide med innstallering av pakker og studering av hvordan systemet virker før man kommer i gang.
Med AMOS: Start Amos. Åpne spss-datafilen på vanlig måte (File, Data Files). Velg innstillinger jeg ville i hvert fall tatt med View, Analysis properties, Output og tatt med Standardized estimates og Squared multiple correlations. Tegn opp modellen med få variabler. Her er det ikke nøye om det ser pent ut i det hele tatt. Kan nå se for eksempel slik ut: Velg Tools, Write a program. Amos skriver nå ut et Visual Basic program som definerer analysen i et editorvindu. Analysen kan nå redigeres enten i den editoren, eller bruk ctrl+a for å velge alt og kopier over i en annen editor. Dette programmet kunne nå se slik ut: #Region "Header" Imports System Imports System.Diagnostics Imports Microsoft.VisualBasic Imports AmosEngineLib Imports AmosGraphics Imports AmosEngineLib.AmosEngine.TMatrixID Imports PBayes #End Region Module MainModule Public Sub Main() Dim Sem As AmosEngine Sem = New AmosEngine Sem.TextOutput AnalysisProperties(Sem) ModelSpecification(Sem) Sem.FitAllModels() Sem.Dispose() End Sub Sub ModelSpecification(Sem As AmosEngine) Sem.GenerateDefaultCovariances(False) Sem.BeginGroup("M:\data\kurs\drpsy\sem\factor\amos\wisc.sav", "wisc") Sem.GroupName("Group number 1") Sem.AStructure("info = (1) e1 + (1) V") Sem.AStructure("comp = (1) e2 + V") Sem.AStructure("pictcomp = (1) e6 + (1) P") Sem.AStructure("parang = (1) e7 + P") Sem.AStructure("V <--> P") Sem.Model("Default model", "") End Sub
Sub AnalysisProperties(Sem As AmosEngine) Sem.Iterations(50) Sem.InputUnbiasedMoments Sem.FitMLMoments Sem.Standardized Sem.Smc Sem.Seed(1) End Sub End Module Dette ser jo ikke alt for oversiktlig ut men heldigvis er det bare Sub ModelSpecification(Sem As AmosEngine) som skal endres. Ikke gjør endringer andre steder enn der før dere er sikre på hva dere gjør! For å få alle variabler med i modellen kan denne for eksempel endres til: Sub ModelSpecification(Sem As AmosEngine) Sem.GenerateDefaultCovariances(False) Sem.BeginGroup("M:\data\kurs\drpsy\sem\factor\amos\wisc.sav", "wisc") Sem.GroupName("Group number 1") Sem.AStructure("info = (1)V + (1)e1") Sem.AStructure("comp = V + (1)e2") Sem.AStructure("arith = V + (1)e3") Sem.AStructure("simil = V + (1)e4") Sem.AStructure("vocab = V + (1)e5") Sem.AStructure("digit = V + (1)e6") Sem.AStructure("pictcomp = (1)P + (1)e7") Sem.AStructure("parang = P + (1)e8") Sem.AStructure("block = P + (1)e9") Sem.AStructure("object = P + (1)e10") Sem.AStructure("V <--> P") Sem.Model("Default model", "") End Sub Pass på riktig filreferanse etter Sem.BeginGroup! Når syntaksen er redigert i Amos-editoren eller limt inn på riktig sted fra en annen editor er det bare å trykke RUN i editorvinduet, så skulle alt være gjort. Ferdige programmer hentes inn i editoren ved å starte denne (finnes under Amos-seksjonen i «all programs», og velge RUN i editoren. Komprimert output på neste side.
Resultater fra AMOS: Regression Weights: (Group number 1 - Default model) Estimate S.E. C.R. P Label arith <--- V.589.084 6.989 *** simil <--- V 1.012.116 8.748 *** comp <--- V.926.108 8.586 *** vocab <--- V 1.019.107 9.519 *** info <--- V 1.000 parang <--- P.711.154 4.612 *** block <--- P 1.041.183 5.673 *** pictcomp <--- P 1.000 object <--- P.911.175 5.221 *** digit <--- V.476.100 4.785 *** Standardized Regression Weights: (Group number 1 - Default model) Estimate arith <--- V.565 simil <--- V.704 comp <--- V.691 vocab <--- V.769 info <--- V.760 parang <--- P.472 block <--- P.678 pictcomp <--- P.602 object <--- P.566 digit <--- V.390 Correlations: (Group number 1 - Default model) Estimate V <--> P.589 Squared Multiple Correlations: (Group number 1 - Default model) Estimate object.320 block.460 parang.223 pictcomp.362 digit.152 vocab.592 simil.495 arith.319 comp.477 info.577
Baseline Comparisons Model NFI RFI IFI TLI Delta1 rho1 Delta2 rho2 CFI Default model.890.855.955.939.954 Saturated model 1.000 1.000 1.000 Independence model.000.000.000.000.000 RMSEA Model RMSEA LO 90 HI 90 PCLOSE Default model.060.028.088.274 Independence model.241.222.260.000
Med MPLUS: Først må alle variabler som skal i modellen eksporteres fra SPSS til en «comma-delimited» tekstfil. Denne filen kan IKKE ha variabelnavn som første linje. Her eksporterte jeg til: M:\data\kurs\drpsy\sem\factor\mplus\wisc.csv. Allerede her kan man få trøbbel. SPSS eksporterer slike filer på en måte som gjøre dem uleselige for MPLUS. Excel eksporterer «comma-delimited» med semi-kolon i stedet for komma, osv. Et annet tekstformat kan fungere bedre. Husk også at MPLUS ikke aksepterer variabelnavn som er lengre enn 8 tegn, og æ, ø, og å kan dere glemme. MPLUS kan også generere ganske pene figurer (se nedenfor). Deretter startes MPLUS editoren og analysen defineres: TITLE: WISC DATA: FILE IS M:\data\kurs\drpsy\sem\factor\mplus\wisc.csv; VARIABLE: NAMES ARE client,info,comp,arith,simil,vocab,digit, pictcomp,parang,block,object,coding; USEVARIABLES ARE info-object; MODEL: f1 BY info-digit; f2 BY pictcomp-object; ANALYSIS: ESTIMATOR=ML; OUTPUT: STANDARDIZED (STDyx); Resultater fra MPLUS: Chi-Square Test of Model Fit Value 55.305 Degrees of Freedom 34 P-Value 0.0119 RMSEA (Root Mean Square Error Of Approximation) Estimate 0.060 90 Percent C.I. 0.028 0.088 Probability RMSEA <=.05 0.268 CFI/TLI CFI 0.954 TLI 0.938 MODEL RESULTS Two-Tailed Estimate S.E. Est./S.E. P-Value F1 F2 F2 BY INFO 1.000 0.000 999.000 999.000 COMP 0.926 0.112 8.273 0.000 ARITH 0.589 0.083 7.111 0.000 SIMIL 1.012 0.118 8.586 0.000 VOCAB 1.019 0.104 9.760 0.000 DIGIT 0.476 0.099 4.837 0.000 BY PICTCOMP 1.000 0.000 999.000 999.000 PARANG 0.711 0.158 4.500 0.000 BLOCK 1.041 0.191 5.462 0.000 OBJECT 0.911 0.173 5.274 0.000 WITH F1 2.288 0.530 4.319 0.000
STANDARDIZED MODEL RESULTS STDYX Standardization Two-Tailed Estimate S.E. Est./S.E. P-Value F1 F2 F2 BY INFO 0.760 0.042 18.100 0.000 COMP 0.691 0.048 14.247 0.000 ARITH 0.565 0.059 9.568 0.000 SIMIL 0.704 0.047 15.040 0.000 VOCAB 0.769 0.040 19.012 0.000 DIGIT 0.390 0.071 5.498 0.000 BY PICTCOMP 0.602 0.068 8.810 0.000 PARANG 0.472 0.075 6.320 0.000 BLOCK 0.678 0.064 10.524 0.000 OBJECT 0.566 0.069 8.185 0.000 WITH F1 0.589 0.077 7.629 0.000 R-SQUARE Observed Two-Tailed Variable Estimate S.E. Est./S.E. P-Value INFO 0.577 0.064 9.050 0.000 COMP 0.477 0.067 7.123 0.000 ARITH 0.319 0.067 4.784 0.000 SIMIL 0.495 0.066 7.520 0.000 VOCAB 0.592 0.062 9.506 0.000 DIGIT 0.152 0.055 2.749 0.006 PICTCOMP 0.362 0.082 4.405 0.000 PARANG 0.223 0.070 3.160 0.002 BLOCK 0.460 0.087 5.262 0.000 OBJECT 0.320 0.078 4.093 0.000
Med R: # Trenger lavaan library(lavaan) # Les SPSS data library(haven) wisc <- read_sav("m:/data/kurs/drpsy/sem/factor/amos/wisc.sav") View(wisc) Model1 <- ' f1 =~ info+comp+arith+simil+vocab+digit f2 =~ pictcomp+parang+block+object f1 ~~ f2 ' res <- sem(model1, data=wisc) summary(res, standardized=true) standardizedsolution(res) fitmeasures(res,c("chisq","rmsea","tli")) ---------------------------------------------------------------- Resultater fra R: Standardiserte ladninger: lhs op rhs est.std se z pvalue 1 f1 =~ info 0.760 0.041 18.424 0 2 f1 =~ comp 0.691 0.048 14.493 0 3 f1 =~ arith 0.565 0.059 9.625 0 4 f1 =~ simil 0.704 0.046 15.149 0 5 f1 =~ vocab 0.769 0.040 19.048 0 6 f1 =~ digit 0.390 0.071 5.509 0 7 f2 =~ pictcomp 0.602 0.067 8.965 0 8 f2 =~ parang 0.472 0.075 6.333 0 9 f2 =~ block 0.678 0.064 10.673 0 10 f2 =~ object 0.566 0.069 8.185 0 11 f1 ~~ f2 0.589 0.075 7.806 0 Uforklart varians (vil dere ha forklart - så for info: 1 -.423 =.577 12 info ~~ info 0.423 0.063 6.744 0 13 comp ~~ comp 0.523 0.066 7.943 0 14 arith ~~ arith 0.681 0.066 10.277 0 15 simil ~~ simil 0.505 0.065 7.721 0 16 vocab ~~ vocab 0.408 0.062 6.572 0 17 digit ~~ digit 0.848 0.055 15.362 0 18 pictcomp ~~ pictcomp 0.638 0.081 7.893 0 19 parang ~~ parang 0.777 0.070 11.054 0 20 block ~~ block 0.540 0.086 6.265 0 21 object ~~ object 0.680 0.078 8.697 0 Goodness of fit: chisq rmsea tli 55.305 0.060 0.938