2

如果我使用包 nlme 中的 lme 函数并编写

m <- lme(y ~ Time, random = ~1|Subject)

然后写

Variogram(m, form = ~Time|Subject)

它产生变异函数没问题。

但是,如果我使用 lm 没有随机效应,

m <- lm(y ~ Time)

和写

Variogram(m, form = ~Time)

它产生

Error in Variogram.default(m, form = ~Time) : 
  argument "distance" is missing, with no default

这是怎么回事?为什么当我适合lm时它需要一个距离,而以前用lme不需要它?

那么如何在不需要指定“距离”的情况下绘制变异函数呢?我使用其他建模方法也有同样的问题:glm、gam、gamm 等。

编辑:

您可以使用例如 nlme 中的 BodyWeight 数据自己验证所有这些。

> m <- lm(weight ~ Time, data = BodyWeight)
> Variogram(m, form =~Time)
Error in Variogram.default(m, form = ~Time) : 
  argument "distance" is missing, with no default
4

1 回答 1

1

其中nlmeVariogram.lme一个适合的方法函数lme,但没有lm模型的等效方法。

您可以Variogram.default按如下方式使用:

library(nlme)
mod1 <- lm(weight ~ Time, data = BodyWeight)
n <- nrow(BodyWeight)
variog <- Variogram(resid(mod1), distance=dist(1:n))
head(variog)

############
      variog dist
1 17.4062805    1
2 23.1229516    2
3 29.6500135    3
4 15.6848617    4
5  3.1222878    5
6  0.9818238    6

我们还可以绘制变异函数:

plot(variog)

在此处输入图像描述

于 2017-05-16T22:27:41.377 回答