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)