Ich verwende das "metafor" -Paket in R, um Protokollantworten durchzuführen. Einige meiner Mittelwerte sind Null, was die Ursache für eine Warnung nach meinem escalc
-Befehl zu sein scheint (seit log(0)
ist -inf). Das metafor-Paket bietet eine Methode zum Hinzufügen eines kleinen Werts zu Null, um dies zu vermeiden. Die Dokumentation besagt:Protokollantworten mit 'Metafor' mit Nullen
"Zelleinträge mit einer Null können vor allem für das relative Risiko und die Odds Ratio problematisch sein. Das Hinzufügen einer kleinen Konstante zu den Zellen der 2 × 2-Tabellen ist eine gängige Lösung für dieses Problem [.. .] Wenn to = "only0", wird der Wert add zu jeder Zelle der 2 × 2-Tabellen nur in jenen Tabellen hinzugefügt, in denen mindestens eine Zelle 0 ist.
Aus irgendeinem Grund löst dies nicht meinen Fehler, vielleicht weil meine Daten keine 2x2-Tabelle sind? (Es wird von summiert mit ddply aus dem Lagenpaket ausgegeben, ähnlich der Formatierung in this example). Muss ich die Nullwerte manuell durch eine kleine Zahl ersetzen oder gibt es einen eleganteren Weg? (Beachten Sie, dass in diesem Beispiel die Zeilen mit Null ebenfalls eine Stichprobengröße von 1 und somit keine Varianz haben und trotzdem aus der Analyse entfernt werden. Ich möchte nur wissen, wie das für die Zukunft funktioniert).
Reproduzierbare Beispiel:
dat<-dput(Bin_Y_count_summary_wide)
structure(list(Species.ID = c("CAFERANA", "TR11", "TR118", "TR500",
"TR504", "TR9", "TR9_US1"), Y_num_mean.early = c(2, 147.375,
4.5, 0.5, 12.5, 93.4523809523809, 5), N.early = c(1L, 4L, 2L,
4L, 4L, 7L, 2L), sd.early = c(NA, 174.699444284558, 6.36396103067893,
1, 22.4127939653523, 137.506118190001, 7.07106781186548), se.early = c(NA,
87.3497221422789, 4.5, 0.5, 11.2063969826762, 51.9724274972283,
5), Y_num_mean.late = c(0, 3.625, 2.98482142857143, 0.8, 3, 47.2,
0), N.late = c(1L, 4L, 7L, 10L, 10L, 8L, 1L), sd.late = c(NA,
7.25, 5.10407804830748, 1.75119007154183, 8.03118920210451, 40.7351024477486,
NA), se.late = c(NA, 3.625, 1.9291601697265, 0.553774924194538,
2.53968501984006, 14.4020335865659, NA), Y_num_mean.wet = c(NA,
71.5, 0, 12, 27, 0, NA), N.wet = c(NA, 2L, 1L, 2L, 2L, 2L, NA
), sd.wet = c(NA, 17.6776695296637, NA, 9.89949493661167, 38.1837661840736,
0, NA), se.wet = c(NA, 12.5, NA, 7, 27, 0, NA)), row.names = c(NA,
7L), .Names = c("Species.ID", "Y_num_mean.early", "N.early",
"sd.early", "se.early", "Y_num_mean.late", "N.late", "sd.late",
"se.late", "Y_num_mean.wet", "N.wet", "sd.wet", "se.wet"), class = "data.frame", reshapeWide = structure(list(
v.names = c("Y_num_mean", "N", "sd", "se"), timevar = "early_or_late",
idvar = "Species.ID", times = c("early", "late", "wet"),
varying = structure(c("Y_num_mean.early", "N.early", "sd.early",
"se.early", "Y_num_mean.late", "N.late", "sd.late", "se.late",
"Y_num_mean.wet", "N.wet", "sd.wet", "se.wet"), .Dim = c(4L,
3L))), .Names = c("v.names", "timevar", "idvar", "times",
"varying")))
# Warning produced from this command
test <- escalc(measure="ROM", m1i=Y_num_mean.early, sd1i=sd.early, n1i=N.early, m2i=Y_num_mean.late, sd2i=sd.late, n2i=N.late, data=dat, add=1/2, to="only0")
Guter Punkt, dass bedeuten würde (fast) nie Null, so würde meine Frage selten auftauchen. – user2860703