Ajustando um modelo linear generalizado heterocedástico para respostas binomiais


9

Tenho dados do seguinte desenho experimental: minhas observações são contagens do número de sucessos ( K) do número correspondente de tentativas ( N), medidos para dois grupos, cada um composto por Iindivíduos, a partir de Ttratamentos, nos quais em cada combinação de fatores existem Rrepetições . Portanto, no total, tenho 2 * I * T * RK 's e N ' s correspondentes .

Os dados são da biologia. Cada indivíduo é um gene para o qual mensuro o nível de expressão de duas formas alternativas (devido a um fenômeno chamado emenda alternativa). Portanto, K é o nível de expressão de uma das formas e N é a soma dos níveis de expressão das duas formas. A escolha entre as duas formas em uma única cópia expressa é assumida como sendo um experimento de Bernoulli, portanto, K fora de Ncópias segue um binômio. Cada grupo é composto por ~ 20 genes diferentes e os genes em cada grupo têm alguma função comum, que é diferente entre os dois grupos. Para cada gene em cada grupo, tenho cerca de 30 dessas medições de cada um dos três tecidos diferentes (tratamentos). Quero estimar o efeito que o grupo e o tratamento têm na variação de K / N.

Sabe-se que a expressão gênica está super-dispersa, daí o uso de binômio negativo no código abaixo.

Por exemplo, Rcódigo de dados 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
}

Estou interessado em estimar os efeitos que o grupo e o tratamento têm na dispersão (ou variação) das probabilidades de sucesso (ou seja, K/N). Portanto, estou procurando um glm apropriado em que a resposta seja K / N, mas além de modelar o valor esperado da resposta, a variação da resposta também é modelada.

Claramente, a variação de uma probabilidade binomial de sucesso é afetada pelo número de tentativas e pela probabilidade subjacente de sucesso (quanto maior o número de tentativas e mais extrema é a probabilidade subjacente de sucesso (ou seja, próximo de 0 ou 1), menor a variação da probabilidade de sucesso), por isso estou interessado principalmente na contribuição do grupo e do tratamento além do número de tentativas e da probabilidade de sucesso subjacente. Eu acho que aplicar a transformação de raiz quadrada arcsin na resposta eliminará a última, mas não a do número de tentativas.

Embora no exemplo de dados simulados acima o design seja equilibrado (número igual de indivíduos em cada um dos dois grupos e número idêntico de réplicas em cada indivíduo de cada grupo em cada tratamento), nos meus dados reais não é - os dois grupos fazem não tem um número igual de indivíduos e o número de repetições varia. Além disso, eu imagino que o indivíduo deva ser definido como um efeito aleatório.

A plotagem da variação da amostra versus a média da amostra da probabilidade estimada de sucesso (denotada como p hat = K / N) de cada indivíduo ilustra que probabilidades extremas de sucesso têm menor variação: insira a descrição da imagem aqui insira a descrição da imagem aqui

Isso é eliminado quando as probabilidades de sucesso estimadas são transformadas usando a transformação estabilizadora da variância da raiz quadrada do arcsin (denotada como arcsin (sqrt (p hat)): insira a descrição da imagem aqui

A plotagem da variação amostral das probabilidades estimadas de sucesso transformadas versus a média N mostra a relação negativa esperada: insira a descrição da imagem aqui

A plotagem da variação amostral das probabilidades de sucesso estimadas transformadas para os dois grupos mostra que o grupo b tem variações ligeiramente maiores, e foi assim que simulei os dados: insira a descrição da imagem aqui

Por fim, o gráfico da variação amostral das probabilidades de sucesso estimadas transformadas para os três tratamentos não mostra diferença entre os tratamentos, e foi assim que simulei os dados: insira a descrição da imagem aqui

Existe alguma forma de um modelo linear generalizado com o qual eu possa quantificar os efeitos do grupo e do tratamento na variação das probabilidades de sucesso?

Talvez um modelo linear generalizado heterocedástico ou alguma forma de modelo de variância loglinear?

Algo nas linhas de um modelo que modela a Variância (y) = Zλ além de E (y) = Xβ, onde Z e X são os regressores da média e variância, respectivamente, que no meu caso serão idênticas e incluirão tratamento (níveis t.1, t.2 e t.3) e grupo (níveis aeb), e provavelmente N e R, e portanto λ e β estimarão seus respectivos efeitos.

Como alternativa, eu poderia ajustar um modelo às variações da amostra nas réplicas de cada gene de cada grupo em cada tratamento, usando um glm que apenas modela o valor esperado da resposta. A única questão aqui é como explicar o fato de que genes diferentes têm números diferentes de repetições. Eu acho que os pesos em um glm podem ser responsáveis ​​por isso (as variações de amostra baseadas em mais repetições devem ter um peso maior), mas exatamente quais pesos devem ser definidos?

Nota: Tentei usar o dglmpacote 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 

O efeito de grupo de acordo com o dglm.fit é bastante fraco. Gostaria de saber se o modelo está correto ou se é o poder que esse modelo possui.


11
Isso é um pouco opaco. Você pode dizer mais especificamente qual é a sua situação, talvez em termos concretos?
gung - Restabelece Monica

11
Eu editei minha postagem. Mas, em geral, estou procurando por um glm que, além de E (y) = Xβ, modelos Variância (y) = Zλ, onde as colunas de X são os regressores da média da resposta e as colunas de Z são os regressores para a variância da resposta e β e λ são os parâmetros que estimam seus efeitos na média e na variância, respectivamente.
precisa saber é o seguinte

2
Eu entendo isso, mas é difícil pensar nisso em termos tão nebulosos. Você não discute variáveis ​​X ou Z, por exemplo. Sobre o que é seu estudo? Quais são os seus dados? Etc.
gung - Reinstate Monica

Não tem problema - consulte a publicação atualizada.
user1701545

Respostas:


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.