[R] ordinary kriging: the edges of the polygons are ignored

Jon Skoien jon.skoien at jrc.ec.europa.eu
Thu Aug 21 08:58:28 CEST 2014


Hi Frederico,

The kriging function seems to come from the kriging package (please give 
also the package next time you ask a question), which I dont know. I can 
therefore not tell you why it does not give you the correct result. But 
R has a huge number of packages which can krige, and autoKrige from 
automap should fairly easy be able to give you what you want.

# You have to create a SpatialPolygon of your house first, from which 
you can sample:
pts = cbind(house$x, house$y)
pts = rbind(pts, pts[1,]) # Repeating the first coordinates, just to 
close the polygon
house2 = SpatialPolygons( list( Polygons(list(Polygon(pts)), 1)))
housegrid = spsample(house2, 10000, "regular") # Sampling 10000 points 
on a regular grid
gridded(housegrid) = TRUE # Defining this to be a grid, not a collection 
of points

# You need to make a SpatialPointsDataFrame of your temperature data, 
and then you can interpolate
coordinates(U) = ~x+y
res = autoKrige(temp~1, U, housegrid)
spplot(res$krige_output, col.regions = rev(heat.colors(100)))
# Your result is in the var1.pred-variable of res$krige_output

You will generally get more and quicker answers to questions about 
spatial data and methods from the r-sig-geo list.

Best wishes,
Jon


On 8/20/2014 11:01 PM, Federico Calboli wrote:
> Hi All,
>
> I am trying to do some kriging of a floor, based on a number of heat sensors.
>
> My data looks like this:
>
>     sensor        temp    x    y
> 1       1  1.25437406  390 2960
> 2       2  0.64384594  830 2960
> 3       3  1.52067733 1420 2960
> 4       4  1.21441928 3127 2920
> 5       5  1.04227694 4005 2920
> 6       6  1.90084852  400 1960
> 7       7  1.58530250  835 1880
> 8       8  1.23060971 1130 1960
> 9       9  0.92749453 1550 1950
> 10     10  0.76638878 1995 1960
> 11     11  0.84247092 2540 1950
> 12     12  0.93999929 3300 1880
> 13     13  0.61610170 4000 1870
> 14     14  1.06967332  395 1330
> 15     15  0.72970917  845 1330
> 16     16  0.60216970 1135 1300
> 17     17  0.44648551 1570 1275
> 18     18  2.49863724 2010 1290
> 19     19  0.71619206 2540 1320
> 20     20  1.50984666 3140 1275
> 21     21 -0.06540552 4000 1258
> 22     22  1.20017747  400  685
> 23     23  1.05820693 1575  640
> 24     24  2.25086655 1830  625
> 25     25  0.69296059 3120  625
> 26     26  0.69324786 3990  605
>
> and the floor plan describes the edges of the floor thus:
>
>        x    y
> 1   210 3200
> 2   210  420
> 3  1510  420
> 4  1510  100
> 5  4090  100
> 6  4090 3200
> 7  2947 3200
> 8  2947 2850
> 9  1647 2850
> 10 1647 3200
> 11  210 3200
> 12  210 3200
>
> I run these commands:
>
> house2 <- list(data.frame(house$x, house$y))
> plot(house.y ~house.x, type = 'l', house2[[1]])
> points(U[,3], U[,4], pch = 20)
> housekrig=kriging(U[,3],U[,4],U[,2],polygons=house2,lags = 5)
> image(housekrig, xlim = extendrange(U[,3]), ylim = extendrange(U[,4]), col = rev(heat.colors(100)))
>
> and I noticed that the kriging area does not respect the floor plan.  In fact, if I do:
>
> points(U[,3], U[,4], pch = 20)
>
> the sensors and not in the same place, and the kriging has ignored the edges of the polygons altogether.
>
> So my question is, how do I have a kriging of the *whole* surface, based on my sensors?  Any suggestion is welcome, especially if the data does not require reformatting (or if the reformatting is straightforward)!
>
> Best
>
> F
>
> PS I have contacted the maintainer of the package about the issue but I had no reply, and I’d need to solve this one way or another sooner, rather than later.
>
>
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



	[[alternative HTML version deleted]]



More information about the R-help mailing list