我从以下实验设计中获得了数据:我的观察结果是对K
相应治疗次数()中成功次数()的计数,对N
两组分别由I
个体组成的两组进行了测量,这些结果来自T
治疗,其中每个这样的因子组合中都有R
重复项。因此,共我有2 * I * T * R ķ的和对应Ñ的。
数据来自生物学。每个人都是一个基因,我通过它测量两种替代形式的表达水平(由于一种称为替代剪接的现象)。因此,K是其中一种形式的表达水平,而N是这两种形式的表达水平的总和。在一个单一的表达拷贝的两种形式之间的选择被假定为一个伯努利试验,因此ķ出Ñ副本遵循二项式。每个组由约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),则其越低成功概率的方差),因此我主要对小组和治疗的贡献感兴趣,而不仅仅是试验次数和潜在成功概率的贡献。我猜想将arcsin平方根变换应用于响应将消除后者,但不能消除试验次数。
尽管在上面的模拟示例数据中,设计是平衡的(两组中每个组中的个体数量相等,并且每种处理中每个组中每个组中的个体重复次数相同),但在我的真实数据中却并非如此-两组确实做到了个体数量不相同,重复次数也有所不同。另外,我想应该将个人设置为随机效果。
绘制每个方差的样本方差与估计成功概率的样本均值(表示为p hat = K / N),表明极端成功概率具有较低的方差:
当使用arcsin平方根方差稳定化变换(表示为arcsin(sqrt(p hat)))对估计的成功概率进行变换时,将消除这种情况:
绘制转换后的估计成功概率与均值N的样本方差表示预期的负相关:
绘制两组转换后的估计成功概率的样本方差表明,组b的方差略高,这就是我模拟数据的方式:
最后,绘制三种处理的转换后估计成功概率的样本方差,表明处理之间没有差异,这就是我模拟数据的方式:
是否可以使用任何形式的广义线性模型来量化组和治疗对成功概率方差的影响?
也许是异方差广义线性模型或对数线性方差模型的某种形式?
除E(y)=Xβ之外,还对方差(y)=Zλ进行建模的模型中的某些行,其中Z和X分别是均值和方差的回归变量,在我的情况下,它们将相同并且包括处理(级别t.1,t.2和t.3)和组(级别a和b),可能还有N和R,因此λ和β将估计它们各自的作用。
或者,我可以使用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的分组效果非常弱。我想知道该模型是否设置正确或该模型具有的功能。