如何为我的加权对数 - 对数线性回归绘制置信区间?

时间:2017-01-21 02:23:44

标签: r plot regression linear-regression lm

我需要使用加权对数 - 对数线性模型的指数形式绘制指数种 - 面关系,其中每个位置/ Bank(sb$NoSpec.mean)的平均物种数由物种数的方差加权年(sb$NoSpec.var)。

我能够绘制拟合,但是有问题可以找出如何在这个拟合周围绘制置信区间。以下是迄今为止我提出的最好的。对我有什么建议吗?

# Data
df <- read.csv("YearlySpeciesCount_SizeGroups.csv")
require(doBy)
sb <- summaryBy(NoSpec ~ Short + Area + Regime + SizeGrp, df, 
                FUN=c(mean,var, length))

# Plot to fill
plot(S ~ A, xlab = "Bank Area (km2)", type = "n", ylab = "Species count",
     ylim = c(min(S), max(S)))
text(A, S, label = Pisc$Short, col = 'black')

# The Arrhenius model
require(vegan)
gg <- data.frame(S=S, A=A, W=W)
mloglog <- lm(log(S) ~ log(A), weights = 1 / (log10(W + 1)), data = gg)

# Add exponential fit to plot (this works well)
lines(xtmp, exp(predict(mloglog, newdata = data.frame(A = xtmp))),
      lty=1, lwd=2)

现在我想添加置信乐队......这就是我发现问题的地方......

## predict using original model.. get standard errors
pp<-data.frame(A = xtmp)
p <- predict(mloglog, newdata = pp, se.fit = TRUE)
pp$fit <- p$fit
pp$se <- p$se.fit

## Calculate lower and upper bounds for each estimate using standard error * 1.96
pp$upr95 <- pp$fit + (1.96 * pp$se)
pp$lwr95 <- pp$fit - (1.96 * pp$se)

但我不确定以下内容是否正确。在搜索google / stack overflow / cross validated时,我无法找到任何不涉及ggplot的答案。

## Create new linear models to create a fitted line given upper and lower bounds?
upr <- lm(log(upr95) ~ log(A), data=pp)
lwr <- lm(log(lwr95) ~ log(A), data=pp)
lines(xtmp, exp(predict(upr, newdata=pp)), lty=2, lwd=1)
lines(xtmp, exp(predict(lwr, newdata=pp)), lty=2, lwd=1)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

这个问题可以不提供数据,因为:

  • 据说OP的代码工作正常,因此没有“不工作”;
  • 这个问题与统计程序有关:什么是正确的做法。

我会做一个简短的回答,因为我看到你在上一次更新中添加了“已解决”以质疑标题。请注意,建议不要在问题标题中添加此类关键字。如果解决了问题,请使用答案。

严格来说,使用1.96是不正确的。您可以阅读How does predict.lm() compute confidence interval and prediction interval?了解详情。我们需要残余自由度和0.025分布的t分布。

我想说的是,predict.lm可以为您返回置信区间:

pp <- data.frame(A = xtmp)
p <- predict(mloglog, newdata = pp, interval = "confidence")

p将是一个三列矩阵,“fit”,“lwr”和“upr”。

由于您安装了对数 - 对数模型,因此需要对拟合值和置信区间进行反向变换。只需在此矩阵exp上点击p

p <- exp(p)

现在您可以轻松使用matplot生成很好的回归图:

matplot(xtmp, p, type = "l", col = c(1, 2, 2), lty = c(1, 2, 2))