[R] R package fields: Thin-plate splines question

Rebecca Clark rmclark1 at neo.tamu.edu
Sat Sep 1 00:10:35 CEST 2012


Greetings, R helpers,

I have been using the Tps() function in the fields package to model response surfaces for some dietary research in crickets.  Overall, I have *three* independent variables of interest, two continuous variables ("protein" and "carbohydrate") and one categorical variable (cricket "morph").  My overall goal is to produce two heat maps where colors are scaled on the same absolute scale.  As best I see it, there are two possible ways to achieve this: some adjustment to the image() function parameters, or some adjustment to the Tps() function and subsequent method to separate the two plots (this would also require rearrangement of the data frame).  

However, I am stumped on the particulars.  Does anyone have an idea of how to do this?  I am including (hopefully reproducible) syntax for the two separate surfaces below.

Thank you,
Rebecca Clark
Postdoctoral Research Associate
Texas A&M University


######

library(fields)

triact<-structure(list(Diet = structure(1:13, .Label = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"), class = "factor"), LW = c(19, 14, 9, 19, 13, 6.8, 16.9, 2.4, 18.1, 3.5, 16, 8.3, 11), SW = c(5.5, 8.5, 11.7, 6, 3.5, 4, 5.5, 3.2, 9.1, 3.1, 7.5, 3, 3.5), protein = c(18, 28, 8, 28.75, 4, 17.25, 13, 14, 16.25, 9, 27, 9.75, 23), carbohydrate = c(24, 14, 34, 23.75, 17, 14.25, 29, 7, 36.25, 12, 36, 21.75, 19)), .Names = c("Diet", "LW", "SW", "protein", "carbohydrate"), class = "data.frame", row.names = c(NA, -13L))

attach(triact)

surf.teLW=Tps(cbind(protein,carbohydrate),LW, lambda = 0.01)
surf.teSW=Tps(cbind(protein,carbohydrate),SW, lambda = 0.01)

# Method for separately producing the surface and then mapping contour lines onto it (instead of using "surface()"):
surf.te.outLW=predict.surface(surf.teLW)
surf.te.outSW=predict.surface(surf.teSW)

par(mfrow=c(1,2))

image(surf.te.outLW, col=tim.colors(128), lwd=5, las=1, font.lab=2, cex.lab=1.3, mgp=c(2.7,0.5,0), font.axis=1, lab=c(4,5,6), xlab=expression("Protein content"), ylab=expression("Carbohydrate Content"),main="Triglyceride (LW)", asp=1, xlim=c(0,38), ylim=c(0,38))
contour(surf.te.outLW, lwd=2, labcex=1, add=T)

image(surf.te.outSW, col=tim.colors(128), lwd=5, las=1, font.lab=2, cex.lab=1.3, mgp=c(2.7,0.5,0), font.axis=1, lab=c(4,5,6), xlab=expression("Protein content"), ylab=expression("Carbohydrate Content"),main="Triglyceride (SW)", asp=1, xlim=c(0,38), ylim=c(0,38))
contour(surf.te.outSW, lwd=2, labcex=1, add=T)

# Note how different the scales are between the two images, as indicated by the contour lines, but the color ranges are the same.



More information about the R-help mailing list