MÓDULO 6:

Anuncio
MÓDULO 6:
Apartado 3
Simulación del cálculo de n
Preparado por Laura Riba
Simulación realizada a partir del “Protocolo de ensayo clínico de paliperidona frente a
risperidona inyectable de larga duración en psicosis de nuevo diagnóstico” expuesto en el
informe del Módulo 6, “Resumen de un protocolo con SPIRIT”.
SIMULACIÓN de un ECA
Nota: La simulación propuesta utiliza distribuciones normales, ya que permiten determinar la
correlación desde el principio. Sin embargo, somos conscientes de que las distribuciones
normales multivariantes no son un componente del curso de BNE. Para poder generar este tipo
de distribuciones, hay que definir la matriz Σ de varianzas y covarianzas, y usar un paquete
especial de R (mvtnorm).
Para el caso en que la correlación basal – final es 0.5, el tamaño muestral es de 252 pacientes
por rama si se quiere obtener una potencia del 80%. Simularemos para cada paciente el valor
basal y final de la escala PANSS, teniendo en cuenta que siguen una distribución normal
multivariante. Sin considerar aún el efecto del tratamiento, si ‘0’ representa el valor inicial, ‘f’
el final, y (0,f) su covarianza:
Los valores de los parámetros fijados son:
Así pues, la varianza es 400 y la covarianza es:
Por lo tanto, la matriz de varianzas y covarianzas es:
Para cada simulación, los datos se guardarán en una matriz Y de N = 504 filas (cada fila será un
paciente) y dos columnas, donde la columna 1 será la PANSS basal y la columna 2 será la
PANSS final.
Un vector adicional g contendrá el grupo de asignación, determinado al azar. Creamos los dos
grupos de pacientes, según el tratamiento recibido:
-
En el grupo 1, suponemos que la media de la escala PANSS al inicio y al final es la
misma.
-
En el grupo 2, suponemos que la media de la escala PANSS al final es delta unidades
mayor que al principio.
-
Por lo tanto, para uno de los tratamientos no hay cambio en la escala PANNS y para el otro
tratamiento sí. Queremos ver si podemos detectar esa diferencia de 5 unidades.
Dado que la escala PANSS se mueve en un rango de valores entre 30 y 210, al escoger una
, es posible que simulemos algún valor por debajo de 30, por lo que truncamos a 30 y
ponemos los valores inferiores iguales a 30. También redondeamos las variables, para que den
valores enteros (ello da a los valores simulados un aspecto más realista, pero no es un paso
necesario, en verdad).
Este proceso lo repetiremos M veces (5000, en nuestra simulación). En cada ejecución, una vez
generados los datos, calcularemos el cambio C = Y[,2] –Y[,1] entre la respuesta final y la inicial.
Y luego miraremos si hay diferencias entre la media del cambio del grupo 1 y la media del
cambio del grupo 2 mediante el test de la t de Student (sin suponer igualdad de varianzas
entre los dos grupos).
Así pues, haremos la comparación M, y obtendremos M p-valores. Contaremos cuántos de
estos no son significativos y qué proporción del total son, por lo que estamos estimando el
valor de (en cuantos casos no rechazamos la hipótesis nula de que hay diferencias cuando en
realidad sí que las hay). O, si lo que contamos es la proporción de p-valores significativos
(menores del 5%, en este caso), estaremos estimando la potencia, que debería de ser del 80%.
Aquí partimos de que conocemos el tamaño muestral que da una potencia del 80%. Pero en
caso de que la distribución de la variable sea más compleja y no sepamos calcular el tamaño
muestral con una fórmula, habría que probar con varios tamaños muestrales (cambiar la N del
código) hasta dar con aquella que proporcione una potencia similar a la deseada. Esta es la
gran ventaja de la simulación.
Nuestro problema tiene la dificultad añadida de que la variable simulada no es normal, ni
sabemos cómo se distribuye. Realmente podríamos llegar a generar valores aleatorios de
alguna forma posiblemente más realista que la empleada (tal vez, dando un carácter más
asimétrico a la variable PANSS), pero la mayor dificultad estaría en lograr generar pares de
valores con cierta correlación. Este punto no es trivial, y se ha obviado.
A continuación se muestra el código de R comentado:
### SIMULACIÓN
N
X
M
F
=
=
=
=
504
# Nº de pacientes
matrix(NA, nrow=N, ncol=2) # Matriz donde se guardaran los datos
5000
# Nº de simulaciones
0 # Contador de p-valores, inicialmente a 0
# Parámetros
delta = 5
mu = 60
sigma = 20
var = sigma^2
rho = 0.5
# Covariancia
u = rho*sigma*sigma
# Matriz de varianzas y covarianzas
var_covar = matrix(c(var, u, u, var), nrow=2)
# Simulación
for (i in 1:M)
{
# Asignamos cada paciente (cada fila) a un grupo de tratamiento
g = sample(c(rep(1,N/2), rep(2, N/2)))
# Generamos los valores
X[g==1,] = rmvnorm(n = N/2, mean = c(mu, mu), sigma = var_covar)
X[g==2,] = rmvnorm(n = N/2, mean = c(mu, mu + delta), sigma
var_covar)
=
# Truncamos y redondeamos
X[X[,1]<30,1]=30
X[X[,2]<30,2]=30
X = round(X)
# Calculamos el cambio y realizamos el contraste
C = X[,2]-X[,1]
T=t.test(C~g) # unequal vars
if (T$p.value > 0.05) F=F+1
}
# β
F/M
# Potencia
(M-F)/M
Si, por ejemplo, la correlación fuera 0.3, esta es una posible salida (la potencia sería
insuficiente):
> F/M
[1] 0.5594
> (M-F)/M
[1] 0.4406
Descargar