Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gruppen

Deskriptive Statistiken mit Stata.

Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gruppen

Beitragvon Lia81 » Mi 30. Jan 2013, 13:31

Liebe Leute,

ich habe früher recht viel mit SPSS programmiert und jetzt auf Stata umgestiegen.
Mit den Optionen für Grafiken in Stata kann man ja jede Menge anfangen, nur das meinige Problem lässt sich irgendwie nicht (bzw. nur sehr umständlich) lösen.

Ich habe mehrere Variablen x (x1, x2, x3, x4 und x5), die nominaler Ausprägung sind - also die Variablen weisen jeweils verschiedene Werte, in meinem Fall Zustandbeschreibungen, auf. Dabei stellen die Variablen diese Zustände in zeitlicher Reihenfolge dar - also x1 der Zustand des Individuums zu Zeitpunkt 1, x2 der Zustand des Individuums zu Zeitpunkt 2 und so weiter...

Was ich hierfür dringend brauche ist eine (möglichst einfache) Lösung, die Häufigkeiten eines bestimmten Zustandes via Liniendiagramm zu verschiedenen Zeitpunkten darzustellen. Also ich suche ein Liniendiagramm mit 5 Punkten: auf der x-Achse die Häufigkeit einer bestimmten Ausprägung zu Zeitpunkt 1 bis 5 (x1, x2, x3, x4, x5) und auf der y-Achse jeweils die relativen Häufigkeiten . Also hätte ich eine Linie mit 5 Datenpunkten, die mir jeweils (anhand der y-Achse) anzeigen, wieviele Beobachtungen die Ausprägung 1 (also den Zustand) zum jeweiligen Zeitpunkt (Variable x1, x2, x3, x4, x5) haben. Also beispielsweise 70 von hundert Leuten haben die Ausprägung 1 in Variable x1, 50 von hundert Leuten hätten die Ausprägung 1 in Variable x2 et...
Dann wäre mein erster Datenpunkt bei 70% auf der y-Achse, mein zweiter Datenpunkt bei 50% etc.

Zu dem ganzen gibt es noch eine Variable a, die angibt, in welcher Gruppe die Beobachtung ist (es sind insgesamt 4 Gruppen). Also müsste die Grafik nach Gruppen dargestellt werden, so dass ich dann praktisch nicht eine Linie (für gesamt), sondern vier Linien (eine für jede Subgruppe) habe.

Das Problem ist, dass ich mit den twoway graphs nicht zurecht komme, da ich ja keine Variable für die y-Achse habe (sondern eben nur die darstellung der relativen Häufigkeit). Ich finde einfach nix brauchbares hierzu, was nicht über tausend verschiedene Hintertürchen geregelt werden muss. Dabei ist das an sich ja keine große Sache.
Mein Ansatz ist über das Longformat zu gehen, also dass ich für jeden Fall 5 Beobachtungen (x1, x2, x3, x4, x5) habe (und demnach nach meinem Beispiel also nicht mehr 100 Zeilen, sondern 500 Zeilen). Arg viel weiter bin ich nicht, denn mit dem collapse Befehl kann ich die Gruppen nicht berücksichtigen (Variable a). Die Lösung, neue Variablen xx (für jede x eine Variable) zu bilden, die immer dann den Wert 1 aufweisen wenn die x Variable 1 ist und ansonsten missing und diese neuen Variablen als Summenwerte xxx ins Longformat zu bringen um mir anschließend eine Darstellung von total liefern zu lassen, erscheint mir viel zu umständlich (so muss jedesmal jede Menge angepasst werden, wenn ein neues x hinzukommt). Der zweite Fall sähe dann in etwa so aus:

egen xxx1 = total(xx1), by(a)
egen xxx2 = total(xx2), by(a)
egen xxx3 = total(xx3), by(a)
egen xxx4 = total(xx4), by(a)
egen xxx5 = total(xx5), by(a)


line xxx group if a==1, sort || ///
line xxx group if a==2, sort || ///
line xxx group if a==3, sort || ///
line xxx group if a==4, sort


Das muss doch auch irgendwie viel viel einfacher gehen oder? :roll:

Ansonsten kann Stata die kompliziertesten Grafiken abbilden, aber so ein im Prinzip einfaches Problem kann ich einfach nciht lösen. Bitte helft mir heraus aus meiner geistigen Umnachtung! :shock: :shock: :shock:

