2

我正在尝试从引导的 GLM 输出列表中计算 LC50

我将引导 GLM 的输出放在一个列表(命名结果)中,如下所示:(为了方便起见,我刚刚放入了最后一个结果,而不是整个列表)

$thetastar[[100]]    
Call:  glm(formula = dead[x] ~ concentration[x] + factor(female.no[x]), 
family = binomial, data = subset.data.48hr)

Coefficients:
      (Intercept)       concentration[x]  factor(female.no[x])3  factor(female.no[x])4             factor(female.no[x])7  
           0.7386                 0.1869                -0.8394                -5.6613                   -2.9576  
factor(female.no[x])8  factor(female.no[x])9  
          -1.5329                -2.7826  

Degrees of Freedom: 354 Total (i.e. Null);  348 Residual
(1265 observations deleted due to missingness)
Null Deviance:      484.2 
Residual Deviance: 257  AIC: 271

dose.p从包中使用MASS我正在尝试为已运行的模型中的每个人计算 LC50

dose.p(results$thetastar[[100]], cf = c(2,3), p = 0.5)

返回

              Dose       SE
p = 0.5: 0.2227249 0.161769

据我了解,这是我放入factor(female.no[x])3.的LC50,我认为它是第2 列和第 3 列,以及dose.pcf = c(2,3)concentrationfactor(female.no[x])3.

这个对吗?

其次:

有没有一种方法可以为每个女性获得 LC50,即factor(female.no[x])3, factor(female.no[x])4等等 factor(female.no[x])7,我不知道如何dose.p在不手动更改代码的情况下根据不同的变量进行工作cf=

dose.p(results$thetastar[[100]], cf = c(2,3), p = 0.5)
dose.p(results$thetastar[[100]], cf = c(2,4), p = 0.5)
dose.p(results$thetastar[[100]], cf = c(2,4), p = 0.5)

最后:我的结果存储在一个列表中,我如何才能dose.p沿着列表工作,它会是这样的:

test=matrix
for(i in 1:results){
test[i,]= dose.p(results$thetastar[[i]], cf = c(2,3), p = 0.5)

谢谢你的帮助

4

1 回答 1

2

cf参数采用dose.p截距和对数剂量的列。(如果你用浓度,不是LC50吗?)

对于默认动物(不是 3、4、8 或 9),您可以使用(Intercept)concentration[x]cf = 1:2

对于其他动物,您需要截距加上一个因素。例如,对于动物 3,您需要第 1 列加上第 3 列(以及用于浓度的第 2 列)。不幸的是,dose.p不会接受这样的规范,因此您必须在没有拦截的情况下重新运行模型。

将 a 添加0到公式中以实现此目的:

glm(
  dead[x] ~ 0 + concentration[x] + factor(female.no[x]), 
  family = binomial, 
  data = subset.data.48hr
)

现在每个都factor(female.no[x])将包含该动物的“拦截”。

于 2014-01-21T16:00:01.367 回答