[R] Re: Rhelp: Need help interpreting plots in spatstat

Adrian Baddeley adrian at maths.uwa.edu.au
Mon May 31 04:10:46 CEST 2004


Dear Lisa

'spatstat' has extensive help files which would help you
to resolve this.

help(Gest) says that the output value of Gest() includes a 
vector Gest()$raw which is the raw (i.e. without edge correction)
estimate of the G function. It is not a very good estimate of G
because it can be severely biased. But it can be used for
hypothesis testing.

 > ghat.env <- function(n, s, r, win=owin(myOwin){
 > hold <- matrix(0, s, length(r))
 > for(i in 1:s){
 > hold[i,] <- Gest(runifpoint(n, win=myOwin), r=r)$raw
 > }
 > mn <- apply(hold, 2, mean)
 > Up <- apply(hold, 2, max)
 > Down <- apply(hold, 2, min)
 > return(data.frame(mn, Up, Down))
 > }

    This defines a function 'ghat.env' which generates 's' independent
    simulated realisations of a pattern of 'n' points in the window 'myOwin',
    computes the raw estimate of the G function for each realisation,
    then takes the pointwise sample mean, maximum, and minimum of these
    estimates. If the estimates are denoted G1(r), ... Gn(r)
    then mn[i] is the sample mean of G1(r[i]), ...., Gn(r[i]).
    
 > tsds.ghat <- Gest(tsdspoints)
 > tsds.ghat.short <- tsds.ghat[tsds.ghat$r <= .15, ]

    These compute the G function estimates for your dataset 'tddspoints'
    and discard the estimates for r > 0.15.
    The result is a data frame containing several different estimates of G,
    including $raw.

 > tsds.cdf <- 1-exp(-40*pi*(tsds.ghat.short$r^2))

    This computes the theoretical G function for a Poisson process
    with intensity 40. 

 > plot(tsds.ghat.short$r, tsds.ghat.short$raw, xlab="Distance (degrees)", 
 > ylab="Ghat", main=" Transport, Storage, and Disposal sites (TSDs)")

    This plots the RAW estimate of G() from your dataset 'tddspoints'
    against r. 

 > lines(tsds.ghat.short$r, tsds.cdf)

    This superimposes a plot of the theoretical G function for a Poisson
    process with intensity 40.

    ****NOTE**** THESE FUNCTIONS ARE NOT COMPARABLE!!!!
    The raw estimate is a severely biased estimate of G.
    
 > tsds.env <- ghat.env(n=40, s=100, r=tsds.ghat$r)
   
    This invokes the function ghat.env as described above,
    with n=40. Thus it simulates realisations of a random pattern
    of a FIXED number n=40 of points. 

    The results of these simulations are not strictly
    comparable with the Poisson process of intensity 40.
    A Poisson process has a random number of points.

    The mean number of points in the window equals 40 times the area
    of the window - I hope your window has area 1 or these simulations
    are completely incompatible with the 'tsds.cdf' curve.

 > tsds.env.short <- tsds.env[tsds.ghat$r <= .15, ]
   
    Discards estimates of G(r) for r > 0.15

 > lines(tsds.ghat.short$r, tsds.env.short$Up, lty=5)
 > lines(tsds.ghat.short$r, tsds.env.short$Down, lty=5)

    Plots the pointwise maxima and minima of the simulations
    in a classical Monte Carlo test plot.

--------------------------------------------------
I suggest you use the following code instead.

I've changed $raw to $trans which gives you the 'translation correction',
yielding an unbiased estimator of G(r). If you really want the raw estimate,
edit $trans to $raw everywhere. 

regards
Adrian Baddeley


-------------------------------

ghat.env <- function(n, s, r, win=owin(myOwin){
   hold <- matrix(0, s, length(r))
   for(i in 1:s){
      hold[i,] <- Gest(runifpoint(n, win=win), r=r)$trans
   }
   mn <- apply(hold, 2, mean)
   Up <- apply(hold, 2, max)
   Down <- apply(hold, 2, min)
   return(data.frame(mn, Up, Down))
}

tsds.ghat <- Gest(tsdspoints)
tsds.ghat.short <- tsds.ghat[tsds.ghat$r <= .15, ]

# empirical G function 
plot(tsds.ghat.short$r, tsds.ghat.short$trans, 
     xlab="Distance (degrees)", ylab="Ghat", 
     main=" Transport, Storage, and Disposal sites (TSDs)",
     type="l", lwd=2)

# 100 simulations of n points 

forty <- tsdspoints$n
tsds.env <- ghat.env(n=forty, s=100, r=tsds.ghat$r)
tsds.env.short <- tsds.env[tsds.ghat$r <= .15, ]

# upper and lower envelopes
lines(tsds.ghat.short$r, tsds.env.short$Up, lty=5)
lines(tsds.ghat.short$r, tsds.env.short$Down, lty=5)

# mean G function from simulations of n points
lines(tsds.ghat.short$r, tsds.env.short$mn,lty=2)




More information about the R-help mailing list