2016-10-13 2 views
0

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") 

Antwort

1

Der Absatz Sie gilt für Maßnahmen zitieren, die man auf 2x2-Tabellen basieren berechnen kann (das heißt, RR, OR, RD, AS und PETO). Die Argumente add und to haben keine Auswirkung auf Maßnahmen wie SMD und ROM.

Die einzige Möglichkeit, einen Mittelwert von 0 für eine Verhältnisskalierungsvariable zu erhalten (was die Verwendung von Antwortverhältnissen annimmt), ist, wenn jeder Wert gleich 0 ist. Daher muss die Varianz definitionsgemäß auch 0 sein. Dies gilt unabhängig davon, ob die Stichprobengröße 1 ist (in diesem Fall ist die Varianz natürlich auch 0) oder ob Sie eine größere Stichprobengröße haben.

Wenn mindestens eines der beiden Mittelwerte 0 ist, kann im Allgemeinen das logarithmische Antwortverhältnis nicht berechnet werden. Natürlich könnte man manuell eine Art von Konstante zu den Mitteln hinzufügen (und das gleiche für die SDs), aber das scheint ziemlich willkürlich. Die Anpassungen, die wir für Zählungen in 2x2-Tabellen vornehmen können, basieren auf statistischer Theorie (diese Anpassungen sind tatsächlich Verzerrungsreduktionen, die auch dazu führen, dass die Berechnung bestimmter Messungen möglich ist, wenn eine 0-Zählung vorliegt).

+0

Guter Punkt, dass bedeuten würde (fast) nie Null, so würde meine Frage selten auftauchen. – user2860703