如何从R中nlme包中使用gls拟合的模型计算伪R平方

3

我使用nlme中的gls拟合了这个模型:

require(nlme)

set.seed(101)
mp <-data.frame(year=1990:2010)
N <- nrow(mp)

mp <- within(mp,
     {
         wav <- rnorm(N)*cos(2*pi*year)+rnorm(N)*sin(2*pi*year)+5
         wow <- rnorm(N)*wav+rnorm(N)*wav^3
     })

m01 <- gls(wow~poly(wav,3), data=mp, correlation = corARMA(p=1))

我希望能够计算适合度的任何测量,例如伪R平方:哪一种是推荐的?如何计算?
谢谢。
4个回答

3

您需要有某种基准来进行比较:

> summary(m01)
Generalized least squares fit by REML
  Model: wow ~ poly(wav, 3) 
  Data: mp 
       AIC      BIC    logLik
  226.5434 231.5427 -107.2717

 m01 <- gls(wow~1, data=mp, correlation = corARMA(p=1))
> summary(m01)
Generalized least squares fit by REML
  Model: wow ~ 1 
  Data: mp 
       AIC     BIC    logLik
  256.5048 259.492 -125.2524

非线性拟合的问题在于均值不再是“基线”,而这正是R平方度量所假定的。

这是否意味着,使用模型m00 <- gls(wow~1, data=mp, correlation = corARMA(p=1))作为基准的@Leosar的答案是计算McFaddens伪R²的明智方法? - yenats
我怀疑不是这样的。我怀疑他和我都无法用可靠的统计论据回答这个问题。我知道线性混合模型没有易于解释的GOF方法:请参见此问答 https://stats.stackexchange.com/questions/37944/what-are-easy-to-interpret-goodness-of-fit-measures-for-linear-mixed-effects-mo - IRTFM
另一方面,当您查看?rcompanion::naglekerke时(由另一个回答者建议),似乎这些类别的模型被认为是公平竞争的,但需要注意该帮助页面中的所有警告,特别是不将它们视为真实的GOF结果和“拟合模型和零模型应嵌套正确。也就是说,其中一个的术语需要是另一个的子集,并且它们应具有相同的观察集。由于@Leosar的示例符合嵌套条件,因此可能符合要求。 - IRTFM

3
这里有一些伪R平方的内容。
R2 <- cor(mp$wow,predict(m01))^2

R2

R2.1 <- 1 - with(mp, (sum((wow-predict(m01))^2)/sum((wow-mean(wow))^2)))

R2.1

麦克法登伪R2

m00 <- gls(wow~1, data=mp, correlation = corARMA(p=1))

R2.n <- 1-(as.numeric(logLik(m01)/logLik(m00)))

R2.n

但我不知道哪种方法更适合评估这种模型的拟合程度。


嗨,在这里有一些更多的伪R2及其解释。干杯 - Rafael

3

rcompanion::nagelkerke () 函数计算三个不同的伪R²值。该函数接受通过 nlme::gls 拟合的模型。


0

summary(m01) 应该可以给你想要的东西,假设我正确理解了你的问题???fit 将为你提供更多建议。


@DWin,说得好。我猜应该使用help.search("fit", package = "nlme") - Eric Fail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接