0

I just started getting into spatial analysis and am fitting some models to my data. My main goal is to test for spatial regularity (whether there is inhibition between points).

I created my hyperframe for the data below. There are 6 point patterns (Areas), 4 in subhabitat 1, and 2 in subhabitat 2.

ALL_ppp <- list(a1ppp, a2ppp, a3ppp, a4ppp, a5ppp, a6ppp) 
H <- hyperframe(Area = c("A1","A2","A3","A4","A5","A6"), Subhabitat = c("sbh1","sbh1","sbh1","sbh1","sbh2","sbh2"), Points = ALL_ppp )

I then created some models. This model fits a Strauss process with a different interaction radius for each area, with intensity depending on subhabitat type. It is very similar to the example in the book on page 700.

radii <- c(mean(area1$diameter), mean(area2$diameter),mean(area3$diameter),mean(area4$diameter),mean(area5$diameter),mean(area6$diameter))
Rad <- hyperframe(R=radii)
Str <- with(Rad, Strauss(R))
Int <- hyperframe(str=Str)

fittest8 <- mppm(Points ~ Subhabitat, H, interaction=Int, iformula = ~str:Area)

I would like to conduct a formal test for significance for the Strauss interaction parameters using anova.mppm to test for regularity. However, I am not sure if I am doing this properly, as I cannot seem to get this to work. I have tried:

fittest8 <- mppm(Points ~ Subhabitat, H, interaction=Int, iformula = ~str:Area)
fitex <- mppm(Points ~ Subhabitat, H)
anova.mppm(fittest8, fitex, test = "Chi")

I get the error "Error: Coefficient ‘str’ is missing from new.coef" and cannot find a way to resolve this. Any advice would be greatly appreciated.

Thanks!

1 Answers1

0

First, please learn how to make a minimal reproducible example. This will make it easier for people to help you solve the problem, without having to guess what was in your data.

In your example, the columns named Area and Subhabitat in the hyperframe H are character vectors, but in your code, the call to mppm would require that they are factors. I assume you converted them to factors in order to be able to fit the model fittest8. (Another reason to make a working example)

You said that your example was similar to one on page 700 of the spatstat book which does work. In that case, a good strategy is to modify your example to make it as similar as possible to the example that works, because this will narrow down the possible cause.

A working example of the problem, similar to the one in the book, is:

Str <- hyperframe(str=with(simba, Strauss(mean(nndist(Points)))))
fit1 <- mppm(Points ~ group, simba, interaction=Str, iformula=~str:group)
fit0 <- mppm(Points ~ group, simba)
anova(fit0, fit1, test="Chi")

which yields the same error Error: Coefficient ‘str’ is missing from new.coef

The simplest way to avoid this is to replace the interaction formula ~str:group by str+str:group:

fit1x <- mppm(Points ~ group, simba, interaction=Str, 
           iformula = ~str + str:group)
anova(fit0, fit1x, test="Chi")

or in your example

fittest8X <- mppm(Points ~ Subhabitat, H, interaction=Int, 
           iformula=~str + str:Area)
anova(fittest8X, fitex, test="Chi")

Note that fittest8X and fittest8 are equivalent models but are expressed in a slightly different way.

The interaction formula and the trend formula are connected in a complicated way and the software is not always successful in disentangling them. If you get this kind of problem again, try different versions of the interaction formula.

Adrian Baddeley
  • 2,534
  • 1
  • 5
  • 8
  • Hi, thank you for responding. The model format you suggested did indeed work, but just two quick clarifications: While I do get the anova output, I also get an error saying "Internal error: Unable to map submodel to full model." Additionally, regarding interpretation, while the p-value is highly significant for the anova, the canonical Strauss interaction parameters for Areas 2-4 in the model output summary are not. I am interpreting this as "there is evidence of significant spatial inhibition/regularity, but only in areas 1, 5 and 6." Would this be correct? Thank you. – Sriram Ramamurthy Dec 28 '21 at 07:51
  • Some code was broken. It is now fixed in the development version of `spatstat.core` (version 2.3-2.006`). – Adrian Baddeley Dec 29 '21 at 08:48