Datenaufbereitung

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Wueh7
Beiträge: 4
Registriert: Mo Aug 24, 2020 8:18 pm

Datenaufbereitung

Beitrag von Wueh7 »

-
Zuletzt geändert von Wueh7 am Fr Aug 28, 2020 4:59 pm, insgesamt 2-mal geändert.
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenaufbereitung

Beitrag von bigben »

Hallo Wueh,

zu Schritt A schau Dir mal die Funktion subset an.

Zu B: Darfst Du Entscheidungsbäume benutzen? Das Package rpartwürde die Arbeit erheblich erleichtern, aber vermutliche gibt es Restriktionen bezüglich durchgenommener und nicht durchgenommener Techniken?

Generell ist es bei Fragen dieser Art oft hilfreich, Beispieldaten in R-lesbarer Form zu posten. Siehe auch viewtopic.php?f=20&t=11

Ach ja, da war noch was: Willkommen im Forum.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Wueh7
Beiträge: 4
Registriert: Mo Aug 24, 2020 8:18 pm

Re: Datenaufbereitung

Beitrag von Wueh7 »

-
Zuletzt geändert von Wueh7 am Fr Aug 28, 2020 5:00 pm, insgesamt 1-mal geändert.
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenaufbereitung

Beitrag von bigben »

Hallo Wueh,

das ist mir alles etwas viel und ich komme mit den Variablen nicht hinterher.
Diesen Teildatensatz habe ich als csv-Datei in den Anhang gepackt.
Da sind aber zwei csv-Dateien im Anhang. Ich habe also erstmal die kleinere Deiner Dateien eingelesen:

Code: Alles auswählen

> sonntag <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1103")
> str(sonntag)
'data.frame':	1040 obs. of  6 variables:
 $ X   : int  3 9 11 12 13 15 16 18 22 26 ...
 $ pv01: int  1 1 42 1 1 1 1 1 1 1 ...
 $ px01: int  3 4 5 4 5 5 4 4 4 5 ...
 $ px02: int  3 4 5 NA 5 5 4 4 4 3 ...
 $ px03: int  1 1 4 NA 1 3 1 1 1 1 ...
 $ px04: int  2 1 4 NA 1 3 1 3 1 1 ...
> summary(sonntag)
       X               pv01            px01            px02            px03      
 Min.   :   3.0   Min.   : 1.00   Min.   :1.000   Min.   :1.000   Min.   :1.000  
 1st Qu.: 865.2   1st Qu.: 1.00   1st Qu.:4.000   1st Qu.:4.000   1st Qu.:1.000  
 Median :1753.5   Median : 1.00   Median :5.000   Median :4.000   Median :1.000  
 Mean   :1737.5   Mean   :10.78   Mean   :4.285   Mean   :4.099   Mean   :1.701  
 3rd Qu.:2574.2   3rd Qu.: 1.00   3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:2.000  
 Max.   :3476.0   Max.   :42.00   Max.   :5.000   Max.   :5.000   Max.   :5.000  
                                  NA's   :14      NA's   :20      NA's   :25     
      px04      
 Min.   :1.000  
 1st Qu.:1.000  
 Median :1.000  
 Mean   :1.868  
 3rd Qu.:3.000  
 Max.   :5.000  
 NA's   :37     
Ich habe keine Ahnung, was die Variable X jetzt beinhaltet. Brauchen wir die? Sie scheint im Text nicht wirklich vorzukommen. Ansonsten haben wir schön viele Beobachtungen und wenig NA. Die Prädiktoren px?? reichen alle von 1 bis 5 wie es gewünscht ist. pv01 scheint unsere Zielvariable zu sein. Da es nur zwei Möglichkeiten gibt, erscheint es wenig sinnvoll, die mit den numerischen Werte 1 und 42 zu hinterlegen, denn 42 * CDU ist ja nicht gleich AfD. Also wandel ich die in Faktoren um:

Code: Alles auswählen

sonntag$partei <- as.factor(sonntag$pv01)
levels(sonntag$partei) <- c("CDU", "AfD")
Die Fragestellung lautete
Welches der genannten Items trennt am besten zwischen den Wählern der AFD und den Wählern der CDU/CSU:
p01,p02,p03 oder p04"
Und ich habe vorgeschlagen, dafür einen Entscheidungsbaum zu verwenden. Abweichend vom oben vorgeschlagenen nehme ich das Paket party, welches Du Dir einmalig mit install.packages("party") herunterladen müsstest.

Das kann dann z. B. so aussehen:

Code: Alles auswählen

