Itemantworten als Zahlen kodieren

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

Moderatoren: EDi, jogo

Antworten
line
Beiträge: 3
Registriert: Fr Jan 22, 2021 1:08 pm

Itemantworten als Zahlen kodieren

Beitrag von line »

Hallo!

Ich habe auf einem Fragebogen 5 items mit jeweils 6 Antwortmöglichkeiten:

Die ganze Zeit
Meistens
Etwas mehr als die Hälfte der Zeit
Etwas weniger als die Hälfte der Zeit
Ab und zu
Zu keinem Zeitpunkt

und möchte jetzt für die Antworten Werte von 1-6 vergeben.

Weiß jemand, wie ich am besten vorgehe?

Vielen Dank!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Itemantworten als Zahlen kodieren

Beitrag von bigben »

Hallo line,
line hat geschrieben: Fr Jan 22, 2021 1:16 pmund möchte jetzt für die Antworten Werte von 1-6 vergeben.
Was Du eigentlich möchtest ist, die Antworten in einen ordered factor überführen, der von R intern mit den Werten 1 bis 6 codiert wird, aber weiterhin die Bezeichnung der Antwortoptionen enthält. So wird'S gemacht:

Code: Alles auswählen

gegeben <- c("Etwas mehr als die Hälfte der Zeit", "Ab und zu", "Ab und zu", "Meistens", "Die ganze Zeit")

gesucht <- ordered(gegeben, levels = c("Die ganze Zeit",
                                       "Meistens",
                                       "Etwas mehr als die Hälfte der Zeit",
                                       "Etwas weniger als die Hälfte der Zeit",
                                       "Ab und zu",
                                       "Zu keinem Zeitpunkt"))
Wenn R weiß, dass das eine ordinale Skala ist ("ordered") dann kann es sich entsprechend verhalten. Wenn Du Dir beispielsweise mit barplot die Häufigkeit der einzelnen Antwortmöglichkeiten anzeigen lässt:

Code: Alles auswählen

barplot(table(gesucht))
Dann steht auf der x-Achse nicht 1 bis 6 sondern die Originalbezeichnung. Außerdem stimmt die Reihenfolge und es ist auch erkennbar, welche level es noch gegeben hätte, selbst wenn die gar nicht vorkamen. Wenn Du dann doch mal die Zahlen brauchen solltest, weil beispielsweise die Spearman-Korrelationsfunktion mit dem ordered nicht umgehen kann, ist das auch ganz einfach:

Code: Alles auswählen

> as.integer(gesucht)
[1] 3 5 5 2 1
HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
line
Beiträge: 3
Registriert: Fr Jan 22, 2021 1:08 pm

Re: Itemantworten als Zahlen kodieren

Beitrag von line »

Vielen Dank für die schnelle Antwort!

Eigentlich würde ich die Bezeichnungen der Itemantworten auch gerne ändern, sodass bspw. die angegebene Antwort "Zu keinem Zeitpunkt" zu dem Wert "6" wird - hast du dafür auch eine Lösung? :)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Itemantworten als Zahlen kodieren

Beitrag von bigben »

Hi!

So wie ich es jetzt geschrieben habe wird "zu keinem Zeitpunkt" bereits in den Zahlenwert 6 übersetzt. Wenn Du tatsächlich die Bezeichnung von "zu keinem Zeitpunkt" in "6" übersetzen willst geht das auch, aber hast Du dafür wirklich einen Anwendungsfall?

Ich schlage vor, dass Du die zu lösende Aufgabe schilderst, stat nach solchen kleinen Teilaufgaben zu fragen. Siehe https://de.wikipedia.org/wiki/XY_Problem

LG,
Bernhard




Edit: Nachtrag

Code: Alles auswählen

gegeben <- c("Zu keinem Zeitpunkt", "Ab und zu", "Ab und zu", "Meistens", "Die ganze Zeit",
             "Zu keinem Zeitpunkt", "Zu keinem Zeitpunkt", "Zu keinem Zeitpunkt", 
             "Etwas weniger als die Hälfte der Zeit", "Etwas weniger als die Hälfte der Zeit",
             "Ab und zu", "Ab und zu", "Ab und zu", "Ab und zu", "Ab und zu", "Ab und zu")

gesucht <- ordered(gegeben, levels = c("Die ganze Zeit",
                                       "Meistens",
                                       "Etwas mehr als die Hälfte der Zeit",
                                       "Etwas weniger als die Hälfte der Zeit",
                                       "Ab und zu",
                                       "Zu keinem Zeitpunkt"),
                            labels = c("eins", "zwei", "drei", "4", "5", "6"))
             
 pie(table(gesucht))


library(ggplot2)
ggplot(data.frame(gesucht = gesucht)) + 
  geom_bar(aes(x = gesucht), na.rm = FALSE, fill = "firebrick") +
  scale_x_discrete(drop = FALSE)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
line
Beiträge: 3
Registriert: Fr Jan 22, 2021 1:08 pm

Re: Itemantworten als Zahlen kodieren

Beitrag von line »

Okay, dann hier mein Problem X ein bisschen ausführlicher :)

Ich habe zwei Datensätze von Personen, die verschiedene Stimuli bewertet haben (Valenzwerte zwischen 0 und 100) und will untersuchen, ob das mit deren Stimmung zum Bewertungszeitpunkt zusammenhängt. Die Stimmung habe ich mit einem Fragebogen operationalisiert, der 5 items enthält mit den 6 Antwortoptionen "Die ganze Zeit", "Meistens", "Etwas mehr als die Hälfte der Zeit", "Etwas weniger als die Hälfte der Zeit", "Ab und zu", "Zu keinem Zeitpunkt".

In dem einen Datensatz sind die beiden Variablen Valenz (0 bis 100) und Stimmung (0 bis 5) schon numerisch, da kann ich eine Korrelation berechnen.
Aber ich will beide Datensätze kombinieren und in meinem zweiten Datensatz sind die Antworten auf dem Fragebogen nicht numerisch eingelesen (0 bis 5) sondern als die ausgeschriebenen Itemantworten ("Die ganze Zeit", "Meistens", "Etwas mehr als die Hälfte der Zeit", "Etwas weniger als die Hälfte der Zeit", "Ab und zu", "Zu keinem Zeitpunkt").

Deshalb würde ich gerne
1. die unterschiedlichen ausgeschriebenen Antworten in Werte von 0 bis 6 umkodieren
damit ich
2. beide Datensätze kombinieren und die Korrelation berechnen kann.

Ich hoffe das ist einigermaßen verständlich erklärt - vielen Dank schon im Voraus!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Itemantworten als Zahlen kodieren

Beitrag von bigben »

Hallo line,

so ganz verstehe ich das noch nicht. Wenn die Stimmung mit 5 Items à 6 Antwortoptionen erhoben wird, dann bildet man doch üblicherweise daraus eine Skala, beispielsweise eine Summenskala von 0 bis 30 oder von 6 bis 36. Spätestens bei diesem Schritt werden doch die Bezeichnungen der einzelnen Antwortoptionen irrelevant und man erhält Werte, die allgemein als quasi-metrisch angesehen werden.

Aber selbst wenn es bei den 6 Antwortmöglichkeiten bleibt, kommt es doch nicht auf die Bezeichnung, sondern auf den Zahlenwert an, wenn Du eine Korrelation rechnen möchtest. Will sagen: Wenn Du den in meinem ersten Codeblock verwendeten Aufruf von ordered() verwendest und dann anschließend über das Ergebnis ein as.integer() laufen lässt, hast Du doch schon genau das, was Du willst :?:

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