检验 ML 估计值之间的显着差异:似然比还是 Wald 检验?

机器算法验证 r 假设检验 最大似然
2022-03-11 00:01:40

我正在尝试使用来自杂交的基因型数据来测试两个环境中两个遗传参数(选择和优势)的最大似然估计之间是否存在显着差异。有三个基因型类别,C11、C12 和 C22,我希望最大化以下可能性:

llhood2 <- function(theta, c, c11,c12,c22){

s<-theta[1]
d<-theta[2]

P11 = (1 - ((s * (1 - c) * (1 - c + (2 * d * c)))) / (4 - (s * (1 + (2 * d))))
P22 = (1 - (s * c * ((2 * d * (1 - c)) + c))) / (4 - (s * (1 + (2 * d))))
P12 = (1 - P11 - P22)
logL = c11*log(P11) + c12*log(P12) + c22*log(P22)
-logL   
}

C 是固定的,具体取决于您使用的遗传标记,c11、c12 和 c22 是数据,分别代表基因型 AA、AB 和 BB。所以我共同估计s和d。

使用 R 中的 optim 函数并插入来自每个环境的基因型数据,我能够在一个环境(s1 和 d1)​​中获得 s 和 d 的点估计值以及这些估计值的方差,然后我得到参数估计值使用来自第二个环境的基因型数据(s2 和 d2,以及它们相关的方差)。因此,模型的两个单独配件给了我 s1 var_s_1 和 s2 var_s_2 等。优化的代码如下:

fit1 <- optim(inits, llhood, method="L-BFGS-B", hessian=T, lower=lower, upper=upper,
c=c,c11=c11,c12=c12,c22=c22, control=list(trace=1))

fit2 <- optim(inits, llhood, method="L-BFGS-B", hessian=T, lower=lower, upper=upper,
c=c,c11=n11,c12=n12,c22=n22, control=list(trace=1)

然后我想知道 s1 是否与 s2 显着不同(对于 d1 和 d2 也是如此)。我认为这将是一个直截了当的测试,但我很难找到有关如何正确或最优雅地执行此操作的文档。作为粗略的近似,我使用了一个简单的两样本 T 检验,但我很确定它不太正确......

我还考虑了似然比测试,我测试 s1 和 s2 的两个估计值之间的差异是否与零不同(简化模型)与与零不同。但鉴于我的似然方程,我不确定如何设置它。

任何具体的帮助将不胜感激。

更新:这是一些用于限制和非限制可能性的尝试代码,将用于执行似然比测试。首先是 s 和 ss 相等的受限(空)(c11-c22 是 env.1 的数据,n11-n12 是环境 2 的数据)

llhoodnull <- function(theta,c,c11,c12,c22,n11,n12,n22){

s<-theta[1] 
d<-theta[2]
ss=s
dd=d


P11 = (1 - (s * (1 - c) * (1 - c + (2 * d * c)))) / (4 - (s * (1 + (2 * d))))
P22 = (1 - (s * c * ((2 * d * (1 - c)) + c))) / (4 - (s * (1 + (2 * d))))
P12 = (1 - P11 - P22)
b11 = (1 - (ss * (1 - c) * (1 - c + (2 * dd * c)))) / (4 - (ss * (1 + (2 * dd))))
b22 = (1 - (ss * c * ((2 * dd * (1 - c)) + c))) / (4 - (ss * (1 + (2 * dd))))
b12 = (1 - b11 - b22)

logL = c11*log(P11) + c12*log(P12) + c22*log(P22)+n11*log(b11) + n12*log(b12) + 
    n22*log(b22)
-logL

}

我认为我可能还需要修复 d,以便我只测试 s 的可能性。

和不受限制的:

llhoodb <- function(theta,c,c11,c12,c22,n11,n12,n22){

s<-theta[1] 
d<-theta[2]
ss<-theta[3]
dd<-theta[4]


P11 = (1 - (s * (1 - c) * (1 - c + (2 * d * c)))) / (4 - (s * (1 + (2 * d))))
P22 = (1 - (s * c * ((2 * d * (1 - c)) + c))) / (4 - (s * (1 + (2 * d))))
P12 = (1 - P11 - P22)
b11 = (1 - (ss * (1 - c) * (1 - c + (2 * dd * c)))) / (4 - (ss * (1 + (2 * dd))))
b22 = (1 - (ss * c * ((2 * dd * (1 - c)) + c))) / (4 - (ss * (1 + (2 * dd))))
b12 = (1 - b11 - b22)

logL = c11*log(P11) + c12*log(P12) + c22*log(P22)+n11*log(b11) + n12*log(b12) + 
    n22*log(b22)
-logL

}

当我尝试使用 optim() 最大化它时,这给了我错误...

对这些有什么想法吗?

0个回答
没有发现任何回复~