Introduction

Property tax analysis and sale ratios studies are highly standardized processes ripe for automation. This package implements the IAAO standards and generates a sale ratios study in seconds from user-provided data.

This tool has been critical for the work of the Center for Municipal Finance as we produce thousands of sale ratios studies annually. This open-source tool incorporates what we have learned in this work and is designed to enable Assessors and members of the public to analyze their own data.

How does this work?

There are four steps to utilize this report:

  1. Install R & R Studio
  2. Install devtools and cmfproperty
  3. Preprocess your data
  4. Use cmfproperty to create ratios and run make_report

Package Installation (Steps 1 and 2)

cmfproperty uses the R programming language. R is an open-source language which can be easily installed on any computer. We recommend that you install RStudio and R.

Installing cmfproperty requires the devtools package which can be installed as follows:

install.packages("devtools")

Once devtools is installed, our package can be installed from our github repository as follows:

devtools::install_github("cmf-uchicago/cmfproperty")

Data Preprocessing (Step 3)

To use this package we need to create a data frame where each row is the sale of individual property matched to its assessment at the time of sale. This process is highly dependent on how your data is structured. Examples can be found in Data Preprocessing.

Your final data set must have the following columns:

  • Sale Price
  • Assessed Value
  • Sale Year

We highly recommend that you also include a column with a unique identifier such as parcel number or pin number.

Running the Report (Step 4)

After gathering data in this form, we have to identify the three required columns (sales, assessments, and sale year) for the package using cmfproperty::reformat_data.

ratios <-
  cmfproperty::reformat_data(
    data = cmfproperty::example_data,
    sale_col = "SALE_PRICE",
    assessment_col = "ASSESSED_VALUE",
    sale_year_col = "SALE_YEAR",
  )
#> [1] "Filtered out non-arm's length transactions"
#> [1] "Inflation adjusted to 2019"
head(as.data.frame(ratios))
#>              PIN SALE_YEAR SALE_PRICE ASSESSED_VALUE TAX_YEAR     RATIO
#> 1 17273100931118      2015      53000          33860     2015 0.6388679
#> 2 18013090421010      2018      80000          60390     2018 0.7548750
#> 3 12111190201042      2018     118000         108300     2018 0.9177966
#> 4 13093160601015      2017     125500          87200     2017 0.6948207
#> 5 14322110150000      2018    3705000        3670740     2018 0.9907530
#> 6 27021200080000      2016     345000         267280     2016 0.7747246
#>   arms_length_transaction SALE_PRICE_ADJ ASSESSED_VALUE_ADJ
#> 1                       1       59209.48           37827.04
#> 2                       1       82313.03           62136.05
#> 3                       1      121411.71          111431.26
#> 4                       1      132854.54           92310.09
#> 5                       1     3812122.01         3776871.45
#> 6                       1      376080.37          291358.73

We denote data processed by cmfproperty::reformat_data as ratios throughout the documentation. ratios includes the additional calculated fields needed to complete the study.

There’s one more step to get the automated report:

cmfproperty::make_report(ratios, 
                         jurisdiction_name = "Cook County, Illinois")

The report will be saved in your working directory or a specific directory can be provided.

cmfproperty::make_report(ratios, 
                         jurisdiction_name = "Cook County, Illinois",
                         output_dir = "~/Desktop/")

Check out an example report here.