2017-09-22 69 views
1

我的问题是统计和R相关的混合。我试图从Bebber等人实现一个模型。 (使用发现曲线预测未知物种的数量)来估计我的数据集中未发现物种的总数(通过查找物种的预期总数)以及围绕预测物种总数的置信区间。 (St)= k(Ntot-Nt-1)给出了物种总数的估计值,它是通过拟合St对Nt-1(具有quasipoisson误差)的glm计算得到的,其中St是每年的物种数量,Nt-1是前一年的累计物种数量,k是发现率。从glm输出中,我使用截距和斜率来计算估计的Ntot:Ntot = -intercept/slope 我认为我正在理解如何做到这一点。下面是一个示例DF和代码我迄今使用:使用Bebber等2007找到估计的总物种和该数字上的置信区间

St <- c(3, 1, 6, 6, 2, 4, 2, 2, 3, 2, 4) 
Nprev <- c(43, 46, 47, 53, 59, 61, 65, 67, 69, 72, 74) 
samp_data <- data.frame(St, Nprev) 
mymodel <- glm(samp_data$St ~ samp_data$Nprev, family = quasipoisson()) 
summary(mymodel) 
Ntot <- -1.75918/-0.01019 

这里是我开始无法理解的事。 Bebber等人给出了对我没有完全理解的Ntot置信限度的说明。他们说先定义一个新的变量R = Ntot + M - Nt-1。接下来是为了适应St对抗R的情况,用泊松误差和身份链接进行无拦截。

我很困惑的第一件事是M从哪里来......这是第一次glm的色散参数吗? 然后他们继续说:“这迫使通过Ntot + M回归。当M为零时,该模型将给出与最佳拟合相同的剩余偏差,并且随着M偏离零,更大的剩余偏差。通过分散有一个F分布,允许计算置信限。“

我不明白如何从这个glm获得Ntot的置信限度。我是广义线性模型的新手,所以也许这是我的问题。我希望这里的某个人能为我提供一些启示。 可以在这里找到纸张的复印件(相关章节在第1652页“模型”下):Bebber paper link

很多很多人都非常感谢您提供的任何见解!

+0

我不能帮你重现如在特定的论文中描述的完全相同的方式,但你可能想看看confint功能从统计或MASS包。自引导也是计算置信限的一种方法,它不会假定参数的渐近正态性。 – AaronP

+0

谢谢AaronP,但是这给了我系数和截距的信心限制,我认为这对我来说并不是帮助(虽然我相信会再次派上用场)。 :-(我感谢你花时间考虑我的问题的答案 - 我拉我的头发在这一个... – lizmari

+0

我一开始并没有得到你想要的信心区间是不是直接参数的模型,但引导的思想仍然在房间里,通过启动包中boot boot和boot.ci的组合,你应该能够获得Ntot置信区间的引导版本。为你工作吗? – AaronP

回答

0

这里是NTOT的自举置信区间将R解决方案:

# exampel from question 
St <- c(3, 1, 6, 6, 2, 4, 2, 2, 3, 2, 4) 
Nprev <- c(43, 46, 47, 53, 59, 61, 65, 67, 69, 72, 74) 
samp_data <- data.frame(St, Nprev) 
mymodel <- glm(samp_data$St ~ samp_data$Nprev, family = quasipoisson()) 
summary(mymodel) 
mymodel %>% str() 
mymodel$coefficients 
Ntot <- -1.75918/-0.01019 

# bootstrap version 
library(boot) 
# put the process into a function, to be used in boot() 
calcNtot <- function(data, inds, lhs, rhs){ 
    f <- as.formula(paste(lhs, " ~ ", rhs)) 
    # lhs/rhs means left/right hand side of the formula 
    model <- glm(f, family = quasipoisson(), data = data, subset = inds) 
    Ntot <- -model$coefficients[1]/model$coefficients[2] 
    unname(Ntot) 
} 

calcNtot(samp_data, 1:nrow(samp_data), "St", "Nprev") 
# it gives the same Ntot as the example 

Ntot_boot <- boot(data = samp_data, calcNtot, 999, lhs = "St", rhs = "Nprev") 
boot.ci(Ntot_boot, type = "basic") 
+0

谢谢AaronP,这确实给了我一个置信区间,如果我无法弄清楚纸质版本,我将会使用它。这是一个非常宽泛的置信区间,所以我仍然很想弄清楚它是否与纸质版本相同。我很感激你花时间拿出答案的代码 - 这非常有帮助!非常感谢!我试图把它投票,但我没有足够的声望去做。我不会把它当作现在被接受的答案,希望有人回答原来的问题,我希望这样可以。 – lizmari

+0

没问题。它可以,如果你不标记我的答案被接受,因为我没有回答这个问题(直接)。如果你95%确定(统计学家的幽默,有趣的权利?),你可能会接受答案,你没有其他答案。 – AaronP

+0

哈哈,是的:-)再次感谢! – lizmari

相关问题