Anova - Fehlende Variablen im Longformat

Varianzanalyse, Diskriminanzanalyse, Kontingenzanalyse, Faktorenanalyse, Clusteranalyse, MDS, ....

Moderator: EDi

Antworten
JanRichter
Beiträge: 4
Registriert: Mo Jan 11, 2021 4:49 pm

Anova - Fehlende Variablen im Longformat

Beitrag von JanRichter »

Hallo,

ich schreibe zurzeit meine Bachelor-Arbeit und stecke in R fest. Konkret möchte ich eine Anova durch führen, zunächst mit einer UV und dann mit zweien, daher dachte ich, ich nutze mehr oder weniger den gleichen Befehl.

Die zugehörigen Daten konnte ich einlesen und ins Longformat über den Befehl:

daten_zufriedenheit_weiterarbeiten.long<-melt(daten_zufriedenheit_weiterarbeiten,id.vars = c("ID"),varying=c("Slogan","Zufriedenheit"))

umschreiben. Das ganze sieht stimmig aus, siehe Anhang.

Wenn ich jetzt die Anova über:

fit<- ezANOVA(wid = ID,dv = Zufriedenheit,between = "Slogan",type = 3,data = daten_zufriedenheit_weiterarbeiten.long,return_aov = TRUE)

durchführen will, kommt als Fehler:

