如何在线性模型中说明空间协方差?


10

背景

我有一项实地研究的数据,在该研究中,两个模块中的每个模块有四个处理级别和六个重复项。(4x6x2 = 48个观察值)

街区相距约1英里,街区内有42个2m x 4m地块的网格和1m宽的人行道。我的研究在每个区块中仅使用了24个地块。

我想评估评估空间协方差。

这是一个使用单个块中的数据进行分析的示例,其中不考虑空间协方差。在数据集中,plot图的id是图的ID,图1的中心位于0,0的每个图x的x位置和yy位置。level是处理级别,并且response是响应变量。

layout <- structure(list(plot = c(1L, 3L, 5L, 7L, 8L, 11L, 12L, 15L, 16L, 
17L, 18L, 22L, 23L, 26L, 28L, 30L, 31L, 32L, 35L, 36L, 37L, 39L, 
40L, 42L), level = c(0L, 10L, 1L, 4L, 10L, 0L, 4L, 10L, 0L, 4L, 
0L, 1L, 0L, 10L, 1L, 10L, 4L, 4L, 1L, 1L, 1L, 0L, 10L, 4L), response = c(5.93, 
5.16, 5.42, 5.11, 5.46, 5.44, 5.78, 5.44, 5.15, 5.16, 5.17, 5.82, 
5.75, 4.48, 5.25, 5.49, 4.74, 4.09, 5.93, 5.91, 5.15, 4.5, 4.82, 
5.84), x = c(0, 0, 0, 3, 3, 3, 3, 6, 6, 6, 6, 9, 9, 12, 12, 12, 
15, 15, 15, 15, 18, 18, 18, 18), y = c(0, 10, 20, 0, 5, 20, 25, 
10, 15, 20, 25, 15, 20, 0, 15, 25, 0, 5, 20, 25, 0, 10, 20, 
25)), .Names = c("plot", "level", "response", "x", "y"), row.names = c(NA, 
-24L), class = "data.frame")

model <- lm(response ~ level, data = layout)      
summary(model)

问题

  1. 如何计算协方差矩阵并将其包括在回归中?
  2. 块非常不同,并且有很强的处理能力*块相互作用。分别分析它们是否合适?

1
曲线37和39都在x = 18,y = 10。错别字?
亚伦(Aaron)

@Aaron感谢您指出这一点。y = [0,10]。固定。
David LeBauer 2011年

Answers:


10

1)您可以与nlme图书馆建立空间相关性模型;您可以选择几种可能的模型。参见Pinheiro / Bates的第260-266页。

一个好的第一步是制作一个变异函数图,以查看相关性如何取决于距离。

library(nlme)
m0 <- gls(response ~ level, data = layout)  
plot(Variogram(m0, form=~x+y))

在这里,样本半变异函数随距离的增加而增加,表明观测结果确实在空间上相关。

相关结构的一种选择是球形结构。可以通过以下方式建模。

m1 <- update(m0, corr=corSpher(c(15, 0.25), form=~x+y, nugget=TRUE))

尽管完全有可能使用其他可能的相关结构之一对其进行改进,但该模型似乎确实比没有相关结构的模型更适合。

> anova(m0, m1)
   Model df     AIC      BIC    logLik   Test  L.Ratio p-value
m0     1  3 46.5297 49.80283 -20.26485                        
m1     2  5 43.3244 48.77961 -16.66220 1 vs 2 7.205301  0.0273

2)您也可以尝试,包括xy直接在模型; 如果相关模式不仅仅取决于距离,那么这可能是适当的。以您的情况(查看sesqu的图片)看来,无论如何对于此块,您可能都有对角线图案。

在这里,我将更新原始模型而不是m0,因为我仅更改固定效果,因此应该使用最大似然来拟合两个模型。

> model2 <- update(model, .~.+x*y)
> anova(model, model2)
Analysis of Variance Table

Model 1: response ~ level
Model 2: response ~ level + x + y + x:y
  Res.Df    RSS Df Sum of Sq      F   Pr(>F)   
1     22 5.3809                                
2     19 2.7268  3    2.6541 6.1646 0.004168 **

要比较这三个模型,您需要将它们全部都适合,gls并使用最大似然法代替REML的默认方法。

> m0b <- update(m0, method="ML")
> m1b <- update(m1, method="ML")
> m2b <- update(m0b, .~x*y)
> anova(m0b, m1b, m2b, test=FALSE)
    Model df      AIC      BIC     logLik
m0b     1  3 38.22422 41.75838 -16.112112
m1b     2  5 35.88922 41.77949 -12.944610
m2b     3  5 29.09821 34.98847  -9.549103

请记住,尤其是根据您对研究的了解,您也许能够提出一个比以上任何一个模型都更好的模型。也就是说,模型m2b不必一定被认为是最好的。

注意:这些计算是在将图37的x值更改为0之后执行的。


感谢您的有用回答;目前尚不清楚为什么在第2部分中您更新model而不是m0例如。 m2 <- update(m0, .~.+x*y)这样可以使用三种模式进行比较anova(m0,m1,m2); 执行m2

ps最后一行应该是“将图37的y值更改为5之后”;实际值为0,但结果相同。
大卫勒鲍尔

如果比较m0m1和,m2如您建议的那样,您将得到警告:Fitted objects with different fixed effects. REML comparisons are not meaningful. 要比较固定效果,您必须使用规则的最大似然而不是REML。参见编辑。
亚伦(Aaron)

感谢您的所有帮助。我不知道为什么,但是当我尝试拟合其他相关结构时会遇到错误,例如使用Pinheiro和Bates示例中的corExp。我对此问题已经提出了一个问题,但是您的输入将不胜感激。
David LeBauer 2011年

4

1)您的空间解释变量是什么?看起来x * y平面对于空间效果而言不是一个好的模型。

治疗和反应图

i=c(1,3,5,7,8,11,14,15,16,17,18,22,23,25,28,30,31,32,35,36,39,39,41,42)
l=rep(NA,42)[i];l[i]=level
r=rep(NA,42)[i];r[i]=response
image(t(matrix(-l,6)));title("treatment")
image(t(matrix(-r,6)));title("response")

2)看到块之间相距1英里的距离,并且您希望看到仅30米的效果,因此我认为单独分析它们是完全合适的。


可视化很有用,但是如果您将图形的右下角与右上角进行比较,在我看来,位置的效果比水平效果强。(ps我认为l [i] =响应应该是r [i] = ...)
David LeBauer 2011年

是。位置效果显着,因此在开始估计治疗效果之前,您真的需要一个好的模型。不幸的是,有很多丢失的数据,所以很难说应该是什么-我能想到的最好的方法是模拟位置效应,将其作为邻居响应+随机分量的平均值,然后尝试对此进行处理。这非常令人怀疑,因此任何其他领域知识都将是有价值的。错字固定。
sesqu 2011年

@sesqu ...没有丢失的数据,所有随机定位的24个图的数据都在那里。
David LeBauer 2011年

并不是每个x,y对都有数据,因此缺少数据。
亚伦(Aaron)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.