Ajuste de un modelo lineal generalizado heteroscedastic para respuestas binomiales

9

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 Iindividuos, de Ttratamientos, donde en cada combinación de factores hay Rré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, Rcó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: ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

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)): ingrese la descripción de la imagen aquí

Al trazar la varianza muestral de las probabilidades de éxito estimadas transformadas frente a la media N, se muestra la relación negativa esperada: ingrese la descripción de la imagen aquí

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: ingrese la descripción de la imagen aquí

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: ingrese la descripción de la imagen aquí

¿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 dglmpaquete 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.

usuario1701545
fuente
1
Esto es un poco opaco. ¿Puedes decir más específicamente cuál es tu situación, quizás en términos concretos?
gung - Restablece a Monica
1
Edité mi publicación. Pero en general, estoy buscando un glm que, además de E (y) = Xβ, modele la varianza (y) = Zλ, donde las columnas de X son los regresores de la media de la respuesta y las columnas de Z son los regresores para la varianza de la respuesta, y β y λ son los parámetros que estiman sus efectos sobre la media y la varianza, respectivamente.
user1701545
2
Reúno eso, pero es difícil pensar en esto en términos tan nebulosos. Usted no discute variables X o Z, por ejemplo. ¿De qué trata tu estudio? ¿Cuáles son tus datos? Etc.
gung - Restablece a Monica
No hay problema, vea la publicación actualizada.
user1701545

Respuestas:

1

Quizás lo que está buscando es algo llamado modelos lineales doblemente generalizados en los que se modelan tanto el parámetro de media como el de dispersión. Incluso hay un paquete R dglm diseñado para adaptarse a dichos modelos.

usuario3897081
fuente