[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 Id 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