Kapitel 60 Fragen mit Mehrfachantworten

Bei Multiple Choice Fragen haben wir zwei Möglichkeiten:

  • Nur eine Antwort kann gewählt werden
  • Mehr als eine Antwort kann gewählt werden

Für die Datenzubereitung ist dies nicht immer ganz trivial.

Eine sehr gute Übersicht - zwar für Stata - finden Sie hier.

Wir werden versuchen, die Datenzubereitung und Datenanalyse hier auzuzeigen.

60.0.1 Folgende Pakete benötigen wir:

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)

60.1 Beispiel 1

Wir haben folgende Frage: Welche Statistikprogramme benutzen Sie?

Wir simulieren ein paar Daten

set.seed(666)
samplesize=120
Stata=sample(c(0,1), size=samplesize, rep=TRUE, prob=c(0.8,0.2))
R=sample(c(0,1), size=samplesize, rep=TRUE, prob=c(0.6,0.2))
SPSS=sample(c(0,1), size=samplesize, rep=TRUE, prob=c(0.9,0.1))

SAS=sample(c(0,1), size=samplesize, rep=TRUE, prob=c(0.99,0.01))
Jamovi=sample(c(0,1), size=samplesize, rep=TRUE, prob=c(0.95,0.05))
JASP=sample(c(0,1), size=samplesize, rep=TRUE, prob=c(0.99,0.01))
id<-1:samplesize

data<-data.frame(id, Stata, R, SPSS, SAS, Jamovi, JASP)

Jetzt gibt es verschiedene Möglichkeiten diese Daten zu analysieren. siehe auch hier.

  • dplyr::summarise Ansatz
  • Paket ufs mit dem Befehl multiResponse

Für den dplyr::sumarise Ansatz müssen wir die Daten zuerst zum langen Format transformieren.

data_long<-data %>% 
  pivot_longer(cols=-c(id), 
               names_to="Software", 
               values_to="Using")

Nun können wir die Daten relativ einfach zusammenfassen.

table_multiresponse<-data_long %>% 
  group_by(Software, Using) %>% 
  summarise(n=n()) %>% 
  mutate(Prozente=round(n / sum(n)*100,1)) %>% 
  filter(Using==1)
## `summarise()` has grouped output by 'Software'. You can override using the
## `.groups` argument.

Etwas schwieriger wird es, wenn ein Teil der Studienteilnehmer diese Frage gar nicht beantwortet. Um das zu illustrieren, entfernen wir ein paar Antworten.

data<-data %>% 
  mutate(across(c( "Jamovi", "JASP", "R",'Stata', 'SAS', 'SPSS'), ~replace(., id>80  , NA)))
ufs::multiResponse(data, c( "Jamovi", "JASP", "R",'Stata', 'SPSS'))
##   Option Frequency Percentage of responses Percentage of (80) cases
## 1 Jamovi         2                       4                     2.50
## 2   JASP         1                       2                     1.25
## 3      R        16                      32                    20.00
## 4  Stata        20                      40                    25.00
## 5   SPSS        11                      22                    13.75
## 6  Total        50                     100                    62.50

Manchmal werden die Daten als Komposit-String exportiert.

data<-data %>% 
  mutate(Kompositstring_numeric=paste(Stata, R, SPSS, SAS, Jamovi,JASP, sep=";" ))
head(data)
##   id Stata R SPSS SAS Jamovi JASP Kompositstring_numeric
## 1  1     0 0    0   0      0    0            0;0;0;0;0;0
## 2  2     0 0    0   0      0    0            0;0;0;0;0;0
## 3  3     1 0    0   0      0    0            1;0;0;0;0;0
## 4  4     0 1    0   0      0    0            0;1;0;0;0;0
## 5  5     0 0    0   0      0    0            0;0;0;0;0;0
## 6  6     0 0    0   0      0    0            0;0;0;0;0;0

So, das war’s für dieses Kapitel.