Plotting Indifference Curves with R Contour Function

March 11, 2011
By

(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:

contour(
xyT<-t(as.matrix(cbind(x<-seq(0,20,by=2),y<-seq(0,100,by=10)))),
z<-as.matrix(sqrt(x*y))
)

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)
Created by Pretty R at inside-R.org

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...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Tags: , ,

Comments are closed.