Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 获得GAMM间隔_R_Correlation_Gam_Mgcv - Fatal编程技术网

R 获得GAMM间隔

R 获得GAMM间隔,r,correlation,gam,mgcv,R,Correlation,Gam,Mgcv,我使用的是GAMM,我想用方差-协方差矩阵来提取模型的区间,但在这样做时遇到了问题 编码: fishdata <- read.csv("http://dl.dropbox.com/s/4w0utkqdhqribl4/fishdata.csv", header=T) attach(fishdata) require(mgcv) gammdl <- gamm(inlandfao ~ s(marinefao), correlation = corAR1(form = ~1 | year

我使用的是GAMM,我想用方差-协方差矩阵来提取模型的区间,但在这样做时遇到了问题

编码:

fishdata <- read.csv("http://dl.dropbox.com/s/4w0utkqdhqribl4/fishdata.csv", 
header=T)
attach(fishdata)
require(mgcv)

gammdl <- gamm(inlandfao ~ s(marinefao), correlation = corAR1(form = ~1 | year), 
family=poisson())

summary(gammdl$gam)
intervals(gammdl$lme)

fishdata这实际上是一个统计计算的问题,而不是R的使用。本质上,误差意味着,虽然计算可能已收敛到拟合模型,但该模型存在问题。这归结为在模型的拟合值处计算的Hessian是非正定的,因此协方差矩阵的最大似然估计不可用。这种情况通常发生在对数似然函数变得平坦的情况下,优化不会取得进一步的进展,并且是由于模型对于给定数据来说很可能过于复杂

您可以尝试在有AR(1)和无AR(1)的情况下拟合模型,并使用广义似然比检验(通过
anova()
)进行比较。我猜嵌套在
内的AR(1)是冗余的-即参数$\phi$实际上是0-正是这一点导致了错误


事实上,现在我也想到,您正试图将变量
inlandfao
建模为自身的平滑函数
s(inlandfao)
。这里有点不对劲——你可能期望完美的配合,而不需要平滑的功能。你需要解决这个问题;你不能将反应建模为自身的函数。

我真傻,我已经将预测值更改为
marinefao
,但我仍然有同样的问题。@hgeop那么,正如我所说,你的模型太复杂了。你需要AR(1)吗?好吧,也许我的问题是错的。我知道与正常gam模型
绘图(acf(gammdl$gam$res))
有一些自相关性,所以我需要考虑这一点。修改GAMM模型,使我在
GAMM
参数中只有
correlation=corAR1(form=~1)
可以获得间隔,但是当使用
poisson()
族时,模型的
gam
部分的绘图给了我一条直线
绘图(updategamm$gam)
,这似乎很无趣,并告诉我实际上不存在非线性关系?欢迎来到GAM建模时间序列的问题之一。问题是自相关与平滑项是不可分离的。你可以将自相关(AC)视为模型中的一个非常摆动的平滑函数&没有残余AC,或者相反,它在模型中是线性平滑的,在AR(1)中是高度的AC。一个选项是猜测
s()
术语所需的平滑度-您期望的平滑度有多大。声明为
k
参数,并使用
fx=TRUE
。通过这种方式,mgcv将估计具有如此多dfs的平滑,AR(1)可以适应这种情况。@hgeop供参考,您需要
绘图(acf(剩余(gammdl$gam,type=“normalized”))
。不要直接从模型拟合中提取组件-您使用的残差是工作残差,您通常不想要/不需要它们。此外,当AR(1)就位时,您需要标准化残差,否则您最终会拔出头发,因为残差自相关仍将存在于标准残差中……您确实不应该使用
attach()
(至少对于这一点)。删除该行并将
data=fishdata
添加到您的
gamm()
调用中-当您在我下面的回答中提到的房间中修复大象时。这个问题似乎与主题无关,因为它与统计有关(抱歉-我似乎无法建议迁移到stats.stackexchange.com)@CarlWitthoft您需要单独标记它,并手动建议将其迁移到。@GavinSimpson谢谢;完成。