(This article was first published on

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.**Econometric Sense**, and kindly contributed to R-bloggers)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...