Daten zusammenfassen mit mehr als einer "grouping variable"

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

Moderatoren: EDi, jogo

Antworten
kosa
Beiträge: 10
Registriert: Mo Sep 02, 2019 6:47 pm

Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von kosa » Mi Dez 04, 2019 10:54 am

Liebe Alle,

ich habe eine Frage bezüglich des zusammenfassen von Daten. Ich habe mehrere Fragebogen-Items, die mit einer 7-stufigen Likert-Skala beantwortet wurden. Zudem habe ich 3 Gruppen, die zu drei Messzeitpunkten zu den gleichen Fragebogen-Items befragt wurden. Ich würde nun gern die Häufigkeiten der einzelnen Antworten zusammenfassen für jede Gruppe zu jedem Messzeitpunkt.

Hier ein Beispiel:

Code: Alles auswählen

dat<-data.frame(Treatment = as.factor(rep(c("control","no_CS","CS"),4)),
           Messzeitpunkt  = as.factor(c(1,2,3,3,2,1,2,1,3,1,3,2))),
           item1 = as.factor(c(1,5,3,6,2,4,6,5,7,1,2,3)),
           item2 = as.factor(c(4,5,5,4,2,5,3,2,6,1,4,7)))
str(dat)

Mit

Code: Alles auswählen

dat.freq<-as.data.frame(t(sapply(dat[,c(3,4)], FUN = table)))
bekomme ich die Häufigkeiten für die einzelnen Item-Levels, aber die Gruppen werden nicht berücksichtigt.


Mit dem Likert-Package

Code: Alles auswählen

dat.items <- likert(dat[,c(3,4)], grouping = dat$Messzeitpunkt)
habe ich bisher nur herausgefunden, wie ich eine Gruppe berücksichten kann. Anmerkung: Hier werden Prozentwerte berechnet, womit ich ebenfalls zufrieden bin.

Kann mit jemand helfen und sagen, wie ich beide Gruppen (Treatment und Messzeitpunkt) berücksichtige.

Das wäre super! Vielen lieben Dank schonmal.
Zuletzt geändert von kosa am Mi Dez 04, 2019 4:57 pm, insgesamt 1-mal geändert.

jogo
Beiträge: 1524
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von jogo » Mi Dez 04, 2019 12:54 pm

Hallo Kosa,

wie soll denn das Ergebnis aussehen?

Gruß, Jörg

bigben
Beiträge: 1126
Registriert: Mi Okt 12, 2016 9:09 am

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von bigben » Mi Dez 04, 2019 2:27 pm

Hallo Kosa,

bis Jörgs Frage beantwortet ist, poste ich schon mal folgenden Hinweis in eine mögliche Lösungsrichtung (Hier Itemmittelwerte):

Code: Alles auswählen

aggregate(cbind(item1, item2)  ~ Treatment + Messzeitpunkt,
          FUN = mean, 
          data = dat)
Zwei Fragen:
1. Wenn Du die Items als Likert-Items betrachtest, warum wandelst Du die Itemwerte extra in Faktoren um?
2. Ist Dein Beispiel gut gewählt, wenn jede Gruppe an ihrem eigenen Messzeitpunkt untersucht wurde? Sollte nicht auch control mal an Messzeitpunkt 2 und 3 untersucht werden? Oder willst Du da Deine Beispieldaten nochmal überarbeiten?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

kosa
Beiträge: 10
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von kosa » Mi Dez 04, 2019 3:19 pm

Hallo Jörg, lieber Bigben,

vielen Dank für eure Rückmeldungen. Das Ergebnis sollte so aussehen.

Eine Spalte für Messzeitpunkt, Treatment, Item, und für jede Faktorstufe. Ich weiß leider nicht wie man Tabellen hier gut unversehrt posten kann.

Code: Alles auswählen

 Messzeit Treatment    Item  1  2  3  4  5  6  7
1    1     control    item1 50  0  0 25 25  0  0
2    1     control    item2 25 25  0 25 25  0  0
3    2     control    item1  0 25 25  0 25 25  0
4    2     control    item2  0 25 25  0 25  0 25
5    3     control    item1  0 25 25  0  0 25 25
6    3     control    item2  0  0  0 50 25 25  0
7    1       no CS    item1 50  0  0 25 25  0  0
8    1       no CS    item2 25 25  0 25 25  0  0
9    2       no CS    item1  0 25 25  0 25 25  0
10   2       no CS    item2  0 25 25  0 25  0 25
11   3       no CS    item1  0 25 25  0  0 25 25
12   3       no CS    item2  0  0  0 50 25 25  0
13   1          CS    item1 50  0  0 25 25  0  0
14   1          CS    item2 25 25  0 25 25  0  0
15   2          CS    item1  0 25 25  0 25 25  0
16   2          CS    item2  0 25 25  0 25  0 25
17   3          CS    item1  0 25 25  0  0 25 25
18   3          CS    item2  0  0  0 50 25 25  0
Die einzelnen Faktor-Levels müssten in der Spalte zusammengefasst werden dann entweder in Häufigkeiten oder Prozent angeben werden. Die Likert-Funktion und ach die sapply Funktion machen das bereits, aber leider nur für eine Gruppenvariable oder keine.

@Bigben: zu deinen beiden Fragen.
Frage 1: Ich habe das gemacht, weil bei der Likert-Funktion die Items als Faktoren klassifiziert werden müssen, so weit ich weiß.
Frage 2: Du hast hast recht, mein Beispiel ist etwas ungünstig. Das müsste ich anpassen.

