p.specht
| Sozialforscher versuchen Thesen wie "Angehörige bildungsferner Schichten oder aus Gebieten mit geringer Kaufkraft werden selten Generaldirektor" statistisch zu belegen. Damit moderne Clusterungs- und Korrelationsverfahren aber funktionieren, müssen erst die Umfrageskalen (Was bedeutet bildungsfern, was kaufkraftarm) miteinander wertmäßig vergleichbar gemacht werden. Als Verfahren hierzu wird gerne die Z-Spaltennormierung herangezogen, die ich testhalber Schritt per Schritt samt Probe zum besseren Nachvollziehen dargestellt habe.
Windowtitle "Spaltenweise z-Normierung zur Skalen-Vergleichbarmachung der [n,m]-Erfassungsmatrix einer Umfrage"
'(Copyleft) 2015-04 by P. Specht, Wien. Ohne jede Gewähr!
Windowstyle 24:font 2
Window 0,0-%maxx,%maxy
' Dimension der gewünschten Testmatrix:
Var n&=5:var m&=5
Declare M![n&-1,m&-1],sum!,s![m&-1],Xm![m&-1],D![n&-1,m&-1],txt$
Declare Q![n&-1,m&-1],qs![m&-1],v![m&-1],sigma![m&-1],i&,j&,Z_sp![n&-1,m&-1]
Declare p![m&-1],pz![m&-1],ps![m&-1]'Probevektoren
txt$=" ["+str$(n&)+","+str$(m&)+"]-Testmatrix M, mit Zufallswerten belegt"
Randomize
whileloop 0,n&-1:i&=&Loop
whileloop 0,m&-1:j&=&Loop
M![i&,j&]=rnd(10000)'rnd()*10^(rnd(53)-18)
endwhile
endwhile
Probe2:
print:print txt$;
whileloop 0,n&-1:i&=&Loop
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",M![i&,j&]),
endwhile
endwhile
print
waitinput
txt$=" Zeilenvektor s[] der Spaltensummen von M[,]"
whileloop 0,m&-1:j&=&Loop
sum!=0
whileloop 0,n&-1:i&=&Loop
sum!=sum!+M![i&,j&]
endwhile
s![j&]=sum!
endwhile
print:print txt$;
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",S![j&]),
endwhile
print
waitinput
txt$=" Zeilenvektor Xm[] der Spaltenmittelwerte"
whileloop 0,m&-1:j&=&Loop
xm![j&]=S![j&]/n&
endwhile
print:print txt$;
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",xm![j&]),
endwhile
print
waitinput
txt$=" Matrix D[,] der auf Spaltenmitten zentrierten Spalten"
whileloop 0,m&-1:j&=&Loop
whileloop 0,n&-1:i&=&Loop
D![i&,j&]=M![i&,j&]-xm![j&]
endwhile
endwhile
print:print txt$;
whileloop 0,n&-1:i&=&Loop
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",D![i&,j&]),
endwhile
endwhile
print
waitinput
txt$=" Probe: Summe der Zentrierten Werte muss fast 0 sein!"
whileloop 0,m&-1:j&=&Loop
sum!=0
whileloop 0,n&-1:i&=&Loop
sum!=sum!+D![i&,j&]
endwhile
p![j&]=sum!
endwhile
print:print txt$;
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",p![j&]),
endwhile
print
waitinput
txt$=" Matrix Q der Quadrate der (Spaltenmittelwert-zentrierten) Werte D"
Whileloop 0,m&-1:j&=&Loop
whileloop 0,n&-1:i&=&Loop
Q![i&,j&]=sqr(D![i&,j&])
endwhile
endwhile
print:print txt$;
whileloop 0,n&-1:i&=&Loop
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",Q![i&,j&]),
endwhile
endwhile
print
waitinput
txt$=" Zeilenvektor qs[] der Spaltensummen von Q[,]"
whileloop 0,m&-1:j&=&Loop
sum!=0
whileloop 0,n&-1:i&=&Loop
sum!=sum!+Q![i&,j&]
endwhile
qs![j&]=sum!
endwhile
print:print txt$;
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",qs![j&]),
endwhile
print
waitinput
txt$=" Zeilenvektor v[] der Spaltenvarianzen von D[,]"
whileloop 0,m&-1:j&=&Loop
v![j&]=qs![j&]/n&
endwhile
print:print txt$;
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",v![j&]),
endwhile
print
waitinput
txt$=" Zeilenvektor sigma[] der Spalten-Standardabweichungen von D[,]"
whileloop 0,m&-1:j&=&Loop
'case sigma![j&]<>0
sigma![j&]=sqrt(v![j&])
endwhile
print:print txt$;
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",sigma![j&]),
endwhile
print
waitinput
txt$=" Ergebnismatrix Z_sp der spaltenweise z-normierten Werte der Originalmatrix M"
Whileloop 0,m&-1:j&=&Loop
whileloop 0,n&-1:i&=&Loop
if sigma![j&]<>0
Z_sp![i&,j&]=D![i&,j&]/Sigma![j&]
'else
' print "********** Sigma[";str$(j&);"]=0 ignored! ***************":beep:waitinput
' Z_sp![i&,j&]=D![i&,j&]
endif
endwhile
endwhile
:::::::::::::::::::cls
print:print txt$;
whileloop 0,n&-1:i&=&Loop
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",Z_sp![i&,j&]),
endwhile
endwhile
print
waitinput
txt$=" Probe 1: Summe der Z-normierten Spaltenwerte muss nahe 0 sein!"
whileloop 0,m&-1:j&=&Loop
sum!=0
whileloop 0,n&-1:i&=&Loop
sum!=sum!+Z_sp![i&,j&]
endwhile
pz![j&]=sum!
endwhile
print:print txt$;
whileloop 0,m&-1:j&=&Loop
print tab(j&*27);format$("%g",pz![j&]),
endwhile
print
waitinput
print
print " Probe 2: Die Standardabweichung der Spaltenwerte von Z_sp[,] muss 1 ergeben."
print " Dazu wird Z_sp in M geladen und das Programm nochmals gestartet! "
waitinput
whileloop 0,m&-1:j&=&Loop
whileloop 0,n&-1:i&=&Loop
M![i&,j&]=Z_sp![i&,j&]
endwhile
endwhile
txt$=" Die ["+str$(n&)+","+str$(m&)+"]-Testmatrix M ist nun mit den Z-normierten Werten belegt."
cls
GOTO "Probe2"
END
|
|