Berechnen Sie nochmals, wie schon in der vorigen Hausaufgabe, die durchschnittliche Körpergröße der erwachsenen Probanden aus der NHANES-Studie, aufgeschlüsselt nach Ethnie und Geschlecht.
suppressPackageStartupMessages(library(tidyverse))read_csv("data_on_git/nhanes.csv") %>%filter(!is.na(height), age >=18) %>%group_by(gender, ethnicity) %>%summarise(Avg_Adult_Height =mean(height))
Rows: 8704 Columns: 6
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): gender, ethnicity
dbl (4): subjectId, age, height, weight
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
`summarise()` has grouped output by 'gender'. You can override using the `.groups` argument.
# A tibble: 12 × 3
# Groups: gender [2]
gender ethnicity Avg_Adult_Height
<chr> <chr> <dbl>
1 female Mexican 157.
2 female NH Asian 156.
3 female NH Black 162.
4 female NH White 161.
5 female Other Hispanic 157.
6 female Other/Mixed 162.
7 male Mexican 170.
8 male NH Asian 170.
9 male NH Black 176.
10 male NH White 175.
11 male Other Hispanic 169.
12 male Other/Mixed 176.
Pivotieren Sie die Tabelle dann so, dass die Mittelwerte für die beiden Geschlechter nebeneinander statt untereinander stehen.
Rows: 8704 Columns: 6
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): gender, ethnicity
dbl (4): subjectId, age, height, weight
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
`summarise()` has grouped output by 'gender'. You can override using the `.groups` argument.
# A tibble: 6 × 3
ethnicity female male
<chr> <dbl> <dbl>
1 Mexican 157. 170.
2 NH Asian 156. 170.
3 NH Black 162. 176.
4 NH White 161. 175.
5 Other Hispanic 157. 169.
6 Other/Mixed 162. 176.
Aufgabe 2
In einem Experiment soll der Einfluss verschiedener Wirkstoffe auf das Wachstum von Hefezellen gemessen werden. Dazu wird eine Suspension von Hefezellen in Wasser angesetzt. Die Suspension wird auf eine 48-Well-Platte verteilt; jedes Well erhält die gleiche Menge an Hefe. Anschließend werden die Wirkstoffe in die Wells gegeben. Jeweils 6 Wells, nämlich die, die in derselben “Spalte” der Platte liegen, erhalten denselben Wirkstoff. Die folgende Tabelle gibt an, welcher Wirkstoff in welche der 8 Spalten gegeben wurde:
Anschließend wird in jedes Well eine für das Wachstum von Hefe geeignete Nährlösung hinzu gegeben, und die Platte dann für 3 Stunden bei 30 °C inkubiert.
Dann wird die Platte in einen. sog. Plattenscannner gegeben. Ein solche Scanner beleuchtet jedes Well von unten mit Licht einer vorgegebenen Wellenlänge und misst von oben, wie viel Licht durch das Well hindurch dringen kann. Je mehr Hefezellen im Well sind, desto trüber wird die Suspension, und desto größer ist die gemessene Licht-Absorption (optische Dichte, “OD”).
Der Plattenscanner erzeugt diese Excel-Datei als Ergebnis: example_plate_scan.xlsx. Laden Sie die Datei mit Excel (oder einem anderen Tabellenkalkulationsprogramm) und sehen Sie sie sich an.
Einlesen der Datei
Sie können diese Datei in eine CSV-Datei umwandeln und dann in R einlesen, oder Sie verwenden die Funktion read_excel aus dem Paket readxl, die Excel-Dateien direkt einlesen kann. In beiden Fällen müssen Sie die Zeilen über der eigentlichen Datentabelle entfernen. Bei read_xl können Sie hierzu das optionale Argument skip verwenden. So liest read_excel( "file.xls", skip=7) die Tabelle auf dem ersten Arbeitsblatt (Sheet) der Excel-Datei file.xls und überspringt dabei die ersten 7 Zeilen.
Die eingelesene Tabelle sollte 9 Spalten haben: 8 für die Spalten der Mikrotiterplatte und davor eine Spalte mit den Buchstaben, die die Zeilen nummerieren. Geben Sie dieser Spalte einen geeigneten Namen, z.B. zeile. Hierzu können Sie das Tidyverse-Verb rename verwenden.
Pivotieren Sie die Tabelle in ein “tidy-table”-Format, d.h., sorgen Sie dafür, das jedes Well eine eigene Tabellen-Zeile hat. Sie sollten nun 3 Spalten haben, für Platten-Zeile, Platten-Spalte, und Messwert.
# A tibble: 48 × 3
row column OD
<chr> <chr> <dbl>
1 A 1 0.916
2 A 2 0.856
3 A 3 0.17
4 A 4 2.58
5 A 5 0.033
6 A 6 0.872
7 A 7 1.38
8 A 8 0.587
9 B 1 1.11
10 B 2 0.813
# ℹ 38 more rows
Streudiagramm
Erzeugen Sie nun ein Streudiagramm, dass die gemessen optische Dichte für jeden Wirkstoff darstellt. Es könnte in etwa so aussehen:
Nützlich wäre auch, diese Mittelwerte durch den Mittelwert für Wasser zu teilen, um leichter zu sehen, welche Wirkstoffe das Wachstum fördern und welche es hemmen.
In diesem Plot habe ich einige Feinheiten geändert, so dass ihr Plot anders aussehen könnte. Ich habe die Punkte extra groß gemacht, damit sie wie Wells aussehen, und ich habe die y-Achse umgekehrt (weil Zeilen in Mikrotiterplatten von oben nach unten numeriert werden, ggplot die y-Achse aber von unten nach oben ansteigen lässt), die Farbskala logarithmisch gemacht, und die Palette geändert.
Einen solchen Plot benutzt man gerne, um sicher zu stellen, dass es keine Pippetierfehler oder Randeffekte gab.
Rows: 8704 Columns: 6
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): gender, ethnicity
dbl (4): subjectId, age, height, weight
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
nhanes %>%filter(!is.na(gender), !is.na(age), !is.na(height), gender =="male", age >=18) -> nhanes_men_onlynhanes_men_only
# A tibble: 2,630 × 6
subjectId gender age height weight ethnicity
<dbl> <chr> <dbl> <dbl> <dbl> <chr>
1 93706 male 18 176. 66.3 NH Asian
2 93711 male 56 171. 62.1 NH Asian
3 93712 male 18 173. 58.9 Mexican
4 93713 male 67 179. 74.9 NH White
5 93715 male 71 171. 65.6 Other/Mixed
6 93716 male 61 159. 77.7 NH Asian
7 93717 male 22 174. 74.4 NH White
8 93718 male 45 157. 54.4 NH Black
9 93723 male 64 170. 64.9 NH White
10 93727 male 70 162. 62.7 NH Asian
# ℹ 2,620 more rows
Wir bestimmen den Mittelwert der Körpergröße aller dieser Männer
Dann wählen wir mit sample_n 10 Zeilen zufällig aus. Jedesmal, wenn Sie den Code ausführen, werden andere Zeilen ausgewählt.Bestimmen Sie mit summarise und mean den Mittelwert dieser 10 Männer.