library(party)
mod <-ctree(partei ~ px01 + px02 + px03 + px04, data = sonntag)
plot(mod)
Das führt zu folgendem Ergebnis:
Rplot06.jpeg
Damit wird ganz schnell und übersichtlich klar, dass px02 über 2 zu AfD-Wählern führt aber auch, welche anderen Kombinationen noch AfD-Wähler vorhersagen. Diese Vorgehensweise sagt Dir also nicht nur welche Variablen trennen, sondern auch bei welchen Werten sie trennen.

Das party-Paket kommt mit zwei Vignetten, die vielleicht ein guter Leseeinstieg sind: https://cran.r-project.org/web/packages ... index.html
Auch der Hilfeeintrag zur Funktion ctree, erreichbar mit help("ctree") ist sehr lesbar und sehr informativ (man könnte Teile daraus direkt in den Methodenteil der Arbeit codieren).
Alternativ dazu macht auch ggparty coole Grafiken: https://cran.r-project.org/web/packages ... tying.html

Jetzt wäre ich aber doch gespannt, was sich hinter px01 bis px04 für Formulierungen verstecken.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Wueh7
Beiträge: 4
Registriert: Mo Aug 24, 2020 8:18 pm

Re: Datenaufbereitung

Beitrag von Wueh7 »

-
Zuletzt geändert von Wueh7 am Fr Aug 28, 2020 5:00 pm, insgesamt 1-mal geändert.
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenaufbereitung

Beitrag von bigben »

Wueh7 hat geschrieben: Mi Aug 26, 2020 9:04 pmDer Entscheidungsbaum sieht vielversprechend aus. Leider glaube ich nicht, das wir diese Technik verwenden dürfen, da diese in diesem Modul nicht behandelt wird.
Schade, aber so hast Du hier im Forum was gelernt, was Du Dir für später mal merken kannst.
Hier die Aussagen hinter den Items px01, usw, da dich diese interessieren :) :

px01: Ich bin stolz, ein Deutscher zu sein.
px02: Wir sollten endlich wieder Mut zu einem starken Nationalgefühl haben.
px03: Unter bestimmten Umständen ist eine Diktatur die bessere Staatsform.
px04: Der Nationalsozialismus hatte auch seine guten Seiten.
Danke. Mich hat das Blatt Node 7 im Baum interessiert. Zeit für Nationalgefühl aber nicht so stolz, Deutscher zu sein -- das heißt dann wohl, dass man in einem anderen Deutschland stolz wäre, Deutscher zu sein. Ach, vielleicht hätte ich gar nicht fragen sollen :cry:
Ich habe nun Mittelwertvergleiche für unabhängige Messungen bei zwei Gruppen (AfD-Wähler und CDU/CSU-Wähler) genommen und je nach Item mit dem t-test oder dem Mann-Whitney-U-Test gearbeitet.
Das hört sich so selbstverständlich an, aber man hätte auch konstant mit einem von beiden arbeiten können.

--> Keine Normalverteilung, also den Mann-Whitney-U-Test:
Etwas, das nur 5 verschiedene Werte annehmen kann kann gar nicht normalverteilt sein, weil die Normalverteilung keine diskrete Verteilung ist. Aber das ist schon ok, wenn Ihr das so gelernt habt

Code: Alles auswählen

wilcox.test(df3$px02, df3$pv01, alternative = "less")
Ich bin ziemlich sicher, dass Du das nicht so gemeint hast, wie Du es programmiert hast. Einmal erscheint es mir ungewöhnlich, einseitig zu testen. Bist Du ganz sicher, dass Ihr einseitig testen sollt?? Zum anderen vergleichst Du hier eine Variable die Werte zwischen 1 und 5 annehmen kann mit einer, die nur die Werte 1 und 2 annehmen kann. Du wolltest wahrscheinlich schreiben:

Code: Alles auswählen

wilcox.test(df3$px02 ~ df3$pv01)

Code: Alles auswählen

leveneTest (df3$px04, df3$partei)
Ich würde hier nicht auf Varianzhomogenität testen und einfach immer einen t-Test für ungleiche Varianzen machen, aber auch da solltest Du Dich nach dem richten, was gelehrt wurde.

Die Rangsummentests musst Du alle nochmal mit der Tilde ~ machen!

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Wueh7
Beiträge: 4
Registriert: Mo Aug 24, 2020 8:18 pm

Re: Datenaufbereitung

Beitrag von Wueh7 »

-
Zuletzt geändert von Wueh7 am Fr Aug 28, 2020 5:00 pm, insgesamt 1-mal geändert.
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenaufbereitung

Beitrag von bigben »

