smartphone1

R
eda
datawrangling
vis
yacsda
Published

May 7, 2024

1 Aufgabe

In dieser Fallstudie analysieren Sie die Ergebnisse einer Umfrage zum Thema Smartphone-Nutzung.

Kernstück der Umfrage ist die Smartphone-Sucht-Skala (kwon_smartphone_2013?). Eine Studie fand, dass ca. ein Siebtel der Studierenden süchtig nach ihrem Smartphone sind (haug_smartphone_2015?); demnach könnte dem Thema eine hohe Bedeutsamkeit zukommen.

  1. Importieren Sie den Datensatz zur Handynutzung von Google-Docs.
  2. Benennen Sie die Spalten um und zwar nach folgendem Muster: itemXY, wobei XY die Nummer der Spalte ist. Sichern Sie die ursprünglichen Spaltennamen in einem Vektor. Tipp: Der Funktion names(meine_tabelle) können Sie einen Vektor mit neuen Spaltennamen übergeben.
  3. Berechnen Sie für die Items der Smartphone-Addiction-Scale den Mittelwert pro Person. Tipp: Erstellen Sie einen Dataframe mit den entsprechenden Items und nutzen Sie dann die Funktion rowMeans(mein_dataframe), um den Mittelwert über mehrere Spalten für jede Zeile zu berechnen (“Score”).
  4. Visualisieren Sie die Verteilung des Scores getrennt für die Geschlechter.
  5. Nach einer Quelle (kwon_smartphone_2013?) liegt der Cutoff-Wert für Sucht bei 3.1 (Männer) bzw. 3.3 (Frauen). Bestimmen Sie den Anteil abhängiger Personen (pro Geschlecht).
  6. Das Item i13 ist ein Versuch, mit einem einzelnen Item zu messen, ob jemand süchtig nach seinem Smartphone ist (Item-Label: “Ich.würde.sagen..dass.ich.smartphone.süchtig.bin.”). Visualisieren Sie den Zusammenhang dieses Items mit dem Score.
  7. Visualsieren Sie den Anteil abhängiger Personen.
  8. Berechnen Sie, wie viel Geld für das zuletzt gekaufte Handy im Schnitt ausgegeben wurde. Gruppieren Sie dabei nach dem Betriebsystem.
  9. Wer gibt mehr Geld für das Handy aus: Frauen oder Männer? Beantworten Sie die Frage anhand des Medians.
  10. Visualisieren Sie den Median des Geldausgebens für das Handy, getrennt nach Geschlechtern
Tip

Nutzen Sie ChatGPT oder einen anderen Bot, um sich Hilfe mit dem R-Code zu holen. \(\square\)

Tip

Es wird (fast) nie von Ihnen verlangt, dass Sie eine Aufgabe mit einem bestimmten R-Befehl lösen. Wenn Ihnen ein bestimmter R-Befehl nicht zusagt (oder Sie ihn nicht kennen oder verstehen) – dann nehmen Sie einfach einen anderen R-Befehl, der Ihnen mehr zusagt. \(\square\)

Note

Beachten Sie die Hinweise des Datenwerks. \(\square\)

2 Lösung

2.1 Daten importieren

data_path <- "https://raw.githubusercontent.com/sebastiansauer/statistik1/main/daten/Smartphone-Nutzung%20(Responses)%20-%20Form%20responses%201.csv"
smartphone_raw <- read.csv(data_path)

Die Anzahl der Spalten einer Tabelle kann man sich übrigens z.B. mit ncol ausgeben lassen:

anz_spalten <- ncol(smartphone_raw)
anz_spalten
[1] 18

Unsere Datentabelle hat also 18 Spalten.

2.2 Spalten umbenennen

Zunächst sichern wir die alten Spaltennamen in einen Vektor:

item_labels_old <- names(smartphone_raw)
item_labels_old
 [1] "Timestamp"                                                                                                        
 [2] "Wann.haben.Sie.heute.zum.letzten.Mal.Ihr.Handy.benutzt..Bitte.geben.Sie.die.Uhrzeit.an."                          
 [3] "Aufgrund.meiner.Smartphone.Nutzung.erledige.ich.geplante.Aufgaben.nicht."                                         
 [4] "Aufgrund.meiner.Smartphone.Nutzung.fällt.es.mir.schwer..mich.in.der.Schule.oder.Arbeit.zu.konzentrieren."         
 [5] "Bei.der.Nutzung.des.Smartphones.bekomme.ich.Schmerzen.in.Handgelenk.oder.Nacken."                                 
 [6] "Ich.würde.es.nicht.aushalten..kein.Smartphone.zu.haben."                                                          
 [7] "Wenn.ich.mein.Smartphone.nicht.in.der.Hand.habe..fühle.ich.mich.unruhig.und.gereizt."                             
 [8] "Ich.denke.ständig.an.mein.Smartphone..auch.wenn.ich.es.nicht.benutze."                                            
 [9] "Ich.werde.nie.aufhören..mein.Smartphone.zu.benutzen..selbst.wenn.mein.Alltag.bereits.stark.davon.beeinflusst.ist."