Viele Grüße,
Lia
Lia81
 
Beiträge: 7
Registriert: Mi 30. Jan 2013, 13:00
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon daniel » Mi 30. Jan 2013, 13:55

Ich habe die vorbildlich ausführliche Darstellung aus Zeitgründen nur überflogen, aber kann eventuell ein, zwei kurze Anstöße geben.

Dabei ist das an sich ja keine große Sache.

Wenn es um Grafiken in Stata geht, sind die einfachen Dinge immer am kompliziertesten umzusetzen. das hat mit Stata's Philosophie zu tun, dass die meisten einfachen Grafiken ein zu ungünstiges Ink/Info Ratio haben, und es in Augen von StataCorp. schlicht unsinnig ist, derart wenige und einfache Informationen gafisch darzustellen. An der Argumentation ist was dran, es kann aber durchaus ärgelich sein.

Für micht hört sich das an als suchst Du z.B. nach -catplot- (SSC). Tippe in Stata

Code: Alles auswählen
ssc inst catplot
h catplot


und schau mal, ob das was für Dich ist. Möglicher Weise suchst Du auch nach -tsline-.

Das Argument mit -collapse- verstehe ich nicht ganz, da -collapse- eine -by(varlist)- Option anbietet, die sehr wohl Gruppen berücksichtigen kann. Auch das Argument des "Anpassens" sobald neue x dazukommen, lässt sich mit einigen einfachen loops vermutlich leicht lösen. Stata ist so aufgebaut, dass es eine sehr allgemeine Programmierung erlaubt, die ich immer dann vorziehen würde, wenn ich Änderungen (z.B. mehr x) erwarte. Ein kurzes Beispiel. Statt

Code: Alles auswählen
egen xxx1 = total(xx1), by(a)
egen xxx2 = total(xx2), by(a)
egen xxx3 = total(xx3), by(a)
egen xxx4 = total(xx4), by(a)
egen xxx5 = total(xx5), by(a)


line xxx group if a==1, sort || ///
line xxx group if a==2, sort || ///
line xxx group if a==3, sort || ///
line xxx group if a==4, sort


würde ich

Code: Alles auswählen
loc nx 5
forv j = 1/`nx' {
   egen xxx`j' = total(xx`j') ,by(a)
}

