我有来自以下实验设计的数据:我的观察结果是对应试验K
次数( . 因此,我总共有 2 * I * T * R K和相应的N。N
I
T
R
数据来自生物学。每个个体都是一个基因,我测量其两种替代形式的表达水平(由于一种称为可变剪接的现象)。因此,K是一种形式的表达水平,N是两种形式的表达水平之和。假设在单个表达副本中的两种形式之间的选择是伯努利实验,因此N中的K副本遵循二项式。每组由约 20 个不同的基因组成,每组中的基因具有一些共同的功能,这在两组之间是不同的。对于每组中的每个基因,我对三种不同组织(治疗)中的每一种进行了约 30 次这样的测量。我想估计组和治疗对 K/N 方差的影响。
已知基因表达过度分散,因此在下面的代码中使用负二项式。
例如,R
模拟数据的代码:
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
}
我有兴趣估计组和治疗对成功概率(即 )的分散(或方差)的影响K/N
。因此,我正在寻找一个适当的 glm,其中响应为 K/N,但除了对响应的预期值进行建模之外,还对响应的方差进行了建模。
显然,二项式成功概率的方差受试验次数和潜在成功概率的影响(试验次数越多,潜在成功概率越极端(即接近 0 或 1),则成功概率的方差),所以我主要对组和治疗的贡献感兴趣,而不是试验次数和潜在成功概率。我想将反正弦平方根变换应用于响应将消除后者,但不会消除试验次数。
尽管在上面的模拟示例数据中,设计是平衡的(两组中每组中的个体数量相同,并且每次处理中每组中每个个体的重复数量相同),但在我的真实数据中并非如此 - 两组个体数量不相等,重复次数也不同。另外,我想个人应该被设置为随机效应。
绘制每个个体的样本方差与估计成功概率(表示为 p hat = K/N)的样本均值,说明极端成功概率具有较低的方差:
当使用 arcsin 平方根方差稳定变换(表示为 arcsin(sqrt(p hat))对估计的成功概率进行变换时,这将被消除:
绘制转换后估计成功概率的样本方差与均值 N 的关系图显示了预期的负关系:
绘制两组转换后估计成功概率的样本方差表明 b 组的方差略高,这就是我模拟数据的方式:
最后,绘制三种处理的转换后估计成功概率的样本方差显示处理之间没有差异,这就是我模拟数据的方式:
是否有任何形式的广义线性模型可以用来量化组和治疗对成功概率方差的影响?
也许是异方差广义线性模型或某种形式的对数线性方差模型?
除了 E(y) = Xβ 之外,还模拟 Variance(y) = Zλ 的模型行中的某些东西,其中 Z 和 X 分别是均值和方差的回归量,在我的情况下它们将是相同的并包括处理(水平 t.1、t.2 和 t.3)和组(水平 a 和 b),可能还有 N 和 R,因此 λ 和 β 将估计它们各自的影响。
或者,我可以使用仅对响应的预期值建模的 glm 将模型拟合到每个处理中每个组中每个基因的重复样本的样本方差。这里唯一的问题是如何解释不同基因具有不同数量的重复这一事实。我认为 glm 中的权重可以解释这一点(基于更多复制的样本方差应该具有更高的权重)但究竟应该设置哪些权重?
注意:我尝试过使用dglm
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
根据 dglm.fit 的组效应非常弱。我想知道该模型是否设置正确或者该模型具有的功能。