Argument ist nicht numerisch

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Mar204
Beiträge: 7
Registriert: Mo Mai 22, 2023 6:35 pm

Argument ist nicht numerisch

Beitrag von Mar204 »

Hallo zusammen,
ich bekomme in folgender Aufgabe die Meldung:

Code: Alles auswählen

test_result <- wilcox.test(chick_diet1$ordinal_weight_numeric, mu = 2)
Error in wilcox.test.default(chick_diet1$ordinal_weight_numeric, mu = 2) : 
  'x' muss numerisch sein
Aufgabe und meine Lösung:

Code: Alles auswählen

# a) Lade den Datensatz "ChickWeight" und führe eine explorative Datenanalyse durch. Gib die ersten sechs Zeilen des Datensatzes aus und erstelle eine Zusammenfassung der Daten. Berechne den Median des Küken-Gewichts für den gesamten Datensatz.
# Laden des Datensatzes
data(ChickWeight, package = "datasets")
# Erste sechs Zeilen anzeigen
head(ChickWeight)
# Zusammenfassung der Daten
summary(ChickWeight)
# Median des Küken-Gewichts berechnen
median_chickweight <- median(ChickWeight$weight)
median_chickweight
# b) Erstelle einen Boxplot für das Küken-Gewicht für den gesamten Datensatz.
# Boxplot erstellen
boxplot(ChickWeight$weight, main = "Boxplot of Chick Weight", ylab = "Weight (g)")
# c) Filter den Datensatz auf die Daten von Küken, die mit Futtertyp 1 (Diet 1) gefüttert wurden.
# Filtern des Datensatzes auf Futtertyp 1
chick_diet1 <- ChickWeight[ChickWeight$Diet == 1, ]
# d) Konvertiere das Gewicht der Küken (Spalte "weight") in eine ordinalskalierte Variable, indem du die Gewichte in vier Kategorien einteilst: sehr leicht = „1“, leicht = „2“, schwer = „3“ und sehr schwer = „4“. Hierfür kannst du die Funktion "cut()" in R verwenden.
chick_diet1$ordinal_weight_numeric <- cut(chick_diet1$weight, breaks = 4, labels = c("sehr leicht" = 1, "leicht" = 2, "schwer" = 3, "sehr schwer" = 4))
head(chick_diet1)
# e) Berechne die Häufigkeiten der Gewichtskategorien im Datensatz und führe den Einstichproben-Wilcoxon-Test durch, um zu testen, ob der Median der ordinalskalierten Gewichtskategorie signifikant von der Kategorie "leicht" abweicht. Verwenden Sie hierfür die Funktion "wilcox.test()" in R.
# Berechnung der Häufigkeit der Gewichtskategorien
table(chick_diet1$ordinal_weight_numeric)
# Durchführen des Einstichproben-Wilcoxon-Tests
test_result <- wilcox.test(chick_diet1$ordinal_weight_numeric, mu = 2)
Wie muss ich meinen Code ändern sodass das argument numerisch ist?
Danke für euere Antworten!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Argument ist nicht numerisch

Beitrag von bigben »

Hallo Mar,

Du hast momentan eine Faktorvariable chick_diet1$ordinal_weight_numeric. Grundsätzlich kann man die einfach mit as.numeric() numerisch machen. Kritisch ist dabei aber die Frage, ob die Reihenfolge der Faktorstufen korrekt erhalten wurde. Aus mir unerfindlichen Gründen produziert cut() normalerweise keine geordneten Faktoren sondern "einfache", also solche die eigentlich an keine feste Reihenfolge gebunden sind. Dazu kommt, dass ich die von Dir im Aufruf von but verwendete Syntax nicht kenne. Bei

Code: Alles auswählen

 labels = c("sehr leicht" = 1, "leicht" = 2, "schwer" = 3, "sehr schwer" = 4)
frage ich mich, ob da ein Vektor aus "leicht", "leicht", "schwer" herauskommt oder ein Vektor 2, 2, 3. Ich glaube an letzteres und dass die Textbeschreibungen "leicht", "schwer" etc. verloren gehen.

Mein Vorschlag:
Erzeuge Dir eine neue Spalte mit

Code: Alles auswählen

chick_diet1$ordinal_weight_truely_numeric <- as.numeric(chick_diet1$ordinal_weight_numeric) 
und gleiche mit chick_diet1$weight ab, ob die Reihenfolge richtig erhalten worden ist. Zum Beispiel grafisch so:

Code: Alles auswählen

plot(jitter(chick_diet1$ordinal_weight_truely_numeric),  chick_diet1$weight)
Wenn das simmt, dann solltest Du damit auch Deinen wilcox.test rechnen können.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Mar204
Beiträge: 7
Registriert: Mo Mai 22, 2023 6:35 pm

Re: Argument ist nicht numerisch

Beitrag von Mar204 »

Hallo Bernhard,
danke für deine Antwort.
Ja so kann ich den Test durchführen. Allerdings erhalte ich ein anderes Ergebnis als meine Musterlösung. Leider habe ich nur was rauskommen soll am ende.
Ich bekomme:
test_result

Wilcoxon signed rank test with continuity correction

data: chick_diet1$ordinal_weight_truely_numeric
V = 2975, p-value = 9.27e-13
alternative hypothesis: true location is not equal to 2

Musterlösung:
V = 6551, p -value = 4.689e-10

Kann es sein dass die Musterlösung einfach falsch ist? Oder habe ich die cut() funktion falsch ausgeführt?

Viele Grüße
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Argument ist nicht numerisch

Beitrag von bigben »

Hallo,

zu der Musterlösung kann ich Dir nichts sagen, ich halte Dein Testergebnis für nachvollziehbar. Die Funktion cut() bietet vielfältige Einstellmöglichkeiten und die Aufgabenstellung ist hier nicht sehr präzise. Nun ist der Unterschied zwischen 9e-13 und 5e-10 auch nicht sehr groß, dass diese Nullhypothese zurückgewiesen werden muss ist wahrscheinlich deutlicher als die Frage, ob der Ein-Stichproben-Test wirklich den Median untersucht...

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Mar204
Beiträge: 7
Registriert: Mo Mai 22, 2023 6:35 pm

Re: Argument ist nicht numerisch

Beitrag von Mar204 »

Ja da hast du wohl recht!
Danke für deine hilfe.

Viele grüße
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Argument ist nicht numerisch

Beitrag von student »

Hallo Mar204,

ich beziehe mich nur auf das Testergebnis:

Code: Alles auswählen

test_result

Wilcoxon signed rank test with continuity correction

data: chick_diet1$ordinal_weight_truely_numeric
V = 2975, p-value = 9.27e-13
alternative hypothesis: true location is not equal to 2

Musterlösung:
V = 6551, p -value = 4.689e-10
Im Augenblick ist der Wilcox-Test wohl das Thema ;) und wenn Du die Methodik ein wenig kennst, sollten Dich die sehr unterschiedlichen V's 2975 und 6551 zum Nachdenken anregen. Die Funktion cut() kann das Problem sein, aber ich nehme an, dass Du Dich an das vorgegebene Skript (Daten, breaks, ...) gehalten hast.

JM2C...
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Antworten