qui ta group
forv j = 1/`r(r)' {
   loc grcmd `grcmd' (line xxx group if a==`j' ,sort)
}
`grcmd'


schreiben. Nun muss bei einem x mehr nur das local <nx> auf 6 gesetzt werden. Natürlich lässt sich der code weiter verallgemeinern.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon Lia81 » Di 5. Feb 2013, 17:15

Vielen Dank schonmal für die schnelle Antwort :)

Also die Idee mit den Schleifen habe ich gerade direkt versucht umzusetzen, hat sogar hingehauen. Kann man auch den Befehl replace in eine Schleifenlogik bringen? Da spuckts bei mir nur Fehlermeldungen aus und ich weiss nicht warum... :shock:

catplot habe ich mir auch installiert, ebenso die help Befehle angesehen und gegoogelt. Leider komme ich nicht drauf, wie ich meine gewünschte Darstellung damit bekommen könnte. Kannst du mir hier eventuell auch eine Starthilfe geben? :idea:
Also wie bekomme ich über catplot das von mir beschriebene Diagramm? Ich glaube, das bringt mich nicht weiter - bin mir aber nicht absolut sicher...

Vielen Dank,
Lia
Lia81
 
Beiträge: 7
Registriert: Mi 30. Jan 2013, 13:00
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon daniel » Di 5. Feb 2013, 18:24

Also die Idee mit den Schleifen habe ich gerade direkt versucht umzusetzen, hat sogar hingehauen. Kann man auch den Befehl replace in eine Schleifenlogik bringen? Da spuckts bei mir nur Fehlermeldungen aus und ich weiss nicht warum... :shock:

Ohne Deinen Befehl und die spezifische Fehlermeldung zu sehen, kann ich da nur raten. Versichst Du evtl. eine Variable zu -replace-n, die es noch gar nicht gibt?

Nach erneuter Lektüre Deines Beitrags ist -catplot- evtl. nicht die richtige Wahl. Ich muss aber zugeben, ich kann die Struktur der daten nicht ganz nachvollziehen. Kannst Du ein Beispiel ertsllen (vgl. meinen Eintrag im Add-ons Unterforum).
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon Lia81 » Mi 6. Feb 2013, 12:08

Vielen Dank nochmal... :)
Also den Fehler mit der Schleife habe ich selbst lösen können - war ein Nutzerfehler (wie immer), die Syntax hat nicht gestimmt an einer Stelle (Fehlermeldung R198). Aber wie gesagt, ich hatte noch nie in meinem Leben einen Stata Kurs oder eine Einführung oder dergleichen und mach das alles so ein bischen autodidaktisch momentan, deshalb etwas suboptimal und umständlich an der ein oder anderen Stelle...

Sorry, ist auch alles etwas umständlich beschrieben - deshalb hier mal eine Syntax zum selber einlesen. Ich habe mir 25 fiktive Fälle zusammengebastelt, welche die Datenstruktur an sich ganz gut wiederspiegeln (nur sind es bei mir über 10.000 Fälle statt nur 25, daher sieht das Diagramm am Ende mit den 25 Fällen ziemlich lächerlich aus).

clear

input ID Status1 Status2 Status3 Status4 Status5 kategorie
1 0 0 0 0 0 1
2 0 1 1 1 1 1
3 0 0 0 0 2 2
4 0 0 1 1 1 2
5 3 3 3 3 3 3
6 4 4 4 4 4 3
7 0 0 0 5 5 4
8 0 2 2 2 2 4
9 5 5 5 5 5 1
10 3 3 3 3 3 2
11 0 0 0 0 3 3
12 0 0 0 0 0 1
13 0 0 0 0 0 1
14 0 2 2 2 2 4
15 0 2 2 2 2 4
16 0 0 0 3 3 3
17 0 0 0 0 0 1
18 0 0 0 0 3 3
19 0 0 0 0 0 1
20 0 3 3 3 3 3
21 0 0 0 0 0 4
22 0 0 0 0 2 4
23 0 0 0 3 3 4
24 0 0 4 4 4 4
25 0 1 1 1 1 4
end



loc i 5


forv j = 1/`i' {
generate nichtbearbeitet_`j' = 1 if (Status`j' ==0)
}
exit

loc i 5

forv j = 1/`i' {
replace nichtbearbeitet_`j' = 0 if (Status`j'!=0)
}
exit


loc i 5

forv j = 1/`i' {
egen total_nichtbearbeitet_`j' = total(nichtbearbeitet_`j'), by (kategorie)
}
exit



reshape long total_nichtbearbeitet_ , i(ID) j(varnum)

label def varnum 1 "nichtbearbeitet_1" 2 "nichtbearbeitet_2" 3 "nichtbearbeitet_3" 4 "nichtbearbeitet_4" 5 "nichtbearbeitet_5"
label val varnum varnum


line total_nichtbearbeitet_ varnum if kategorie==1, sort || ///
line total_nichtbearbeitet_ varnum if kategorie==2, sort || ///
line total_nichtbearbeitet_ varnum if kategorie==4, sort || ///
line total_nichtbearbeitet_ varnum if kategorie==5, sort ///
legend(label(1 "kategorie 1") label(2 "kategorie 2") label(3 "kategorie 3") label(4 "kategorie 4"))




So, im Prinzip möchte ich mit diesen Daten so ein Diagramm erstellen. Nur soll an jedem Datenpunkt der Prozentwert stehen und nicht die absolute Zahl. Zudem wäre es ganz schick wenn ich die x-Achse selbst beschriften könnte mit Datumsangaben statt den Zahlen 1-5.

