Fehlermeldung bei trimfill Funktion

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

Moderator: EDi

Antworten
Laura25
Beiträge: 3
Registriert: Mi Feb 12, 2020 11:58 am

Fehlermeldung bei trimfill Funktion

Beitrag von Laura25 »

Liebe Community,

dies ist mein erster Eintrag und ich hoffe, dass ich an alle benötigten Infos gedacht habe :)
Ich arbeite zur Zeit an einer Meta-Analyse und mit dem metafor package. Als vereinfachte Datenstruktur habe ich zwei Variablen:
yi für die Effektstärken
vi für die Varianz der Effektstärken

Hier findet ihr mein reproduzierbares Minimalbeispiel:

Code: Alles auswählen

data <- structure(list(yi = structure(c(-3.97957983193277, -3.78316455696203, 
-3.44876946564885, -3.19228965517241, -2.97759120879121), format.spss = "F18.15", display_width = 16L), 
    vi = structure(c(1.46494705176188, 0.418507803236661, 0.279065509002972, 
    0.367668965517241, 0.170291317473735), format.spss = "F18.15", display_width = 16L)), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))

Ich möchte jetzt gern ein Funnel Plot mit der Trim and Fill Methode erstellen. Beim Vorgehen habe ich mich an dem Beispiel auf der Seite http://www.metafor-project.org/doku.php ... ]=trimfill orientiert. Das random-effects model zu erstellen ist kein Problem, das habe ich für andere Analysen auch schon gemacht und hatte damit nie Probleme. Sobald ich aber die Funktion trimfill ausführe, bekomme ich immer die folgende Fehlermeldung:

Fehler in if (!is.null(mods) && (nrow(mods) != k)) stop(mstyle$stop("Number of rows of the model matrix does not match length of the outcome vector.")) : Fehlender Wert, wo TRUE/FALSE nötig ist


Durch debug & traceback glaube ich herausgefunden zu haben, dass das Problem an folgender Stelle in der Funktion liegt:

if (is.vector(mods))
mods <- cbind(mods)


Die erstellte Variable "mods" ist nämlich numerisch und kein Vector...ein einfaches Überschreiben in "if (is.numeric(mods))" hilft an dieser Stelle aber leider nicht. Wenn ich das oben genannte Beispiel mit der Datei dat.hackshaw1998 ausführe, bekomme ich keine Fehlermeldung.

Ich hoffe sehr, dass mir jemand helfen kann! :)

Ganz liebe Grüße,
Laura
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Fehlermeldung bei trimfill Funktion

Beitrag von jogo »

Hallo Laura,

willkommen im Forum!
Bitte untersuche die Teilergebnisse, denn die Situation, die den Fehler erzeugt, sieht etwa so aus:

Code: Alles auswählen

if (NA) print("hallo")
Gruß, Jörg
Laura25
Beiträge: 3
Registriert: Mi Feb 12, 2020 11:58 am

Re: Fehlermeldung bei trimfill Funktion

Beitrag von Laura25 »

Hallo Jörg,

vielen Dank für die schnelle Antwort! :)

Leider konnte ich das Problem noch nicht lösen. Was genau soll ich untersuchen und was hat es mit deiner genannten print Funktion auf sich? :?
Ich bin leider ein absoluter Anfänger in R und deshalb sehr dankbar für jede Hilfe!


Viele Grüße,
Laura
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Fehlermeldung bei trimfill Funktion

Beitrag von jogo »

Hallo Laura,
Laura25 hat geschrieben: Mo Feb 17, 2020 11:02 am Leider konnte ich das Problem noch nicht lösen. Was genau soll ich untersuchen und was hat es mit deiner genannten print Funktion auf sich? :?
das war nur ein Beispiel für das, nach was man Ausschau halten muss (- nämlich die Konstruktion mit if (...) - der restliche Teil (ob print(...) oder etwas anderes) spielt hier keine Rolle), wenn man die Funktion trimfill() analysiert.

Den Quelltext der Funktion gibt es so:

Code: Alles auswählen

trimfill.rma.uni
Dieses Beispiel funktionert:

Code: Alles auswählen

df <- data.frame(es=c(.5,.6,.3,.1,.4,.7,1.1,.2,.2,1,2,1.1),
               se=c(.1,.1,.2,.3,.1,.1,.2,.1,.05,0.5,.1,.1))

trimfill(rma(yi=es,sei=se,data=df,method="DL"))
Quelle: https://stackoverflow.com/questions/357 ... r-trimfill

Auch dies funktioniert:

Code: Alles auswählen

library(metafor)
Data <- structure(list(yi = structure(c(-3.97957983193277, -3.78316455696203, 
                                        -3.44876946564885, -3.19228965517241, -2.97759120879121), format.spss = "F18.15", display_width = 16L), 
                       vi = structure(c(1.46494705176188, 0.418507803236661, 0.279065509002972, 
                                        0.367668965517241, 0.170291317473735), format.spss = "F18.15", display_width = 16L)), row.names = c(NA, 
                                                                                                                                            -5L), class = c("tbl_df", "tbl", "data.frame"))
##
trimfill(rma(yi, se=c(.1,.1,.2,.3,.1), data=Data,method="DL"))
hm, ob es vielleicht doch an den Daten liegt?
Klar ist: die Fehlermeldung bei Deinen Daten ist nicht sehr hilfreich. Deshalb bin ich der Meinung, dass man diesen Fall durchaus dem Autor mitteilen könnte.

Gruß, Jörg
Laura25
Beiträge: 3
Registriert: Mi Feb 12, 2020 11:58 am

Re: Fehlermeldung bei trimfill Funktion

Beitrag von Laura25 »

Lieber Jörg,

ich habe den Datensatz jetzt nochmal komplett neu und direkt in R erstellt.
Meinem Verständnis nach hat sich dadurch nichts an den Daten geändert (alle Analysen führen zu dem selben Ergebnis), aber jetzt konnte ich die trimfill Funktion problemlos durchführen. Woran es jetzt lag, kann ich also immer noch nicht nachvollziehen, aber ich konnte die Analysen rechnen.

Lieben Dank nochmal für deine Hilfe! :)


Viele Grüße,
Laura
Antworten