我试图以95%的置信度绘制我的gls预测值,我正在努力学习语法。
我之前使用gam模型使用以下代码完成了此操作:
m1 <- gam(Chl ~ s(IR, fx= F, k= -1, bs = "cr"))
m1pred <- predict(m1, se=T, type = "response")
plot(IR, Chl, type ="p")
I1 <- order(IR)
lines(IR[I1], m1pred$fit[I1], lty=1, col="red", lwd = 3 )
lines(IR[I1], m1pred$fit[I1]+2*m1pred$se[I1], lty=2, col = "red", lwd =2)
lines(IR[I1], m1pred$fit[I1]-2*m1pred$se[I1], lty=2, col = "red", lwd = 2)
但这对gls模型不起作用,因为它说:
pred2 $ fit错误:$运算符对原子向量无效
我已经用另一种方法来解决这个问题,我可以根据一些Zurr等人(2009)代码绘制预测模型和数据:
plot(IR, Chl,
ylim = c(0, 2.5), pch= 21,
ylab = "Chl concentration µg/L", xlab = "Incident irradiance (W/m-2)")
MyX <- data.frame(IR = seq(from = min(IR),
to = max(IR), length = 1076), ID = "IR")
pred2 <- predict(m1s, newdata = MyX)
lines(MyX$IR, pred2, col="red", lwd=3)
但我不知道如何添加95%间隔线?
我想我可以使用AICmodav包中的语法来获取间隔:
predictSE.gls(m1s, MyX, se.fit=T)
lines(MyX$IR, predse, col="red", lwd=1)
但是后来我不确定如何绘制这个,因为看起来x和y变量是不同的......有人可以帮忙吗?
我对R并不感到惊讶,因此解释越简单,我就能越远离它。
提前致谢 luci的
答案 0 :(得分:0)
如果没有可重现的例子,我们所能做的就是猜测:尝试:
plot(IR, Chl, type ="p")
I1 <- order(IR)
lines(IR[I1], m1pred[I1 , 1], lty=1, col="blue", lwd = 3 )
lines(IR[I1], m1pred[I1 , 1]+2*m1pred[I1, "se.fit"], lty=2, col = "red", lwd =2)
lines(IR[I1], m1pred[I1 , 1]-2*m1pred[I1, "se.fit"], lty=2, col = "red", lwd = 2)
预测结果可能是矩阵或向量而不是列表。这是错误消息试图让您识别的内容。这不应该是来自mgcv::predict.gam
或gam::predict.gam
生成的预测对象的错误,但您没有包含library
来电,所以我们不要&# 39;知道哪个包gam
来自。你真的应该使用完整的参数名称(se.fit
而不是se
)并使用TRUE
而不是T
来调用函数。