Tengo datos del siguiente diseño experimental: mis observaciones son recuentos del número de éxitos ( K
) del número correspondiente de ensayos ( N
), medidos para dos grupos, cada uno compuesto de I
individuos, de T
tratamientos, donde en cada combinación de factores hay R
réplicas . Por lo tanto, en total tengo 2 * I * T * R K 's y N correspondientes .
Los datos son de biología. Cada individuo es un gen para el cual mido el nivel de expresión de dos formas alternativas (debido a un fenómeno llamado splicing alternativo). Por lo tanto, K es el nivel de expresión de una de las formas y N es la suma de los niveles de expresión de las dos formas. Se supone que la elección entre las dos formas en una sola copia expresada es un experimento de Bernoulli, por lo tanto, K de NLas copias siguen un binomio. Cada grupo está compuesto por ~ 20 genes diferentes y los genes de cada grupo tienen alguna función común, que es diferente entre los dos grupos. Para cada gen en cada grupo tengo ~ 30 mediciones de cada uno de los tres tejidos diferentes (tratamientos). Quiero estimar el efecto que el grupo y el tratamiento tienen sobre la varianza de K / N.
Se sabe que la expresión génica está sobredispersada, por lo tanto, el uso de binomio negativo en el siguiente código.
Por ejemplo, R
código de datos simulados:
library(MASS)
set.seed(1)
I = 20 # individuals in each group
G = 2 # groups
T = 3 # treatments
R = 30 # replicates of each individual, in each group, in each treatment
groups = letters[1:G]
ids = c(sapply(groups, function(g){ paste(rep(g, I), 1:I, sep=".") }))
treatments = paste(rep("t", T), 1:T, sep=".")
# create random mean number of trials for each individual and
# dispersion values to simulate trials from a negative binomial:
mean.trials = rlnorm(length(ids), meanlog=10, sdlog=1)
thetas = 10^6/mean.trials
# create the underlying success probability for each individual:
p.vec = runif(length(ids), min=0, max=1)
# create a dispersion factor for each success probability, where the
# individuals of group 2 have higher dispersion thus creating a group effect:
dispersion.vec = c(runif(length(ids)/2, min=0, max=0.1),
runif(length(ids)/2, min=0, max=0.2))
# create empty an data.frame:
data.df = data.frame(id=rep(sapply(ids, function(i){ rep(i, R) }), T),
group=rep(sapply(groups, function(g){ rep(g, I*R) }), T),
treatment=c(sapply(treatments,
function(t){ rep(t, length(ids)*R) })),
N=rep(NA, length(ids)*T*R),
K=rep(NA, length(ids)*T*R) )
# fill N's and K's - trials and successes
for(i in 1:length(ids)){
N = rnegbin(T*R, mu=mean.trials[i], theta=thetas[i])
probs = runif(T*R, min=max((1-dispersion.vec[i])*p.vec[i],0),
max=min((1+dispersion.vec)*p.vec[i],1))
K = rbinom(T*R, N, probs)
data.df$N[which(as.character(data.df$id) == ids[i])] = N
data.df$K[which(as.character(data.df$id) == ids[i])] = K
}
Estoy interesado en estimar los efectos que el grupo y el tratamiento tienen sobre la dispersión (o varianza) de las probabilidades de éxito (es decir, K/N
). Por lo tanto, estoy buscando un glm apropiado en el que la respuesta sea K / N, pero además de modelar el valor esperado de la respuesta, también se modela la varianza de la respuesta.
Claramente, la varianza de una probabilidad de éxito binomial se ve afectada por el número de intentos y la probabilidad de éxito subyacente (cuanto mayor es el número de ensayos y más extrema es la probabilidad de éxito subyacente (es decir, cerca de 0 o 1), menor es la varianza de la probabilidad de éxito), por lo que me interesa principalmente la contribución del grupo y el tratamiento más allá de la cantidad de ensayos y la probabilidad de éxito subyacente. Supongo que aplicar la transformación de raíz cuadrada de arcsin a la respuesta eliminará la última pero no la del número de intentos.
Aunque en el ejemplo de datos simulados anterior el diseño es equilibrado (igual número de individuos en cada uno de los dos grupos e idéntico número de réplicas en cada individuo de cada grupo en cada tratamiento), en mis datos reales no lo es, los dos grupos sí No tiene el mismo número de individuos y el número de réplicas varía. Además, me imagino que el individuo debe establecerse como un efecto aleatorio.
Trazar la varianza muestral versus la media muestral de la probabilidad de éxito estimada (denotada como p hat = K / N) de cada individuo ilustra que las probabilidades de éxito extremo tienen una varianza menor:
Esto se elimina cuando las probabilidades de éxito estimadas se transforman utilizando la transformación estabilizadora de la varianza de la raíz cuadrada de arcsin (denotada como arcsin (sqrt (p hat)):
Al trazar la varianza muestral de las probabilidades de éxito estimadas transformadas frente a la media N, se muestra la relación negativa esperada:
Al trazar la varianza muestral de las probabilidades de éxito estimadas transformadas para los dos grupos, se muestra que el grupo b tiene variaciones ligeramente más altas, y así es como simulé los datos:
Finalmente, trazar la varianza muestral de las probabilidades de éxito estimadas transformadas para los tres tratamientos no muestra diferencias entre los tratamientos, que es cómo simulé los datos:
¿Existe alguna forma de modelo lineal generalizado con el que pueda cuantificar el grupo y los efectos del tratamiento sobre la varianza de las probabilidades de éxito?
¿Quizás un modelo lineal generalizado heteroscedastic o alguna forma de modelo de varianza loglineal?
Algo en las líneas de un modelo que modela la varianza (y) = Zλ además de E (y) = Xβ, donde Z y X son los regresores de la media y la varianza, respectivamente, que en mi caso serán idénticos e incluirán tratamiento (niveles t.1, t.2 y t.3) y grupo (niveles ayb), y probablemente N y R, y por lo tanto λ y β estimarán sus respectivos efectos.
Alternativamente, podría ajustar un modelo a las variaciones de la muestra en las réplicas de cada gen de cada grupo en cada tratamiento, utilizando un glm que solo modela el valor esperado de la respuesta. La única pregunta aquí es cómo explicar el hecho de que diferentes genes tienen diferentes números de réplicas. Creo que los pesos en un glm podrían explicar eso (las variaciones de muestra que se basan en más réplicas deberían tener un mayor peso) pero, ¿qué pesos deberían establecerse exactamente?
Nota: He intentado usar el dglm
paquete R:
library(dglm)
dglm.fit = dglm(formula = K/N ~ 1, dformula = ~ group + treatment, family = quasibinomial, weights = N, data = data.df)
summary(dglm.fit)
Call: dglm(formula = K/N ~ 1, dformula = ~group + treatment, family = quasibinomial,
data = data.df, weights = N)
Mean Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.09735366 0.01648905 -5.904138 3.873478e-09
(Dispersion Parameters for quasibinomial family estimated as below )
Scaled Null Deviance: 3600 on 3599 degrees of freedom
Scaled Residual Deviance: 3600 on 3599 degrees of freedom
Dispersion Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 9.140517930 0.04409586 207.28746254 0.0000000
group -0.071009599 0.04714045 -1.50634107 0.1319796
treatment -0.001469108 0.02886751 -0.05089138 0.9594121
(Dispersion parameter for Gamma family taken to be 2 )
Scaled Null Deviance: 3561.3 on 3599 degrees of freedom
Scaled Residual Deviance: 3559.028 on 3597 degrees of freedom
Minus Twice the Log-Likelihood: 29.44568
Number of Alternating Iterations: 5
El efecto de grupo según dglm.fit es bastante débil. Me pregunto si el modelo está configurado correctamente o si tiene el poder que tiene.