Fehler in ezANOVA_main(data = data, dv = dv, wid = wid, within = within, :
"Zufriedenheit" is not a variable in the data frame provided.

R scheint also die Variablen nicht zu kennen, egal ob ich " oder ' verwende, es bleibt gleich, nutze ich die Funktion names, kann ich die Variablen allerdings umbenennen, daher verstehe ich den Fehler nicht. Kann mir jemand weiter helfen?

Vielen Dank!
Dateianhänge
Bildschirmfoto 2021-01-11 um 16.55.18.png
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anova - Fehlende Variablen im Longformat

Beitrag von bigben »

Hi!

Laut dem Screenshot hast Du drei Variablen: "ID", "variable" und "value". Keine der Variablen heißt Slogan oder Zufriedenheit. Die Variable "variable" nimmt aber die Werte "Slogan" und "Zufriedenheit" an. Kann es sein, dass Dir Dein Datensatz "zu lang" geraten ist? Was sagt denn

Code: Alles auswählen

str(daten_zufriedenheit_weiterarbeiten)
?

Für Hilfe hier im Forum ist es übrigens immer besser, Daten als gültigen R-Code in [code.]-Tags zu posten als Screenshots. Oft ist es für Ratschläge hier hilfreich auch zu wissen, worum es geht bzw. was genau Du mit den Daten da machen willst.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
JanRichter
Beiträge: 4
Registriert: Mo Jan 11, 2021 4:49 pm

Re: Anova - Fehlende Variablen im Longformat

Beitrag von JanRichter »

Hallo Bernhard,

vielen Dank, Slogan und Zufriedenheit waren im Wideformat meine Variablen, um eine Anova durchführen zu können, muss ich die doch in long Format (also untereinander) umschreiben oder nicht?

[str]

zeigt mir
'data.frame': 215 obs. of 3 variables:
$ ID : int 1 2 3 4 5 6 7 8 9 10 ...
$ Slogan : chr "3" "4" "4" "4" ...
$ Zufriedenheit: num 5.12 5.12 5.38 6.88 6.25 ...

wie setze ich den [code.] genau ein? ich hatte es mit [code.]Befehle[code.] und mögliche Varianten davon versucht, dann setz ich das gern um
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anova - Fehlende Variablen im Longformat

Beitrag von bigben »

Den Punkt in [code.] muss man weglassen, das konnte ich nur oben nicht.

sowas wie
[code]datensatz <- data.frame(id = 1:6, slogan = c("a", "b", "a", "b", "a", "b"), zufriedenheit = rnorm(6))
summary(lm(zufriedenheit ~ slogan, data = datensatz))
[/code]

wird dann zu (nächster Post)
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anova - Fehlende Variablen im Longformat

Beitrag von bigben »

...wird dann zu

Code: Alles auswählen

datensatz <- data.frame(id = 1:6, slogan = c("a", "b", "a", "b", "a", "b"), zufriedenheit = rnorm(6))
summary(lm(zufriedenheit ~ slogan, data = datensatz))
Mit der Syntax von ezANOVA bin ich (noch) nicht vertraut. Diese Daten würden sich jetzt anbieten, die Abhängigkeit von zufriedenheit je nach slogan zu untersuchen. Gehe ich recht in der Annahme, dass Du jede ID mehrfach untersucht hast und deshalb jetzt eine repeated measures ANOVA rechnen willst?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
JanRichter
Beiträge: 4
Registriert: Mo Jan 11, 2021 4:49 pm

Re: Anova - Fehlende Variablen im Longformat

Beitrag von JanRichter »

Hallo Bernhard,

danke für die Antworten, ich bin inzwischen deutlich weiter, stoße aber auf den nächsten Fehler.

Zunächst brauche ich kein Long-Format, da ich eine Anova im between subject design habe. Es gibt also keine 2 Zeitpunkte aber 2 Unabhängige Variablen (hier Slogan und Alter). Daher ist der Ursprungsfehler nicht mehr aktuell, meine Daten sehen jetzt so aus, da ich über Subset die relevanten Gruppen gebildet habe:

Code: Alles auswählen

str(dataHypone)
'data.frame': 112 obs. of 4 variables:
$ ID : int 2 3 4 5 6 7 8 9 10 12 ...
$ Alter : num 4 1 3 1 3 5 3 1 2 5 ...
$ Slogan : num 4 4 4 4 4 4 1 1 4 1 ...
$ Zufriedenheit: num 5.12 5.38 6.88 6.25 7 ...

mit:

Code: Alles auswählen

summary(dataHypone)
ID Alter Slogan
Min. : 2.0 Min. :1.000 Min. :1.000
1st Qu.: 59.5 1st Qu.:2.000 1st Qu.:1.000
Median :113.0 Median :3.000 Median :1.000
Mean :111.2 Mean :2.759 Mean :2.446
3rd Qu.:169.2 3rd Qu.:4.000 3rd Qu.:4.000
Max. :215.0 Max. :5.000 Max. :4.000
Zufriedenheit
Min. :1.250
1st Qu.:4.875
Median :5.562
Mean :5.477
3rd Qu.:6.500
Max. :7.000

Verwende ich jetzt

Code: Alles auswählen

fit<-ezANOVA(wid ="ID",dv = "Zufriedenheit",between = "Slogan",type = 3,data = dataHypone,return_aov = TRUE)
erhalte ich als Fehler: Fehler in names(dn) <- dnn : Versuch ein Attribut von NULL zu setzen.

Was mache ich falsch?

Danke,
Jan
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anova - Fehlende Variablen im Longformat

Beitrag von bigben »

Hallo Jan,

schön, dass Du voran kommst.
da ich eine Anova im between subject design habe. Es gibt also keine 2 Zeitpunkte aber 2 Unabhängige Variablen (hier Slogan und Alter).

Also wollen wir eine klassische zweifaktorielle Anova rechnen, mit Slogan und Alter als unabhängigen und Zufriedenheit als abhängiger Variable.
meine Daten sehen jetzt so aus, da ich über Subset die relevanten Gruppen gebildet habe:
Das verstehe ich nicht. Wie kann man mit subset Gruppen bilden?

Code: Alles auswählen

str(dataHypone)

'data.frame':	112 obs. of  4 variables:
 $ ID           : int  2 3 4 5 6 7 8 9 10 12 ...
 $ Alter        : num  4 1 3 1 3 5 3 1 2 5 ...
 $ Slogan       : num  4 4 4 4 4 4 1 1 4 1 ...
 $ Zufriedenheit: num  5.12 5.38 6.88 6.25 7 ...
Normalerweise sind Gruppenzugehörigkeiten ja etwas nominales, deshalb störe ich mich hier daran, dass die Gruppenvariablen als "numeric" hinterlegt sind und nicht als factor. Da fehlt mir jetzt aber ganz klar die Kenntnis der Funktion "ezANOVA" um zu sagen, ob das ok oder ein Problem ist. Wenn die Funktion keine Warnung ausgibt, wird es wohl irgendwie ok sein(?).
Verwende ich jetzt

Code: Alles auswählen

fit<-ezANOVA(wid ="ID",dv = "Zufriedenheit",between = "Slogan",type = 3,data = dataHypone,return_aov = TRUE)
Ich weiß nicht, warum da Anführungszeichen um die Spaltennamen stehen. Erforderlich sind die bestimmt nicht, vielleicht verwirren sie ezANOVA. Das würde ich als erstes ändern und schauen, ob der Fehler dann noch kommt oder nicht mehr. Das andere verwirrende ist das Fehlen der unabhängigen Variablen Alter - es sollte doch eine zweifaktorielle Anova werden? Zuletzt habe ich keine Ahnung, warum die Funktion die Spalte ID brauchen sollte, wenn wir keine within-Analyse machen.
erhalte ich als Fehler: Fehler in names(dn) <- dnn : Versuch ein Attribut von NULL zu setzen.
Das ist hier von meinem Sofa aus gar nicht einzuordnen. Ich würde erstmal die Anführungszeichen weglassen und wenn der Fehler davon unbeeindruckt bleibt Alter und Slogan in faktoren umwandelst und wenn der Fehler auch davon unbeeindruckt bleibt schlage ich vor, dass Du ein reproduzierbares Beispiel einstellst, beispielsweise das Ergebnis von

Code: Alles auswählen

dput(dataHypone)


LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Anova - Fehlende Variablen im Longformat

Beitrag von bigben »

So, ich habe mir mal das Paket ez installiert und ausprobiert.

Zunächst einmal eine numerische id und zwei numerische UVs:

Code: Alles auswählen

library(ez)
bsp <- data.frame(id = 1:75, a = rep(1:5,15), b = rep(1:5, each = 15), c = rnorm(25))
str(bsp)
ezANOVA(data = bsp, dv = c, wid = id, between = list(a,b), type = 2)
Wie vermutet beschwert sich die Funktion sofort über die metrischen UVs und nimmt sie nicht als Gruppierungs-, sondern als Covariate.

Wandelt man die ID und die Gruppierungsvariablen in factors um, dannn läuft die Funktion:

Code: Alles auswählen

library(ez)
bsp <- data.frame(id = factor(1:75), a = factor(rep(1:5,15)), b = factor(rep(1:5, each = 15)), c = rnorm(25))
str(bsp)
ezANOVA(data = bsp, dv = c, wid = id, between = list(a,b), type = 2)
HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
JanRichter
Beiträge: 4
Registriert: Mo Jan 11, 2021 4:49 pm

Re: Anova - Fehlende Variablen im Longformat

Beitrag von JanRichter »

Hallo Bernhard,

zunächst: Herzlichen Dank! Anova ist geglückt! Ich konnte alle Hypothesen durchtesten.

Ich bin jetzt an der Interpretation und ggfs. Visualisierung der Ergebnisse.

Jan
Antworten