如何从R中的nlme包装中装有gls的模型计算伪R平方

时间:2013-01-22 03:36:42

标签: r

我使用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 个答案:

答案 0 :(得分: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

McFadden伪R2

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

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

R2.n

但我不认为哪种更适合评估这种模型的适合度。

答案 1 :(得分:2)

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

> 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平方度量假设。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

假设我正确理解你的问题,

summary(m01)会给你你想要的东西吗? ??fit会为您提供进一步的建议。