2014-01-21 35 views
2

我試圖從自舉GLM輸出列表計算LC50LC50計算

我有自舉GLM的列表中(稱爲結果)這樣的輸出: (我只是把使用dose.pMASS包我試圖計算LC50爲已經運行模型中的每個單獨的輕鬆,而不是整個列表)

$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(results$thetastar[[100]], cf = c(2,3), p = 0.5) 

返回

   Dose  SE 
p = 0.5: 0.2227249 0.161769 

據我瞭解,這是LC50的factor(female.no[x])3.即到dose.p我已經把cf = c(2,3)這我認爲是列2和列3,concentrationfactor(female.no[x])3.

是這正確嗎?

其次:

有沒有一種方法可以讓我得到LC50爲每個女性,即factor(female.no[x])3factor(female.no[x])4factor(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) 

感謝所有幫助

回答

2

cf參數dose.p採取攔截和日誌劑量的列。 (如果使用的濃度,是不是一個LC50?)

對於默認動物(即不爲3,4,8或9),可以使用(Intercept)concentration[x]列,cf = 1:2

對於其他動物,您希望攔截加上一個因子。例如,對於動物3,你需要第1列加上第3列(以及第2列的濃度)。不幸的是,dose.p不會接受這樣的規範,所以你將不得不重新運行你的模型沒有攔截。

添加0式來實現這一點:

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

現在每個factor(female.no[x])將包含該動物的「截距」。

+0

好的,所以輸出會給我每個人的每個截距,然後我需要得到每個組合的LC50。即dose.p(結果$ thetastar [[100]],cf = c(2,3),p = 0.5) dose.p(結果$ thetastar [[100]],cf = c(2,4) p = 0.5) –

+0

@Salmosalar是的,沒錯。 –