Zudem glaube ich, dass ich hier wahnsinnig umständlich herangehe. Vielleicht könnte ich mir die neu generierten Variablen auch sparen und direkt die Variablen Status`j' in meiner Syntax für das Diagramm verwenden. Ich hab absolut keinen Schimmer und für mich sind auch die Stata Bücher wenig hilfreich und übersichtlich (anders in SPSS, da ist alles für "Idioten" erklärt Schritt für Schritt). Das liegt zwar sicherlich an mir, aber was solls - ich muss das Problem ja trotzdem lösen. :shock:

Kannst du mit meiner Syntax was anfangen? Wird mein Problem jetzt etwas klarer?

Liebe Grüße,
Lia
Lia81
 
Beiträge: 7
Registriert: Mi 30. Jan 2013, 13:00
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon daniel » Do 7. Feb 2013, 11:37

So wirklich ganz verstehe ich das noch immer nicht, vermutlich, weil mir der Inhalt komplett schleierhaft ist.

Was ich sagen kann ist, dass Du Deinen code kürzen kannst.

Code: Alles auswählen
loc i 5

forv j = 1/`i' {
generate nichtbearbeitet_`j' = 1 if (Status`j' ==0)
}
exit

loc i 5

forv j = 1/`i' {
replace nichtbearbeitet_`j' = 0 if (Status`j'!=0)
}
exit

loc i 5

forv j = 1/`i' {
egen total_nichtbearbeitet_`j' = total(nichtbearbeitet_`j'), by (kategorie)
}
exit


Zunächst willst Du die -exit- Befehle da nicht drin haben, die unterbrechen das do-file und ich sehe nicht, wieso Du das willst. Wenn die -exit-s gestrichen werden, musst das local i nicht jedes mal neu gesetzt werden -- das wäre auch einfach umständlich. Zudem kannst Du das Ergebnis der drei Schleifen in einem Schritt erzielen

Code: Alles auswählen
forv j = 1/5 {
    bys kategorie : egen total_nichtbearbeitet_`j' = total(Status`j' == 0) if !mi(Status`j')
}


Da Du von Prozentwerten sprichst, galube ich aber gar nicht, dass Du hier wirklich die -total()- Werte haben willst. Wie gesagt, das evrstehe ich aber nicht ganz.

Schau Dir mal die Hilfe für line plots an. Da findest Du sicher eine -xlabel()- Option, oder ähnliches, die die Beschriftung der x-Achse erlaubt. Die inezelnen Punkte kannst Du mit der Option -marker()- beschriften, soweit ich das aus dem Kopf erinnere.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon Lia81 » Mo 11. Feb 2013, 12:38

Ah ok, danke. Funktioniert.
Und angenommen, ich möchte statt der Totalwerte die Prozentwerte (ebenfalls bezogen auf die jeweilige Kategorie)? Statt "total" nehme ich dann welchen Befehl?

LG Sara
Lia81
 
Beiträge: 7
Registriert: Mi 30. Jan 2013, 13:00
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon daniel » Mo 11. Feb 2013, 13:01

Die prozentualen Angabn wirst Du vermutlich "von Hand" berechnen müssen (i.e. es gibt da soweit ich weiß keine Funktion).

Ein Entwurf (mögliche fehlende Werte ignoriert)

Code: Alles auswählen
forv j = 1/5 {
    bys kategorie : egen total_nichtbearbeitet_`j' = total(Status`j' == 0) if !mi(Status`j')
    bys kategorie : replace total_nichtbearbeitet_`j' = (total_nichtbearbeitet_`j' / _N)
}
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon Lia81 » Mo 11. Feb 2013, 21:47

Ja genau, sowas in der Art hatte ich mit ganz am Anfang schon mal überlegt...nur ist mir nicht eingefallen wie ich das _N automatisch durch alle Fälle der jeweiligen Kategorie ersetzen kann. Viermal händisch einsetzen geht nicht in meinem Fall (ich muss vor der ganzen Prozedur ein paar Fälle ausschliessen, nämlich die Personen, die nicht mehr berücksichtigt werden - und diese Zahl ist immer eibe andere) Also müsste ich das ganze als Schleife programmieren, die mir jedesmal (also viermal, da vier Kategorien) die Gesamtfallzahl der Kategorie einsetzt...
Lia81
 
Beiträge: 7
Registriert: Mi 30. Jan 2013, 13:00
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Häufigkeitsdiagramm zu mehreren Zeitpunkten und nach Gru

Beitragvon daniel » Di 12. Feb 2013, 02:33

Keine Schleife nötig. Der code funktioniert so, wie er da steht. Stata setzt für _N die Fälle pro Kategorie ein, weil es mit einem -bys- kombiniert wird.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Deskriptive Statistik

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron