R 使用GLM的dose.p和两个因子计算LT50

R 使用GLM的dose.p和两个因子计算LT50,r,glm,R,Glm,我一直在对数据进行分析,其中存活或死亡表示在压力条件下经过一段时间后存活的动物数量 例如 使用glm和来自MASS的dose.p函数,我已经能够用其他数据集计算LT50,这些数据似乎与绘制的曲线匹配,但由于某种原因,我在这些特定数据上遇到了问题 Time=c(0.0, 2.0, 6.0, 9.0, 12.0, 0.0, 0.5, 1.0, 1.5, 2.0, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5) Alive=c(100, 0, 0, 0, 0, 100,

我一直在对数据进行分析,其中
存活
死亡
表示在压力条件下经过一段时间后存活的动物数量

例如

使用glm和来自
MASS
dose.p
函数,我已经能够用其他数据集计算LT50,这些数据似乎与绘制的曲线匹配,但由于某种原因,我在这些特定数据上遇到了问题

Time=c(0.0, 2.0, 6.0, 9.0, 12.0, 0.0, 0.5, 1.0, 1.5, 2.0, 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5)
Alive=c(100, 0, 0, 0, 0, 100, 10, 10, 10, 8, 100, 10, 10, 10, 9, 7, 2, 3)
Dead=c(0, 10, 12, 10, 10,  0,  0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 9, 5)
Trial=c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3)

model=glm(cbind(Alive, Dead)~Time+Trial, family=binomial(link="logit"))

Call:
    glm(formula = cbind(Alive, Dead) ~ Time + Trial, family = binomial(link = "logit"), 
    data = cinctipesA)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7008   0.0000   0.1171   0.3567   2.2157  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   3.0893     1.2559   2.460   0.0139 *  
Time         -4.0455     0.7159  -5.651 1.60e-08 ***
Trial         2.9112     0.7096   4.103 4.08e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 309.566  on 17  degrees of freedom
Residual deviance:  14.092  on 15  degrees of freedom
AIC: 31.203

Number of Fisher Scoring iterations: 9

dose.p(model, cf=1:2 p=0.5)

              Dose        SE
p = 0.5:   0.7636405 0.2927676
在仔细查看数据之前,这似乎没有问题:

coef(model)
logisticline = function(z) {eta = 3.089321 + (-4.045518+2.911239) * z; 1 / (1 + exp(-eta))}
x = seq(0,12, 0.01)
lines(x, logisticline(x), new = TRUE)
abline(0.5, 0)

从这个图中可以清楚地看出,50%的个体死亡的时间点不是在
时间=0.76时


为什么用这些特定数据计算LT50时会出现问题?

拟合(模型)
显示零值都在试验1中,因此如果您愿意消除这一点(例如,使用参数
子集=试验!=1
),然后你可以避免可能导致问题的完美分离。如果试验在模型中是一个重要的预测因素,那么移除它可以吗?这样做可以解决完美分离的问题,并提供与绘图匹配的LT50。但是,如果使用
subset=Trial!=1
arg,并将
Trial
作为一个因子(它应该一直都是),然后Trial不显著。这仍然不能给出与图一致的LT50。使用模型:
model=glm(cbind(活着,死去)~Time+Trial,family=binomial(link=“logit”),subset=Trial!=1)
dose.p值是:
2.006084
你忘记了因子(Trial)部分:
model=glm(cbind(活着,死去)~Time+factor(Trial),family=binomial(link=“logit”),subset=Trial!=1)
coef(model)
logisticline = function(z) {eta = 3.089321 + (-4.045518+2.911239) * z; 1 / (1 + exp(-eta))}
x = seq(0,12, 0.01)
lines(x, logisticline(x), new = TRUE)
abline(0.5, 0)