Wie berechnet man den p.-Wert eines Odds Ratio in R?

8

Ich habe folgende Wertetabelle:

25  75
38  162

Das Odds Ratio beträgt 0,7037 und log (OR) beträgt -0,3514. Für eine Kontingenztabelle mit den Werten a, b, c und d ist die Varianz von log (OR) gegeben durch

(1/a + 1/b + 1/c + 1/d)

Wie kann ich den p.-Wert von log (OR) aus diesen Daten in R berechnen (ob er sich signifikant von 0 unterscheidet)?

rnso
quelle

Antworten:

9

Sie können den exakten Fisher-Test verwenden, der eine Kontingenztabelle eingibt und einen p-Wert ausgibt, mit einer Nullhypothese, dass das Odds Ratio 1 ist, und einer alternativen Hypothese, dass das Odds Ratio nicht gleich 1 ist.

(tab <- matrix(c(38, 25, 162, 75), nrow=2))
#      [,1] [,2]
# [1,]   38  162
# [2,]   25   75
fisher.test(tab)
# 
#   Fisher's Exact Test for Count Data
# 
# data:  tab
# p-value = 0.2329
# alternative hypothesis: true odds ratio is not equal to 1
# 95 percent confidence interval:
#  0.3827433 1.3116294
# sample estimates:
# odds ratio 
#  0.7045301 

In diesem Fall beträgt der p-Wert 0,23.

Josliber
quelle
Vielen Dank für eine clevere Methode zur Bestimmung des p-Werts. In ähnlicher Weise kann auch der Chi-Quadrat-Test verwendet werden.
rnso
@rnso sicher, obwohl der exakte Fisher-Test dem Chi-Quadrat vorgezogen wird, wenn Sie kleine Zellengrößen in Ihrer Kontingenztabelle haben.
Josliber
4
χ2P.
χ2p
1
Ausführliche Kommentare hierzu finden Sie auf der Website. Kurz gesagt, die P-Werte aus dem Fisher-Test sind zu groß. Der mittlere absolute Fehler in den P-Werten aus dem Pearson-Test ist kleiner. Fisher's ist nur "genau" in dem Sinne, dass P-Werte "garantiert" nicht zu klein sind.
Frank Harrell
9

Eine andere Möglichkeit (außer dem exakten Fisher-Test) besteht darin, die Werte in ein Binomial-GLM zu schreiben:

d <- data.frame(g=factor(1:2),
                s=c(25,75),
                f=c(38,162))
g <- glm(s/(s+f)~g,weights=s+f,data=d,
    family="binomial")
coef(summary(g))["g2",c("Estimate","Pr(>|z|)")]
##   Estimate   Pr(>|z|) 
## -0.3513979  0.2303337 

p

anova(g,test="Chisq")

was gibt

##      Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL                     1     1.4178         
## g     1   1.4178         0     0.0000   0.2338

p=0,2338p=0,2303337p=0,2329

Ben Bolker
quelle
4

χ2P.rms

f <- lrm(y ~ groups, weights=freqs)
f  # prints LR chi-sq, d.f., P, many other quantities

Hier sind die verschachtelten Modelle dieses Modell und ein Nur-Intercept-Modell.

Frank Harrell
quelle
Ich konnte feststellen, dass der LR-Test (lrtest) zum Vergleichen verschachtelter Modelle verwendet wird. Wie können wir es hier verwenden? Könnten Sie eine Zeile R-Code dafür schreiben?
Rnso
Für das, was es wert ist, ist dies mehr oder weniger der gleiche statistische Ansatz (wenn auch mit einer besseren Erklärung) wie in meiner obigen Antwort. lrm()hat verschiedene Standardeinstellungen, Ausgabeformate usw., aber das statistische Modell (IIUC) ist das gleiche wieglm(...,family="binomial")
Ben Bolker