Hallo Wueh,
Etwas, das nur 5 verschiedene Werte annehmen kann kann gar nicht normalverteilt sein, weil die Normalverteilung keine diskrete Verteilung ist. Aber das ist schon ok, wenn Ihr das so gelernt habt
Aus deiner Antwort schließe ich, dass meine Annahme falsch ist, dass bei px04 eine Normalverteilung vorliegt?
Puh, ich weiß nicht, ob ich jetzt mehr helfe oder mehr verwirre. Die Kurzform lautet: Mach es für die Prüfung so, wie man es Dir beigebracht hat und mach Dir später nochmal richtige Gedanken. Richtige Gedanken gehen wie folgt: Normalverteilung ist ein mathematisches Ideal, dass in der materiellen Welt die wir Wirklichkeit nennen nicht vorkommt. Allein schon deshalb, weil sie von minus Unendlich bis plus Unendlich reicht und es nicht unendlich viele Elementarteilchen im Universum gibt. Die Theorie der Tests baut also auf einem mathematisch-theoretischen Konzept Normalverteilung auf, dem nie und nimmer irgendeine Verteilung in der Wirklichkeit gleich sein wird. Was uns in der praktischen Statistik interessiert ist, ob etwas einer Normalverteilung nah genug kommt, um Methoden anzuwenden, die für Normalverteilungen erdacht worden sind. Dabei stellt sich dann oft genug heraus, dass "nah genug" ganz schön weit weg sein kann.
px04 kann nicht im mathematischen Sinn aus einer Normalverteilung entstammen, da px04 nie den Wert -13,25768 annehmen kann, obwohl diesem Wert in jeder Normalverteilung eine gewisse Wahrscheinlichkeitsdichte größer Null zugeordnet wird. Deshalb kann px04 dennoch nah genug an einer Normalverteilung sein, um gewisse parametrische Verfahren für normalverteiltes sinnvoll anzuwenden.
Statistische Normalverteilungstests prüfen aber leider auf Normalverteilung und nicht auf Nah-genug-an-Normalverteilung. (Nicht nur) deshalb sind sie meistens wertlos.

Der t-Test wird gegen Abweichungen von Normalitätsannahmen zunehmend robust, je mehr Beobachtungen man untersucht. Bei Deinen Zahlen ist jede noch so schiefe Verteilung "normal genug". Wenn Du Zeit und Lust hast, kannst Du ja mal lesen, was ich hier geschrieben habe: https://stats.stackexchange.com/questio ... 581#307581
1. In unserem Skript steht sowohl etwas von einseitigen Tests, als auch von zweiseitigen Tests. Da ich in meinem Fall eine einseitige Alternativ-Hypothese habe und der erste Mittelwert kleiner ist, habe ich mir für alternative = "less" entschieden.
Erneut: Mach für die Note, was unterrichtet wurde, später denkst Du selbst nochmal darüber nach und schaust Dich auch um, was in Deinem Feld Usus ist. Ich finde ganz gut, was auf dieser Seite als FAQ3 beschrieben steht: https://psychologie.uni-graz.at/de/biol ... -list/faq/
Wenn ich eine medizinische Arbeit mit einseitigem Test sehen würde, würde mich das erheblich argwöhnisch machen. Ich weiß aber natürlich nicht, wie das bei den Politologen ist.

Alternativhypothese zu px02:
Die Wähler der AFD stimmen dem Statement in höherem Maße zu als die Wähler der CDU/CSU.

Habe ich das mit einseitig und zweiseitig evtl. falsch interpretiert?
Ich würde die H0 und die Alternativhypothese immer zweiseitig formulieren. Stell Dir mal vor, die AfDler würden weniger Nationalgefühl einfordern als die CDU/CSU. Wäre das nicht eine viel größere Schlagzeile als anders herum? Würdest Du den Fall als irrelevant weil nicht Fragestellung Deiner Forschung einsortieren? Wohl kaum.
2. Das mit dem "," anstatt der Tilde "~" war tatsächlich ein Fehler von mir. Vielen Dank für den Hinweis!
Dann hoffe ich, dass es mit richtiger Syntax und zweiseitiger Testung jetzt auch nicht mehr an Signifikanzen mangelt.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ruedi_br
Beiträge: 159
Registriert: Do Mär 01, 2018 3:53 pm

Re: Datenaufbereitung

Beitrag von ruedi_br »

Ohne die gelöschten Fragen sind Bernhards Antworten nicht sehr hilfreich ... :?
fortune(111)
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Datenaufbereitung

Beitrag von bigben »

Stimme zu, das ist asozial. Sich so oft für die Hilfe bedanken, aber Threads nicht als Hilfe für später kommende stehen zu lassen.
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten