(This article was first published on Econometric Sense, and kindly contributed to R-bloggers)
The following post at Constructing Difference Curves - Part 3 from economics.about.com provides a discussion on indifference curves (but actually I think they are isoquants) and how to construct them. I think I have a grasp on how to do this in R if you define the utility function as z = √(x*y) . For the x and y data I used modified data from the article mentioned above, and then plotted some simulated data.The data I used for x and y (which I modified-see documentation in the R-code) is listed below:
x: 1,2,3,4,5,6,7,8
y: 10,10,10,15,15,30,60,90
The R code below reads in the data and plots level sets or indifference curves for both the data above and the simulated data. This very basic, for full documentation ( and options for x,y limits, levels etc.) of the contour function in R see here.
Edit: for the second part of the program, if I switch the values of x and y I get indifference curves that are convex to the origin as they should be- the correction can be also represented much more compactly as:
Created by Pretty R at inside-R.org
See program below:
# *------------------------------------------------------------------
# | PROGRAM NAME: INDIFFERENCE_CURVES_R
# | DATE: 3/11/11
# | CREATED BY: MATT BOGARD
# | PROJECT FILE: P:\R Code References
# *----------------------------------------------------------------
# | PURPOSE: MORE TO PLOT LEVEL SETS USING THE CONTOUR FUNCTION THAN
# | TO ACTUALLY PLOT INDIFFERENCE CURVES
# *------------------------------------------------------------------
# | COMMENTS:
# |
# | 1: references: http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/contour.html
# | 2:
# | 3:
# |*------------------------------------------------------------------
# | DATA USED: http://economics.about.com/od/indifferencecurves/a/constructing3.htm
# |
# |
# |*------------------------------------------------------------------
# | CONTENTS:
# |
# | PART 1: explicit data
# | PART 2: simulated data (sort of) - not really indifference curves
# | PART 3:
# *-----------------------------------------------------------------
# | UPDATES:
# |
# |
# *------------------------------------------------------------------
# *------------------------------------------------------------------
# | PART 1: explicit data
# *-----------------------------------------------------------------
# raw data
x <- c(1,2,3,4,5,6,7,8)
y <- c(10,10,10,15,15,30,60,90)
# note- for the contour function to work below, x and y
# These must be in ascending order-based on the contour documentation
# which is the opposite of how the data was presented at
# about.com
# put x and y in a matrix
xy <- as.matrix(cbind(x,y))
# transpose xy
xyT <- t(xy)
# define function z as a matrix
z <- as.matrix(sqrt(x*y))
# plot the countour plot / specified level sets
contour(xyT,z) # all levels
contour(xyT,z, levels =c(10,20,50)) # specified levels for z
# *------------------------------------------------------------------
# | PART 2: simulated data (sort of) - not really indifference curves
# *-----------------------------------------------------------------
rm(list=ls()) # get rid of any existing data
ls() # display active data -should be null
# define x and y
x <- seq(0,100,by=10)
y <- seq(0,20,by=2)
# put x and y in a matrix
xy <- as.matrix(cbind(x,y))
# transpose xy
xyT <- t(xy)
# define function z as a matrix
z <- as.matrix(sqrt(x*y))
contour(xyT,z)
To leave a comment for the author, please follow the link and comment on his blog: Econometric Sense.
R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

Zero Inflated Models and Generalized Linear Mixed Models with R.
Zuur, Saveliev, Ieno (2012).