PaulBeales PaulBeales - 10 months ago 71
R Question

Thin Plate Spline for 3D surface prediction in R

I tried this answer

get a surface plot in R

but it hasn't really helped.
I would like to perform a TPS (using Tps from Fields{}) on an XYZ dataframe where xy are co-orinates and z is a thickness. Then I would like to visualise the plot firstly before TPS and then after TPS..? Is this possible.
Then I would like to extract predicted thicknesses for a given set of new xy co-ordinates..?

Please let me know if this is possible

My Dataframe looks like this, dataframe is called LSP:

xxxx 1 1.956 a -3465 -94350
xxxx 1 1.962 a -3465 -53850
xxxx 1 1.951 a 50435 -40350
xxxx 1 1.958 a -57365 -40350

So I tried this:

LSP.spline <- Tps(LSP[,5:6], LSP$MEAS)
out.p <- predict.surface(LSP.spline, xy = c(1,2))
plot.surface(out.p, type="p")

But out.p is just NULL..?

so attempting the plot gives me:

Error in nrow(z) : argument "z" is missing, with no default

Any help is appreciated.

Answer Source

predict.surface is now an obsolete / deprecated function. Use predictSurface instead.

fit<- Tps( BD[,1:4], BD$lnya)  # fit surface to data 

# evaluate fitted surface for  first two 
# variables holding other two fixed at median values

out.p<- predictSurface(fit)
surface(out.p, type="C") 

enter image description here

Thanks for that - how about my second can I extract predicted surface thickness values for a given set of XY locations..?

Use predict function. Have a read on ?predict.Tps. For the above example, let's say we want to predict at the first 4 locations in BD[, 1:4], we can do

predict(fit, x = BD[1:4, 1:4])

#          [,1]
#[1,] 11.804124
#[2,] 11.804124
#[3,]  8.069056
#[4,]  9.501551

In general, pass x a two-column matrix.