[R-sig-Geo] permutation with geometrical constraints
T.O. Richardson
Tom.Richardson at bristol.ac.uk
Tue Nov 16 16:39:38 CET 2010
Hi Dr Baddeley,
I have a spatstat query (below & attached .txt). I thought to email you
first, rather than R-Help or R-Sig-Geo as (I think?) we're supposed to ask
the package maintainers first...
I wonder if you could please take a look at the code below & offer your
thoughts or suggestions?
My query regards the creation of a randomised multitype ppp when different
marks have different sizes. The presence of marks with particular sizes
introduces geometrical constraints into the randomisation procedure because
i don't want any overlaps between the points.
Many thanks in advance!!
Tom Richardson
### Load data
multitype_ppp <- ppp(x=x,y=y, marks=type) ##
A <- ppp(x=x[type==A],y=y[type==A]) ## radii for type A ~ 0.6
B <- ppp(x=x[type==B],y=y[type==B]) ## radii for type B ~ 1.64
# etc.... there are other types- excluded here for clarity
## create intensity map for the multitype_ppp & also for those points of
type A
lambda_dot <- as.im(adaptive.density(multitype_ppp, correction =
c("translate"), nrep=100, f=0.5 ))
lambda_I <- as.im(adaptive.density(A, nrep=50, f=0.1 ))
########### Random Labelling, for K-dot function
###############################
########### Under random labelling, Kiâ¢(r) = K(r), where K, is the
summary #####
########### function for the point process without marks
######################
KDIFF <- function (X, ..., i)
{
Kidot <- Kdot.inhom(X, ..., i= i, lambdaI=lambda_I ,
lambdadot=lambda_dot)
Kinh <- Kinhom (X, ..., lambda=lambda_dot )
dif <- eval.fv (Kidot - Kinh)
return(dif)
}
## Create 95% C.I. envelope for to test random-labelling hypothesis of
"type_A-to-any"
envelopes_A <- envelope(multitype_ppp, KDIFF, i="mark_A", nsim = 39,
simulate = expression(rlabel(multitype_ppp)))
## THE END ###
The command "simulate=expression(rlabel(multitype_ppp))" reallocates the
identities (A or B) amongst all points in 'multitype_ppp'. This would be
suitable if the marks were something like 'red'/'blue', or 'on'/'off'.
However, in my data the marks are the radii of the objects (0.6 & 1.64 mm).
Thus simply shuffling the marks amongst the x,y, coordinates in this way
sometimes results in the disc associated with each point overlapping other
discs! This is not realistic. Therefore I need an alternative procedure to
generate a randomised multitype_ppp based on the original, but without
overlaps.
I thought of the following:
## intesnity maps again:
lambda_dot <- as.im(adaptive.density(multitype_ppp, correction =
c("translate"), nrep=100, f=0.5 ))
lambda_A <- as.im(adaptive.density(A, nrep=50, f=0.5 ))
lambda_B <- as.im(adaptive.density(B, nrep=50, f=0.5 ))
## create inhomogeneous ppp's for A & B basaed on the original ones, in
which there are no A-A or B-B overlaps
Hard_A <- ppm(points, ~ polynom(x,y,2) + Z , covariates=list(Z=lambda_A),
Hardcore(0.6) )
## create a ppp in which there are no overlaps between points of type B
Hard_B <- ppm(points, ~ polynom(x,y,2) + Z , covariates=list(Z=lambda_B),
Hardcore(1.64) )
## Now combine them
multitype_ppp2 <- superimpose(Hard_A, Hard_B)
HOWEVER, this does not exclude the possibility that there will be A-B & B-A
overlaps !
Alternatively one could use rshift until the minimum A-B NND is >=
0.6+1.64. However, if rshift has to be performed multiple times, the
resulting point patterns may have quite different underlying intensity
maps, i.e. they will no longer be representative samples from lambda_A or
lambda_B !!
Basically, I'm stuck...
-------------- next part --------------
Hi Dr Baddeley,
I hope you are well. I have a spatstat query
I wonder if you could take a look at the below. My query regards the creation of a randomised multitype ppp when different marks have different sizes. The presence of marks with particular sizes introduces geometrical constraints into the randomisation procedure because i don't want any overlaps between the points.
Many tahnks in advance!!
Tom Richardson
### Load data
multitype_ppp <- ppp(x=x,y=y, marks=type) ##
A <- ppp(x=x[type==A],y=y[type==A]) ## radii for type A ~ 0.6
B <- ppp(x=x[type==B],y=y[type==B]) ## radii for type B ~ 1.64
# etc.... there are other types- excluded here for clarity
## create intensity map for the multitype_ppp & also for those points of type A
lambda_dot <- as.im(adaptive.density(multitype_ppp, correction = c("translate"), nrep=50, f=0.1 ))
lambda_I <- as.im(adaptive.density(A, nrep=50, f=0.5 ))
########### Random Labelling, for K-dot function ###############################
########### Under random labelling, Ki(r) = K(r), where K, is the summary #####
########### function for the point process without marks ######################
KDIFF <- function (X, ..., i)
{
Kidot <- Kdot.inhom(X, ..., i= i, lambdaI=lambda_I , lambdadot=lambda_dot)
Kinh <- Kinhom (X, ..., lambda=lambda_dot )
dif <- eval.fv (Kidot - Kinh)
return(dif)
}
## Create 95% C.I. envelope for to test random-labelling hypothesis of "type_A-to-any"
envelopes_A <- envelope(multitype_ppp, KDIFF, i="mark_A", nsim = 39, simulate = expression(rlabel(multitype_ppp)))
## THE END ###
The command "simulate=expression(rlabel(multitype_ppp))" reallocates the identities (A or B) amongst all points in 'multitype_ppp'. This would be suitable if the marks were something like 'red'/'blue', or 'on'/'off'. However, in my data the marks are the radii of the objects (0.6 & 1.64 mm). Thus simply shuffling the marks amongst the x,y, coordinates in this way sometimes results in the disc associated with each point overlapping other discs! This is not realistic. Therefore I need an alternative procedure to generate a randomised multitype_ppp based on the original, but without overlaps.
I thought of the following:
## intesnity maps again:
lambda_dot <- as.im(adaptive.density(multitype_ppp, correction = c("translate"), nrep=50, f=0.1 ))
lambda_A <- as.im(adaptive.density(A, nrep=50, f=0.1 ))
lambda_B <- as.im(adaptive.density(B, nrep=50, f=0.1 ))
## create inhomogeneous ppp's for A & B basaed on the original ones, in which there are no A-A or B-B overlaps
Hard_A <- ppm(points, ~ polynom(x,y,2) + Z , covariates=list(Z=lambda_A), Hardcore(0.6) )
## create a ppp in which there are no overlaps between points of type B
Hard_B <- ppm(points, ~ polynom(x,y,2) + Z , covariates=list(Z=lambda_B), Hardcore(1.64) )
## Now combine them
multitype_ppp2 <- superimpose(Hard_A, Hard_B)
However, this does not exclude the possibility that there will be A-B & B-A overlaps !
Alternatively one could use rshift until the minimum A-B NND is >= 0.6+1.64. However, if rshift has to be performed multiple times, the resulting point patterns may have quite different underlying intensity maps, i.e. they will no longer be representative samples from lambda_A or lambda_B !!
Basically, I'm stuck...
More information about the R-sig-Geo
mailing list