11.520: A Workshop on Geographic Information Systems |
11.188: Urban Planning and Social Science Laboratory |
Distributed: October 27, 2008
Due: Monday, Nov. 3, 2008
The purpose of this lab exercise is to introduce spatial analysis methods using raster models of geospatial phenomena. Thus far, we have represented spatial phenomena as discrete features modeled in the GIS as points, lines, or polygons--i.e., so-called 'vector' models of geospatial features. Sometimes it is useful to think of spatial phenomena as 'fields' such as temperature, wind velocity, or elevation. The spatial variation of these 'fields' can be modeled in various ways including contour lines and raster grid cells. In this lab exercise, we shall focus on raster models and examine ArcGIS's 'Spatial Analyst' extension.We shall use raster models to create a housing value 'surface' for Cambridge. A housing value 'surface' for Cambridge would show the high- and low-value neighborhoods much like an elevation map shows height. To create the 'surface' we will explore ArcGIS's tools for converting vector data sets into raster data sets--in particular, we will 'rasterize' the 1989 housing sales data for Cambridge and the 1990 Census data for Cambridge block groups.
The block group census data and the sales data contain relevant information about housing values, but the block group data may be too coarse and the sales data may be too sparse. One way to generate a smoother housing value surface is to interpolate the housing value at any particular location based on some combination of values observed for proximate housing sales or block groups. To experiment with such methods, we will use a so-called 'raster' data model and some of the ArcGIS Spatial Analyst's capabilities.
The computation needed to do such interpolations involve lots of proximity-dependent calculations that are much easier using a so-called 'raster' data model instead of the vector model that we have been using. Thus far, we have represented spatial features--such as Cambridge block group polygons--by the sequence of boundary points that need to be connected to enclose the border of each spatial object--for example, the contiguous collection of city blocks that make up each Census block group. A raster model would overlay a grid (of fixed cell size) over all of Cambridge and then assign a numeric value (such as the block group median housing value) to each grid cell depending upon, say, which block group contained the center of the grid cell. Depending upon the grid cell size that is chosen, such a raster model can be convenient but coarse-grained with jagged boundaries, or fine-grained but overwhelming in the number of cells that must be encoded.In this exercise, we only have time for a few of the many types of spatial analyses that are possible using rasterize data sets. Remember that our immediate goal is to use the cmbbgrp and sales89 data to generate a housing-value 'surface' for the city of Cambridge. We'll do this by 'rasterizing' the block group and sales data and then taking advantage of the regular grid structure in the raster model so that we can easily do the computations that let us smooth out and interpolate the housing values.
1. Launch the ArcGIS and add five data layers listed below.
|
Census 1990 block group' centroids for Cambridge |
|
Census 1990 block group polygons for Cambridge |
|
U.S. Census 1990 TIGER file for Cambridge |
|
Cambridge Housing Sales Data |
|
Cambridge polygon |
2. Set Display unit = meter. In this exercise you will use "Meter" instead of using "Mile"
ArcGIS's raster manipulation tools are bundled with its Spatial Analyst extension. It's a big bundle so lets open ArcGIS's help system first to find out more about the tools. Open the ArcGIS help page by clicking Help > ArcGIS Desktop help from the menu bar. Click the index tab and type "Spatial analyst'. During the exercise, you'll find these online help pages helpful in clarifying the choices and reasoning behind a number of the steps that we will explore. Be sure, at some point, to take a look at the Overview section. (You can also open ArcGIS Help directly from the Windows operating system via: Start / Programs / ArcGIS / ArcGIS-Desktop-Help.)The Spatial Analyst module is an extension, so it must be loaded into ArcGIS separately.
To load the Spatial Analyst extension:
Although you just activated the "Spatial Analyst" extension, you also need to activate the "Spatial Analyst tool bar in order to use the extension (quite inconvenient!!!). To add the "Spatial Analyst" tool bar, go to View > Tool bars from the menu bar and click "Spatial Analyst"
Once the Spatial Analyst tool bar is loaded, a new main-menu heading called Spatial Analysis will be available whenever you launch the ArcGIS.
Setting Analysis Properties:
Before building and using raster data sets, we should set the grid cell sizes,
the spatial extent of our grid, and the 'no data' regions that we wish to
'mask' off. Let's begin by specifying a grid cell size of 100 meters and an
analysis extent covering all of Cambridge. To do this, click 'Spatial Analyst
> Option '. When the "Options" window pops up.
At this point, we don't need the old camborder coverage any longer. We used it to set the spatial extent for our grid work, but that setting is retained. To reduce clutter, you can remove the camborder layer from your Data Frame.
This part of the lab will demonstrate some techniques for filling in missing values in your data using interpolation methods. In this case, we will explore different ways to estimate housing values for Cambridge. Keep in mind that there is no perfect way to determine the value of a property.A city assessor's database of all properties in the city would generally be considered a good estimate of housing values because the data set is complete and maintained by an agency which has strong motivation to keep it accurate. This database does have drawbacks, though. It is updated at most every three years, people lobby for the lowest assessment possible for their property, and its values often lag behind market values by several years.
Recent sales are another way to get at the question. On the one hand, their numbers are believable because the price should reflect an informed negotiation between a buyer and a seller that results in the 'market value' of the property being revealed (if you are a believer in the economic market-clearing model). However, the accuracy of such data sets are susceptible to short-lived boom or bust trends, not all sales are 'arms length' sales that reflect market value and, since individual houses (and lots) might be bigger or smaller than those typical of their neighborhood, individual sale prices may or may not be representative of housing prices in their neighborhood.
Finally, the census presents us with yet another estimate of housing value--the median housing values aggregated to the block group level. This data set is vulnerable to criticism from many angles. The numbers are self-reported and only a sample of the population is asked to report. The benefit of census data is that they are cheaply available and they cover the entire country.
We will use sales89 and cambbgrp to explore some of these ideas. Let's begin with sales89.
The interpolated surface is shown thematically by shading each cell dark
or light depending upon whether that cell is estimated to have a lower
housing
value (lighter shades) or higher housing value (darker shades). Based on
the parameters we set, the cell value is an inverse-distance weighted
average
of the 12 closest sales. Since the power factor was set to the default (2),
the weights are proportional to the square of the distance. This interpolation
heuristic seems reasonable, but the surface extends far beyond the Cambridge
borders (all the way to the rectangular bounding box that covers Cambridge).
We can prevent the interpolation from computing values outside of the Cambridge
boundary by 'masking' off those cells that fall outside of Cambridge.
Do this
by adding a mask to the Analysis Properties as follows:
With this analysis mask set, interpolate the Realprice values in sales89
once again and save it as sales89_pw2-2. The sales89_pw2-2
should look like this:
(When using Quantile, 9 classes)
All the values inside Cambridge are the same as before, but the cells outside Cambridge are 'masked off'. [Note: When you 'interpolate to rater' using inverse distance weighted (IDW) in ArcMap, the thematic map display does a further smoothing of the computed values for each cell so the map in Fig. 4 looks more like a contour plot then the display of the discrete values for each grid cell - zoom in to see what I mean. But this is for display purposes only and the grid cell values saved in the attribute table are a single value for each grid cell as calculated via the IDW averaging.)
To get some idea of how the interpolation method will affect the result, redo the interpolation (using the same mask) with the power set to 1 instead of 2. Label this surface 'Sales89_pw1'. Use the identify tool to explore the differences between the values for the point data set, sales89, and the two raster grids that you interpolated. You will notice that the grid cell has slightly different values than the realprice in sales89, even if there is only one sale falling within a grid cell. This is because the interpolation process looks at the city as a continuous value surface with the sale points being sample data that gives an insight into the local housing value. The estimate assigned to any particular grid cell is a weighted average (with distant sales counting less) of the 12 closest sales (including any within the grid cell). In principle, this might be a better estimate of typical values for that cell than an estimate based only on the few sales that might have occurred within the cell. On your lab assignment sheet, write down the original and interpolated values for the grid cell in the upper left (NorthWest part of Cambridge) that contains the most expensive Realprice value in the original sale89 data set. Do you understand why the interpolated value using the power=1 model is considerably lower than the interpolated value using the power=2 model? There was only one sale in this cell and it is the most expensive 1989 sale in Cambridge. Averaging it with its 11 closest neighbors (all costing less) will yield a smaller number. Weighting cases by the square of the inverse-distance-from-cell (power=2) gives less weight to the neighbors and more to the expensive local sale compared with the case where the inverse distance weights are not squared (power=1).
Note: None of these interpolation methods is 'correct'. Each is plausible based on a heuristic algorithm that estimates the housing value at any particular point to be one or another function of 'nearby' sales prices. The general method of interpolating unobserved values based on location is called 'kriging' and the field of spatial statistics studies how best to do the interpolation (depending upon explicit underlying models of spatial variation). See, for example, S+ Spatial Stats: User's Manual for Windows and Unix, by Kaluzny, Bega, Cardoso, and Shelly, MathSoft, Inc., 1998 (ISBN: 0-387-98226-4) for further discussion of kriging techniques using the 'Spatial Statistics' add-on of a high-powered statistical package called S+ that is available on Athena.
Let's try the first approach. This approach requires blockgroup centroids, but we have already shown how to create them in earlier lectures and labs. The Cambridge block group centroids have been saved (along with a few of the columns from the cambbgrp shapefile) in the shapefile cambbgrp_point. Make sure that layer has been added to your Data Frame and then do the following:
Examine its attribute table. It has 63 unique values (including 0) --one for each unique value of med_hvalue in the original cambbgrp coverage. The attribute table for grid layers contains one row for each unique value (as long as the cell value is an integer and not a floating point number!) and a count column is included to indicate how many cells had that value. Grid layers such as hvalue_points have floating point values for their cells and, hence, no attribute table is available. (You could reclassify the cells into integer value ranges if you wished to generate a histogram or chart the data.)
Finally, let's smooth this new grid layer using the Spatial Analyst > Neighborhood Statistics option. Let's recalculate each cell value to be the average of all the neighboring cells - in this case we'll use the 9 cells (a 3x3 matrix) in and around each cell. To do this, choose the following settings: (they are the defaults)
Click 'OK' and the hvalue_poly layer will be added on your data frame.
Change the classify method to "Quantile". You should get something
like this:
(When using Quantile, 8 classes)
Note that selecting rows in the attribute table (for hvalue_poly) would highlight
the corresponding cells on the map. However, that attribute table is
not accessible since the grid cell values are floating point numbers
and ArcMAP makes the attribute table available for grid layers only
if the values are integers. You could use the int() function to
create a new grid cell layer whose values are obtained by rounding
the hvalue_poly values to integers. Instead, use the 'identify'
tool to click in the high value parts of Cambridge in order to
identify the highest valued
grid cells. Find the cell containing the
location of the highest price sales89 home in the northwest part of Cambridge.
What is the interpolated value of that cell using the two methods based on
med_hvalue?
Many other variations on these interpolations are possible. For example, we know that med_hvalue is zero for several block groups--presumably those around Harvard Square and MIT where campus and commercial/industrial activities results in no households residing in the block group. Perhaps we should exclude these cells from our interpolations--not only to keep the 'zero' value cells from being displayed, but also to keep them from being included in the neighborhood statistics averages. Copy and paste the cambbgrp.shp layer and use the query tools in the Layer Properties > Definition Query tab to exclude all block groups with med_hvalue = 0 (which means include all block groups with med_hvalue > 0). Now, recompute the polygon-based interpolation (including the neighborhood averaging) and call this grid layer 'hvalue_non0'. Select the same color scheme as before. In the data window, turn off all layers except the original camborder layer (displayed in a non-grayscale color like blue) and the new hvalue_non0 layer that you just computed. The resulting view window should look something like this:
(When using Quantile, 9 classes)
Notice the no-data cambordergd cells sticking out from under the new surface and notice that the interpolated values don't fall off close to the no-data cells as rapidly as they did before (e.g., near Harvard Square). You'll also notice that the low-value categories begin above $100,000 rather than at 0 the way they did before. This surface is about as good an interpolation as we are going to get using the block group data.Comment briefly on some of the characteristics of this interpolated surface of med_hvalue compared with the ones derived from the sales89 data. Are the hot-spots more concentrated or diffuse? Does one or another approach lead to a broader range of spatial variability?
Finally, let us consider combining the interpolated housing value surfaces computed using the sales89 and med_hvalue methods. ArcGIS provides a 'Raster calculator' option that allows you to create a new grid layer based on a user-specified combination of the values of two or more grid cell layers. Let's compute the simple arithmetic average of the sale89_pw2-2 grid layer and the med_hvalue_non0 layer. Select Spatial Analyst > Raster Calculator and enter this formula:([hvalue_non0] + [sale89_pw2-2]) / 2and click Evaluate.
The result is a new grid which is the average of the two estimates and looks something like this:
(When using Quantile, 9 classes)
The map calculator is a powerful and flexible tool. For example, if you felt the sales data was more important than the census data, you could assign it a higher weight with a formula such as:
([hvalue_non0] * 0.7 + ( [Sales_Price] * 1.3) / 2
The possibilities are endless--and many of them won't be too meaningful! Think about the reasons why one or another interpolation method might be misleading, inaccurate, or particularly appropriate. For example, you might want to compare the mean and standard deviation of the interpolated cell values for each method and make some normalization adjustments before combining the two estimates using a simple average. For the lab assignment, however, all you need do at this point is determine the final interpolated value (using the first map-calculator formula) for the cell containing the highest price sales89 house (in the Northwest corner of Cambridge). Write this value on the assignment sheet.
VI. Combining Grid Layers Using Weighted Sum in ModelBuilder
Next, we can 'automate' some of these raster analyses by creating a simple ModelBuilder model of one or another of the above steps. We can do an identical analysis, or we can refine things somewhat using additional capabilities of the "Weighted Overlay Tool"
Setup
To create a new ModelBuilder model, first make sure that you know where ArcGIS is going to save your model. The default location can be found by going under the main menubar to Tools->Options, and in the resulting dialog box, looking at the "Geoprocessing" tab. The third item there allows you to specify the location of your 'My Toolboxes' folder. The default location on MIT's network is H:\WinData\Application Data\ESRI\ArcToolbox." This should allow you to access the same model from different workstations, but if you want to share (or back up!) a model, it is good to know where it is located. You can't directly "open" or "save" ModelBuilder models. However you can move them arround in ArcCatalog. In general, if you are creating models specific to a particular project, consider putting them in a directory near the project data.
To Create a New ModelBuilder Model, first create a "Toolbox" to contain it. Open the main ArcGIS toolbox (red tools icon). Then right mouse on ArcToolbox to get the contextual menu shown, and select New Toolbox.
Once you have a container located in a writeable folder, variously called Toolbox (the default) or a name you choose (such as 'RasterAnalysis'), then you can create a new Model within it.
This will bring up and empty Model diagram window:
You should then be able to drag and drop your two grids (called camb_sale_idw and camb_val_idw in the figure below) from the main map with "Table of Contents" into the Model diagram window. You can also select layers to add from disk using the standard ArcGIS "yellow Plus" icon.
One you have your input data, you need to select the geoprocessing operator you want to use. In this case, it is the "Weighted Sum " (under Spatial Analyst Tools, Overlay in the toolbox). Remember that if you cannot find a tool, there is an index and a search available. Drag and drop the weighted overlay operator onto the ModelBuilder window.
After dragging and dropping the 'weighted sum' operator, the model window will look something like this:
Next, use the "link tool" (second from the right) to link from source data to the operator. When your model is correctly connected, the operator will turn yellow to indicate that it has all required inputs. Once you make the connection (see below), double click on the Weighted Overlay operator. This brings up a dialog box in which you can specify the weights to use for each input grid cell value. Click the triangular 'run' button to run the entire model.
Try to create a weighted overlay in which the med_hvalue is weighted at 70% influence where non-0, and the sales89_pw2-2 layer interpolated from the sales_89 point has a 30% influence. When the census-derived data is 0, you want the weighted overlay tool to fill in with sales_89 estimates. Getting the weights to be handled correctly for grid cells that are missing in one of the layers can be tricky and may require adding additional steps to the model. Also, using map algebra to combine raster layers can get tricky when you need to rescale grid values or convert them to integer values before doing the map algebra that you want. (ArcMap provides additional Math functions to help in this regard. See, for example, the Int() function to convert floating point grid cell values to integers.) For this exercise, you do not need to turn in any results from your use of Model Builder. However, we will make further use of Model Builder in Homework Set #3.
-----
We have only scratched the surface of all the raster-based interpolation and analysis tools that are available. If you have extra time, review the help files regarding the Spatial Analyst extension and work on those parts of the homework assignment that ask you to compute a population density surface for youths. Another suggestion is to use model builder to cut out non-residential areas and reallocate population to the residential portions of the block groups - then compute population density.
Created by Raj Singh and Joseph Ferreira.
Modified for 1999-2008 by Joseph Ferreira, Thomas H. Grayson, Jeeseong Chung, Jinhua Zhao, Xiongjiu Liao, Diao Mi, Michael Flaxman, and Yang Chen.
Last Modified: October 27, 2008 by Joe Ferreira.
Back to the 11.520
Home Page.
Back to the CRON Home Page.