[10] "Ich.schaue.ständig.auf.mein.Smartphone..um.keine.Neuigkeiten.zu.verpassen."                                       
[11] "Ich.benutze.mein.Smartphone.länger.als.ich.es.vorhabe."                                                           
[12] "Die.Menschen.in.meinem.Umfeld.sagen.mir..dass.ich.mein.Smartphone.zu.häufig.nutze."                               
[13] "Ich.würde.sagen..dass.ich.smartphone.süchtig.bin."                                                                
[14] "Hier.ist.Platz.für.Ihre.Kommentare"                                                                               
[15] "Bitte.geben.Sie.Ihr.Geschlecht.an."                                                                               
[16] "Bitte.geben.Sie.Ihr.Alter.an."                                                                                    
[17] "Bitte.geben.Sie.das.Betriebssystem.Ihres..am.meisten.genutzten..Handies.an."                                      
[18] "Wie.viel.Geld.haben.Sie.für.Ihr.zuletzt.gekauftes.Handy.gezahlt."                                                 

Variablen aus psychologischen Fragebögen nennt man übrigens oft items.

Und dann nennen wir die Spaltennamen um. Das geht mit der Funktion names(smartphone_raw) <-, der wir einen Vektor mit neuen Spaltennamen übergeben, z.B. so:

item_labels_new <- c( "item1",  "item2", "item3", "item4",
                      "item5", "item6",  "item7", "item8",
                      "item9",  "item10", "item11", "item12",
                      "item13", "item14", "item15", "item16",
                      "item17", "item18")

Wichtig ist, dass ihr Vektor item_labels_new genau so viele Elemente hat, wie die Datentabelle Spalten hat.

Jetzt können Sie der Funktion names() den neuen Vektor item_labels_new zuweisen und haben damit die Spaltenanmen geändert:

names(smartphone_raw) <- item_labels_new

Den Vektor item_labels_new zu erstellen, war Ihnen zu viel Tipperei? Ja, mir auch. Schneller geht’s mit der Funktion paste0. Das erklärt sich am einfachsten mit einem Beispiel:

paste0("item", 1:3)
[1] "item1" "item2" "item3"

Sehen Sie, was paste0 macht? Es fügt zwei Vektoreneinen Reißverschluss zusammen. Da item nur aus einem Element besteht, wird es item einfach auf die richtige Länge erhöht.

Der Doppelpunkt in 1:3 bedeutet “von 1 bis 3”.

Also:

names(smartphone_raw) <- paste0("item",1:anz_spalten)

Sie möchten lieber zweistellige Nummern für die Spalten, also 01, 02, …, 09, 10, …? Gute Idee. Aber wie macht man das? Eine einfache Lösung: Fragen Sie ChatGPT!

👩‍🎓: I want a string of the type “itemXY”, where XY is a number between 0 and 18. Make sure to use two digits. Use the R function paste0.

🤖: 😸

2.3 Vertiefung: Fingerabdruck der Datentabelle

Mit dem R-Paket visdat bekommt man einen “Fingerabdruck” der Datentabelle.

Am einfachsten erklärt sich das an einem Beispiel. Schauen Sie sich das folgende Diagramm mal an. Es zeigt Ihnen den Datentyp pro Spalte und außerdem fehlende Werte.

library(visdat)

vis_dat(smartphone_raw)

Das ist deutlich übersichtlicher als eine Excel-Tabelle, wenn es darum geht, die Datenstruktur grob zu verstehen.

2.4 Mittelwert der Smartphone-Addiction-Scale

smartphone_addiction_mittelwert <- 
smartphone_raw |> 
  select(item3:item12) |> 
  rowMeans()

Wir erhalten einen Vektor mit den Mittwerten (Score) pro Person für die Skala Smartphone-Abhängigkeit:

head(smartphone_addiction_mittelwert)
[1] 3.0 3.8 2.7 3.2 4.2 3.3

Diesen Vektor fügen wir dann unseren Daten hinzu. Außerdem benennen wir die Spalte item15 in sex um, damit wir uns merken können, in welcher Spalte das Geschlecht codiert ist.

smartphone <-
  smartphone_raw |> 
  mutate(smartphone_addiction_mean = smartphone_addiction_mittelwert) |> 
  rename(sex = item15) |>   
  filter(sex == "Frau" | sex == "Mann") 

Mit rename(neuer_name = alter_name) können Sie die Namen von Spalten Ihrer Datentabelle ändern.

🧑‍🎓 Also das mit rename hätte ich jetzt nicht gewusst.

👩‍🏫 Dann frag mal ChatGPT.

🤖 Ja, bitte!!

Alternativ können Sie die folgende, etwas fortgeschrittenere Syntax nutzen:

smartphone2 <- 
smartphone_raw |> 
  rowwise() |> 
  mutate(smartphone_addiction_mean = mean(c_across(item3:item12))) 

2.5 Score visualisieren

Leider kann DataExplorer nicht mehrere Gruppen in einem Dichtediagramm anzeigen. Wir müssten also mit DataExplorer zwei Diagramme erstellen, eines für Frauen und eines für Männer. Eleganter geht es mit dem Paket ggpubr

