Proc Cluster bzw. Proc Tree
Verfasst von StephanieCGross am 11 September, 2006 - 09:02
Hallo, hat hier vielleicht irgendeiner Erfahrung mit den oben genannten Prozeduren???Falls ja: ich hätte da ein paar Fragen, die für jemanden mit Erfahrung höchstwahrscheinlich trivial sind....
»
- Anmelden oder Registrieren um Kommentare zu schreiben

einfach mal stellen, die Fragen
dann werden wir sehen.
Clusteranalyse
Ich habe eine Clusteranalyse auf der Basis einer 911*911- Distanzmatrix durchgeführt. Anhand der F- und t²- Werte erscheint es sinnvoll, die Beobachtungen in 14 Cluster zu zerlegen.
Nun zu meinem Problem: Cluster 1 und Cluster 2 enthalten bei mir über 400 Beobachtungen, die anderen dementsprechend nur 1-13. Wie kann ich die Unterschiede der Werte in der Matrix stärker herausbringen? Ist im Programm für die Berechnung der Distanzmatrix etwas zu ändern? Oder in jenem für die Clusteranalyse??
Ich habe auch sehr viele Ties...
Wäre sehr dankbar, wenn mir jemand weiterhelfen könnte...
Programmcode
Guten Morgen,
ich bin jetzt zwar nicht der große Cluster-Experte, aber welches Verfahren wird denn direkt angewendet? Vielleicht könnten wir den Programmcode bekommen, dann lässt sich das etwas besser beurteilen.
Habe die Fragestellung auch noch nicht ganz verstanden, geht es darum, in etwa gleich große Cluster zu erhalten? Dann bietet sich u.U. das Ward-Verfahren an, dieses tendiert zur Bildung ähnlich großer Cluster.
Gruß R. Kolbe
Ich hoffe, damit kannst Du mir weiterhelfen...
Praepdistanzsingle o.a. eine Distanzmatrix produziert werden. Diese steht dann in
SASUSER als SINGLEDISTANZ oder anderem Namen und wird zunächst übernommen*/
DATA SINGLEDISTANZ1;
SET SASUSER.SINGLEDISTANZ91_92;
RUN;
PROC IML;
USE SINGLEDISTANZ1;
READ ALL VAR _NUM_ INTO DIST;
DIST1 = DIST+1000*I(911);
HILF = {[911] 1}` * {[911] 1} -I(911);
DIST2 = (DIST-120*HILF);
NULL = {[911] 0}` * {[911] 0};
DIST3 = DIST2<>NULL;
DIST4 = DIST3##2;
MIN = DIST1[><,><];
PRINT MIN;
CREATE SINGLEDISTANZ2 FROM DIST4;
APPEND FROM DIST4;
QUIT;
DATA SINGLES;
SET SASUSER.SINGLETAG1TAKT;
RUN;
DATA IDENT;
SET SINGLES;
KEEP PERSNR;
RUN;
DATA DISTANZ (TYPE=DISTANCE);
MERGE IDENT SINGLEDISTANZ2;
/*Je nachdem ob das IML zugeschaltet ist, muss hier zwischen
Singledistanz2 und Singledistanz1 gewechselt werden*/
RUN;
PROC CLUSTER DATA=DISTANZ METHOD=Average OUTTREE=TREE PSEUDO /*NOPRINT*/ ;
ID PERSNR;
RUN;
PROC TREE DATA=TREE OUT=NEW NCLUSTERS=14;
ID PERSNR;
RUN;
PROC SORT;
BY PERSNR;
RUN;
DATA SINGLECLUS;
MERGE NEW SINGLES;
BY PERSNR;
DROP /*ZHA1-ZHA288*/ IDTAG IDHH WT1 WT2 ID1 IDTAG;
IF ALTER>100 then delete;
IF CLUSTER=1;
RUN;
PROC FREQ DATA=NEW;
TABLES CLUSTER;
RUN;
Formatierung
den SAS-Code immer so einschließen, dann können ihn die anderen auch lesen:
<sascode>
/* hier kommt der SAS-Code */
</sascode>