Zu deinem Lösungsvorschlag. Ich habe mal reingeschaut. An sich macht der Befehl, einen Teil von dem, was ich gern umsetzen will. Er fasst die Daten zusammen für die beiden Gruppen (Messzeitpunkt und Treatment). Aber die Zusammenfassung der Daten für die einzelnen Faktorenlevel der Items geht verloren bzw. wird nicht berücksichtigt.

Kann man das mit aggregate noch berücksichtigen?

Vielen Dank schonmal fürs reindenken und für eure Hilfe!

bigben
Beiträge: 1126
Registriert: Mi Okt 12, 2016 9:09 am

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von bigben » Mi Dez 04, 2019 5:39 pm

kosa hat geschrieben:
Mi Dez 04, 2019 3:19 pm
Frage 1: Ich habe das gemacht, weil bei der Likert-Funktion die Items als Faktoren klassifiziert werden müssen, so weit ich weiß.
Das kann gut sein. Ich glaube, wir haben hier keine Psycho-/Soziologen, die so richtig viel Fragebogen auswerten, deshalb wirst Du hier wahrscheinlich eher Antworten bekommen, die auf basalen R-Funktionen wie aggregate beruhen und weniger über Spezialpakete erfahren. Wenn Du natürlich weißt, dass Du eine bestimmte Funktion ans laufen bringen willst, findet sich auch dafür meist Hilfe.
Frage 2: Du hast hast recht, mein Beispiel ist etwas ungünstig. Das müsste ich anpassen.
Das solltest Du unbedingt tun.
Kann man das mit aggregate noch berücksichtigen?
aggregate ist eine sehr vielseitige Funktion, bei der sich auch die Vorteile einer Programmiersprache gegenüber einem GUI-basierten Statistikprogramm zeigen. Ob es dann genau die Tabelle wird, die Du da vorschlägst muss man mal sehen. Erstmal ein gutes Beispiel mit passender Wunschergebnisbeschreibung, dann wirst Du hoffentlich sehen, dass hier ein paar hilfreiche R-Zauberer unterwegs sind.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

kosa
Beiträge: 10
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von kosa » Mi Dez 04, 2019 6:31 pm

Vielen Dank schonmal für die Rückmeldungen.
Zuletzt geändert von kosa am Mi Dez 04, 2019 6:52 pm, insgesamt 2-mal geändert.

kosa
Beiträge: 10
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von kosa » Mi Dez 04, 2019 6:50 pm

Ich habe mein Beispiel etwas angepasst nun etwas angepasst.

Also konkret geht es darum, dass es drei Gruppen gibt, die ein unterschiedliches Treatment (Unterrichtseinheit) bekommen haben. Jede Gruppe wurde zu drei Messzeitpunkten befragt, bei denen die Teilnehmer die gleichen Fragebogenitems bekommen haben. Jedes Item wurde auf einer 7-stufigen Zustimmungsskala von 1 (stimme gar nicht zu) bis 7 (stimme vollkommen zu) beantwortet.

Hier nochmal das angepasste Beispiel:

Code: Alles auswählen

dato<-data.frame(Treatment = as.factor(rep(c("control","no_CS","CS"),5)),
                Messzeitpunkt = as.factor(c(1,2,3,3,2,1,2,1,3,1,3,2,2,1,3)),
                item1 = as.factor(c(1,5,3,6,2,4,6,5,7,1,2,3,4,6,6)),
                item2 = as.factor(c(4,5,5,4,2,5,3,2,6,1,4,7,1,1,1)))
Daraus ergibt sich folgende Tabelle:

Bild


Was ich gern hätte wäre eine Tabelle, in der die Daten über "grouping variables" (hier: Messzeitpunkt und Treatment) für die einzelnen Stufen der Skala zusammengefasst werden. Das können entweder absolute oder prozentuale Häufigkeiten sein.

Wenn ich das Likert-Package benutze und folgenden Befehl ausführe:

Code: Alles auswählen

likert(dat[,c(3,4)], grouping = dat$Messzeitpunkt)
bekomme ich folgende Tabelle. Ich kann bisher aber nur eine Gruppe berücksichtigen. In diesem Beispiel ist das der Messzeitpunkt. Die Treatment-Variable bleibt hier noch unberücksichtigt.

Bild

Kann mir da jemand weiterhelfen. Braucht ihr noch genauere Informationen?
Dateianhänge
Bildschirmfoto 2019-12-04 um 18.42.53.png
Bildschirmfoto 2019-12-04 um 18.38.13.png

kosa
Beiträge: 10
Registriert: Mo Sep 02, 2019 6:47 pm

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von kosa » Mi Dez 04, 2019 8:43 pm

Ich habe nun über das data.table-Paket noch den dcast Befehl gefunden. Darüber kann ich die beiden Grouping Variablen berücksichtigen, aber ich habe noch nicht herausgefunden, wie ich mehrere Items gleichzeitig mit in den Befehl aufnehmen kann und in einer neuen Spalte das Item berücksichtigt wird.

Code: Alles auswählen

require(data.table)
dcast(dat, Treatment + Messzeitpunkt ~ item1)
Zusammenfassend berücksichtigt der likert-Befehl mehrere Items und der Likert-Befehl mehrere Gruppen, nach denen die Daten zusammengefasst werden sollen.

Wie kann ich das gut kombinieren. Sieht da jemand eine Möglichkeit?

jogo
Beiträge: 1524
Registriert: Fr Okt 07, 2016 8:25 am

Re: Daten zusammenfassen mit mehr als einer "grouping variable"

Beitrag von jogo » Mi Dez 04, 2019 10:57 pm

Hallo Kosa,
kosa hat geschrieben:
Mi Dez 04, 2019 3:19 pm
Ich weiß leider nicht wie man Tabellen hier gut unversehrt posten kann.
guckst Du hier: viewtopic.php?f=20&t=29

Gruß, Jörg

Antworten