1

I have two pixel images that I created using spatstat, one is a density image created by a set of points (using function density.ppp), and the other is a pixel image created from a population raster. I am wondering if there is a way to use the population raster to normalize the density image. Basically, I have a dataset of 10000+ cyber attack origin locations in the US, using the spatstat function I hope to investigate for spatial patterns. However, the obvious problem is that areas of higher population have more cyber attack origins because there are more people. I would like to use the population raster to fix that. Any ideas would be appreciated.

itoctopus
  • 4,133
  • 4
  • 32
  • 44
Michael
  • 11
  • 1
  • 5
  • Sound like you should just divide density by population. I'm not (yet) familiar with the raster functions in R, but that shouldn't be difficult. – RHA Nov 15 '15 at 07:39

1 Answers1

1

As the comment by @RHA says: The first solution is to simply divide by the intensity.

I don't have your data so I will make some that might seem similar. The Chorley dataset has two types of cancer cases. I will make an estimate of the intensity of lung cancer and use it as your given population density. Then a density estimate of the larynx cases serves as your estimate of the cyber attack intensity:

library(spatstat)
# Split into list of two patterns
tmp <- split(chorley)
# Generate fake population density
pop <- density(tmp$lung)
# Generate fake attack locations
attack <- tmp$larynx
# Plot the intensity of attacks relative to population
plot(density(attack)/pop)

Alternatively, you could use the inverse population density as weights in density.ppp:

plot(density(attack, weights = 1/pop[attack]))

This might be the preferred way, where you basically say that an attack occurring at e.g. a place with population density 10 only "counts" half as much as an attack occurring at a place with density 5.

I'm not sure what exactly you want to do with your analysis, but maybe the you should consider fitting a simple Poisson model with ppm and see how your data diverges from the proposed model to understand the behaviour of the attacks.

Ege Rubak
  • 4,347
  • 1
  • 10
  • 18