2017-05-13 3 views
0

Ich würde gerne eine Zuverlässigkeitsanalyse durchführen und Cronbachs Alpha maximieren. Ich habe bereits das Makro für spss, aber ich weiß nicht, wo ich die Namen der Variablen für die Analyse setzen soll und was ich einstellen muss, damit das Makro zu meinen Variablen passt. Die Variablennamen sind:alphamax mit Makro in spss

ZQ103_05 & ZQ103_01 & ZQ408_04 & ZQ305_04 & ZQ405_03 & ZQ406_02 & ZQ201_06 & ZQ301_06 & ZQ410_07 & ZQ201_07 & ZQ301_07 & ZQ406_05 & ZQ406_06 & ZQ408_05 & ZQ201_08 & ZQ301_08 & ZQ305_06 & ZQ409_05 & ZQ407_07 & ZQ411_02 & ZQ203_09 & ZQ203_04 & ZQ203_06 & ZQ203_07 & ZQ203_09 & ZQ203_10

Hier ist das Makro:

DEFINE alphamax (!POSITIONAL !CHAREND ('/')). 
    PRESERVE. 
    SET MXLOOPS = 100000000. 
    SET LENGTH = NONE. 
    matrix. 
    get dt/variables = !1/names = nm/missing = omit. 
    compute total = rsum(dt). 
    compute it = ncol(dt). 
    compute n = nrow(dt). 
    compute dt = {dt,total}. 
    compute ones = make(n,1,1). 
    compute dtc = dt-(ones*(csum(dt)&/n)). 
    compute vcov = (1/(n-1))*(t(dtc)*dtc). 
    compute ivar = diag(vcov). 
    compute dt = dt(:,1:it). 
    compute x = make(1,it,0). 
    compute k = 0. 
    compute y = make(((2&**it)-1)-it,it+3,0). 
    loop j = 1 to ((2&**it)-1). 
    compute x(1,1)=x(1,1)+1. 
    loop i = 1 to it. 
    do if x(1,i) = 2. 
    compute x(1,i)=0. 
    compute x(1,i+1)=x(1,i+1)+1. 
    end if. 
    end loop. 
    do if rsum(x) > 1. 
    compute ttl = dt*t(x). 
    compute tmp = {ttl,total}. 
    compute tmpc = tmp-(ones*(csum(tmp)&/n)). 
    compute vcov = (1/(n-1))*(t(tmpc)*tmpc). 
    compute var = diag(vcov). 
    compute r = mdiag(1/sqrt(var))*vcov*mdiag(1/sqrt(var)). 
    compute r = r(2,1). 
    compute alpha=(rsum(x)/(rsum(x)-1))*(1-(x*ivar(1:it,1))/var(1,1))). 
    compute k = k + 1. 
    compute y(k,:)= {x, alpha, r, rsum(x)}. 
    end if. 
    end loop. 
    compute res = make(it,3,0). 
    loop i = 1 to it. 
    compute pre = {make(nrow(y),1,1), y(:,i)}. 
    compute b = inv(t(pre)*pre)*t(pre)*y(:,(it+1)). 
    compute res(i,:)={b(1,1),(b(1,1)+b(2,1)),b(2,1)}. 
    end loop. 
    compute tp = make(it,1,-999). 
    compute tp2 = tp. 
    compute tp3 = tp. 
    compute tp4 = tp. 
    loop i = 1 to (nrow(y)). 
    do if (tp(y(i,it+3),1) < y(i,it+1)). 
    compute tp(y(i,it+3),1) = y(i,it+1). 
    compute tp2(y(i,it+3),1) = y(i,it+2). 
    end if. 
    do if (tp3(y(i,it+3),1) < y(i,it+2)). 
    compute tp3(y(i,it+3),1) = y(i,it+2). 
    compute tp4(y(i,it+3),1) = y(i,it+1). 
    end if. 
    end loop. 
    compute tmp = {t({2:it}), tp(2:it,1), tp2(2:it,1)}. 

    print/title = "*** Subtest Statistics are in Data Window ***". 
    print res/title = "Mean Scale Alpha for All Possible Scales With 
    and Without Item"/clabels = "Without" "With" "Gain"/rnam/format=F8.4. 
    print tmp/title = "Maximum alpha (a_sub) as a Function of Number 
    of Items"/clabels = "Items" "a_sub" "r_sub"/format = F8.4. 
    print/title = "* r_sub is correlation between scale with maximum 
    alpha and full scale total.". 
    compute tmp = {t({2:it}), tp3(2:it,1), tp4(2:it,1)}. 
    print tmp/title = "Maximum Subscale-Full Scale Correlation as a 
    Function of Number of Items"/clabels = "Items" "r_sub" 
    "a_sub"/format = F8.4. 
    compute nms = {nm, "a_sub", "r_sub", "items"}. 
    print n/title = "Number of cases:". 
    save y/outfile = */names = nms. 
    END MATRIX. 
    format !1 items (F2.0). 
    format a_sub r_sub (F6.4). 
    variable labels a_sub "Cronbach's alpha". 
    variable labels r_sub 'Correlation with total from full scale'. 
    variable labels items 'Number of Items'. 
    sort cases by a_sub (d). 
    RESTORE. 
    !END DEFINE. 

Vielen Dank im Voraus!

+0

Ich habe versucht, die Variablen für „Namen“ hinzufügen, aber es hat nicht funktioniert .. – Fox

Antwort

0

Wo Sie !1 im Makro Körper zu sehen ist, wo das Makro die Variablennamen automatisch in der Syntax pflanzen, wenn Sie es nennen.

Scheinbar alles, was Sie tun müssen, ist das Makro mit dem Variablennamen nennen folgende, auf diese Weise (beachten Sie, nicht „&“ Zeichen zwischen Variablen):

alphamax yourVar1 yourVar2 yourVar3 etc'. 
+0

Es hat nicht funktioniert ... Ich schrieb die Variablennamen in der ersten Spalte nach definieren und alphamax. Das bekomme ich: > Fehler # 6807 in Spalte 11. Text: ZQ103_05 > Der DEFINE-Befehl enthält keine Parameterdefinitionen in Klammern. > Das Fehlen von Parametern muss durch einen Satz von Klammern nach > der Makroname angezeigt werden. > Die Ausführung dieses Befehls wird gestoppt. > Fehler # 6846 in Spalte 120. Text:! POSITIONAL > Ein Makroausdruck enthält eine nicht definierte Makrovariable oder einen Makrooperator > der in einem Ausdruck nicht gültig ist. – Fox

+0

Verwenden Sie einfach die von mir gepostete Syntax (ersetzen Sie "yourVar1" usw. durch Ihre realen Variablennamen) - Fügen Sie 'define' NICHT hinzu. ERKLÄRUNG: Die von Ihnen gepostete Syntax ist die Makrodefinition. Sobald Sie es ausführen, wird das Makro in den Speicher geladen. Um das Makro aufzurufen, verwenden Sie den Makronamen und geben ihm die Variablenliste, wie in meiner obigen Antwort. EMPFEHLUNG: Da Sie Makros verwenden, ist es vielleicht eine gute Idee, etwas über sie zu lesen, damit Sie bei Problemen nicht desorientiert werden. –

+0

Ich habe es versucht und es gibt geschrieben "erwarten END MATRIX-Befehl". Ich schrieb MATRIX, dann das Makro und dann END MATRIX. aber ich bekomme wieder Fehler. – Fox