Resumen: Mi simulaciones no coinciden con mi poder de cálculo.
(Esta pregunta se ha convertido en bastante largo, así que usted no puede leer en la parte inferior. Creo que es un tamaño de la muestra problema).
Me estoy quedando algunas simulaciones para ayudar a diseñar un estudio, y estoy corriendo en algo que me confunde.
Hay dos grupos tratados y no tratados, y el resultado es que se caiga.
Tenemos un estimado de choque de la tasa de 0,1 en el grupo sin tratar, y creo que nos puede traer esto a 0.08. Un pequeño (y no viables) tamaño de la muestra es de 100 por grupo.
Así que me funcione la energía.prop.de prueba() para estimar el poder.
power.prop.test(p1=0.1, p2=0.08, n=100)
> power.prop.test(p1=0.1, p2=0.08, n=100)
Two-sample comparison of proportions power calculation
n = 100
p1 = 0.1
p2 = 0.08
sig.level = 0.05
power = 0.07122973
alternative = two.sided
NOTE: n is number in *each* group
Entonces me encontré con una simulación, porque quería explorar cómo a menudo nos había tomado la decisión equivocada en cuanto al mejor tratamiento.
library(Exact)
#Create a data frame called d, populate it with the numbers above.
set.seed(12345)
nTreated <- 100
nUntreated <- 100
probTreated <- 0.1
probUntreated <- 0.08
d <- data.frame(id = 1:10000)
d$nTreated <- nTreated
d$nUntreated <- nUntreated
d$probTreated <- probTreated
d$probUntreated <- probUntreated
#Generate some random results using rbinom()
d$treatedCrashes <- apply(cbind(d$nTreated, d$probTreated), 1,
function(x) sum(rbinom(x[1], 1, x[2])))
d$untreatedCrashes <- apply(cbind(d$nUntreated, d$probUntreated), 1,
function(x) sum(rbinom(x[1], 1,
x[2])))
#Do fisher's exact test on each replication:
d$fisher <- apply(cbind(d$nTreated - d$treatedCrashes,
d$treatedCrashes,
d$nUntreated - d$untreatedCrashes,
d$untreatedCrashes), 1,
function(x) fisher.test(matrix(x,
nrow=2))$p.value)
#test power
mean(d$fisher < 0.05)
Y me sale el 4,8% de la potencia, que es menor que la potencia.prop.función de prueba, dijo, Y es menor que 0.05, lo que parece una especie de mal.
> mean(d$fisher < 0.05)
[1] 0.0478
Es esto acerca de que la muestra es pequeña aproximación? Es un estúpido error de codificación? (Creo que no lo es, pero muchas veces he estado equivocado acerca de que antes). Es algo que no he pensado?
En respuesta a la sugerencia de que es porque la prueba exacta de Fisher está condicionado en los márgenes, volví a ejecutar el modelo con la estrella de Barnard de la prueba (exactamente en la biblioteca). (Pero he reducido a 1000 replicaciones, como este tomó 40 minutos).
d$exact <- apply(cbind(d$nTreated - d$treatedCrashes,
d$treatedCrashes,
d$nUntreated - d$untreatedCrashes,
d$untreatedCrashes), 1,
function(x) exact.test(matrix(x, nrow=2), to.plot=F, cond.row=T)$p.value)
d$exact <- lapply(d$exact, function(x) x[1][[1]])
mean(d$exact < 0.05)
> mean(d$exact < 0.05)
[1] 0.049
Me tienen casi la misma potencia.
Sin embargo, también corrí una prueba exacta para poder usar el poder.exacto.función test (), también en la Exacta de la biblioteca, lo cual da una muy similar nivel de potencia:
> power.exact.test(p1=0.1, p2=0.08, n1=100, n2=100,simulation=T, nsim=1000, method="Boschloo")
$power
[1] 0.045
$alternative
[1] "two.sided"
$method
[1] "Boschloo"
Lo que me hace pensar que es un tamaño de la muestra problema.