smartphone |> 
  ggdensity(x = "smartphone_addiction_mean", 
            color = "sex")

2.6 Anteil Smartphone-Abhängigkeit

Mit case_when erstellen wir folgende Regel:

  • “addicted”: wenn der Score > 3.1 und das Geschlecht “Mann” ist bzw.
  • “addicted”: wenn der Score > 3.3 und das Geschlecht “Frau” ist bzw.
  • “nicht addicted”: ansonsten
smartphone <-
  smartphone |> 
  mutate(is_addicted =
           case_when(smartphone_addiction_mean > 3.1 & sex == "Mann" ~ "addicted",
                     smartphone_addiction_mean > 3.3 & sex == "Frau" ~ "addicted",
                     TRUE ~ "not-addicted"))

Jetzt haben wir die Spalte is_addicted, die für jede Person (Zeile) angibt, ob die Person addicted ist. Nun zählen wir die Anzahl (n) aus, und zwar pro Geschlechtsgruppe. Weil es praktisch ist, rechen wir die Anzahl noch in einen Anteil (proportion) um.

smartphone_count <- 
smartphone |> 
  group_by(sex) |> 
  count(is_addicted) |> 
  mutate(is_addicted_proportion = n / sum(n))

smartphone_count
# A tibble: 4 × 4
# Groups:   sex [2]
  sex   is_addicted      n is_addicted_proportion
  <chr> <chr>        <int>                  <dbl>
1 Frau  addicted        18                  0.462
2 Frau  not-addicted    21                  0.538
3 Mann  addicted         2                  0.333
4 Mann  not-addicted     4                  0.667

2.7 Smartphone-Sucht, mit einzelnen Item gemessen

smartphone |> 
  select(smartphone_addiction_mean, item13) |> 
  drop_na() |> 
  plot_scatterplot(by = "smartphone_addiction_mean")

Es scheint einen Zusammenhang zwischen item13 und smartphone_addiction_mean zu geben.

2.8 Anteil der Abhängigen visualisieren

Der Anteil der abhängigen Personen ist in beiden Geschlechtern gleich hoch:

smartphone_count |> 
  plot_bar(by = "sex")

Hier noch eine alternative Visualisierung mit dem Paket ggpubr:

smartphone_count |> 
  ggbarplot(x = "sex", y = "n", fill = "is_addicted")

2.9 Kosten nach Betriebssystem

smartphone |> 
  group_by(item17) |> 
  summarise(price_mean = mean(item18, na.rm = TRUE))
# A tibble: 2 × 2
  item17  price_mean
  <chr>        <dbl>
1 Android       412 
2 iOS           742.

2.10 Kosten nach Geschlecht

smartphone |> 
  group_by(sex) |> 
  summarise(price_median = median(item18, na.rm = TRUE))
# A tibble: 2 × 2
  sex   price_median
  <chr>        <dbl>
1 Frau           700
2 Mann          1000

Männer geben im Median 300 Euro mehr aus.

Tip

Wenn Sie nicht mehr wissen, was z.B. na.rm = TRUE bedeutet, dann einfach googeln oder einen ChatBot fragen. In der Regel ist die Frage dann in zwei Minuten beantwortet. \(\square\)

2.11 Kosten nach Geschlecht visualisieren

smartphone |> 
  select(sex, item18) |> 
  plot_boxplot(by = "sex")

Wie man sieht ist der Median bei den Männern höher als bei den Frauen. Allerdings fällt der Median der Männer aus das dritte Quartil, was vermuten lässt, dass da irgendwas nicht stimmt. Schauen wir uns die Daten näher an:

smartphone |> 
  filter(sex == "Mann")
                item1    item2 item3 item4 item5 item6 item7 item8 item9 item10
1 02/05/2024 16:29:51              4     4     3    NA     1    NA     1      4
2 02/05/2024 16:30:37 16:20:00     2     5     2     4     3     3     3      3
3 02/05/2024 16:30:42 16:20:00     1     2     2     4     1     1     6      5
4 02/05/2024 16:30:48 16:30:00     5     5     2     6     2     2     5      4
5 02/05/2024 16:30:58 16:00:00     4     2     3     5     2     2     3      4
6 02/05/2024 16:31:28 16:28:00     6     6     1     6     3     2     6      3
  item11 item12 item13 item14  sex item16  item17 item18
1      4     NA      2        Mann     21 Android    400
2      4      2      4        Mann     19     iOS   1000
3      3      1      5        Mann     22     iOS   1200
4      5      4      4        Mann     19 Android    300
5      5      1      2        Mann     29     iOS   1000
6      6      2      5        Mann     19     iOS   1000
  smartphone_addiction_mean  is_addicted
1                        NA not-addicted
2                       3.1 not-addicted
3                       2.6 not-addicted
4                       4.0     addicted
5                       3.1 not-addicted
6                       4.1     addicted

Ah, es sind einfach sehr wenig Männer in diesem Datensatz enthalten.