Learn R Programming

Multilateral

Overview

The multilateral package provides one key function, that is multilateral(). The user provides the necessary attributes of a dataset to calculate their choice of multilateral methods.

See vignette for further information.

For some specific index calculation methods this package has been heavily influenced by Graham White’s IndexNumR package.

Installation

devtools::install_github("MjStansfi/multilateral")

library(multilateral)

Usage

See bottom for all index and splice methods.

library(multilateral)
library(ggplot2)

tpd_index <- multilateral(period = turvey$month,
                          id = turvey$commodity,
                          price = turvey$price,
                          quantity = turvey$quantity,
                          splice_method = "geomean",
                          window_length = 13,
                          index_method = "TPD")

plot <- ggplot(tpd_index$index)+geom_line(aes(x = period, y = index))+theme_bw()

print(plot)

Further detail

The function returns a list object containing

  • index: the continuous spliced index,
  • index_windows: each individual window’s index,
  • splice_detail: splicing information.
str(tpd_index) 
#> List of 3
#>  $ index        :Classes 'data.table' and 'data.frame':  48 obs. of  3 variables:
#>   ..$ period   : Date[1:48], format: "1970-01-31" "1970-02-28" ...
#>   ..$ index    : num [1:48] 1 0.971 0.949 1.047 1.308 ...
#>   ..$ window_id: int [1:48] 1 1 1 1 1 1 1 1 1 1 ...
#>   ..- attr(*, ".internal.selfref")=<externalptr> 
#>  $ index_windows:Classes 'data.table' and 'data.frame':  468 obs. of  3 variables:
#>   ..$ period   : Date[1:468], format: "1970-01-31" "1970-02-28" ...
#>   ..$ index    : num [1:468] 1 0.971 0.949 1.047 1.308 ...
#>   ..$ window_id: int [1:468] 1 1 1 1 1 1 1 1 1 1 ...
#>   ..- attr(*, ".internal.selfref")=<externalptr> 
#>  $ splice_detail:Classes 'data.table' and 'data.frame':  35 obs. of  5 variables:
#>   ..$ period                : Date[1:35], format: "1971-02-28" "1971-03-31" ...
#>   ..$ latest_window_movement: num [1:35] 0.97 1.012 1.097 1.195 0.949 ...
#>   ..$ revision_factor       : num [1:35] 1 1 1 1.01 1.02 ...
#>   ..$ update_factor         : num [1:35] 0.972 1.013 1.099 1.205 0.966 ...
#>   ..$ window_id             : int [1:35] 2 3 4 5 6 7 8 9 10 11 ...
#>   ..- attr(*, ".internal.selfref")=<externalptr> 
#>  - attr(*, "class")= chr [1:2] "list" "multilateral"
#>  - attr(*, "params")=List of 6
#>   ..$ index_method    : chr "TPD"
#>   ..$ window_length   : num 13
#>   ..$ splice_method   : chr "geomean"
#>   ..$ chain_method    : NULL
#>   ..$ check_inputs_ind: logi TRUE
#>   ..$ matched         : NULL

The index_windows returns all individual windows indexes before they were spliced. Below shows how you could (roughly) visualise this data

library(dplyr)
#> Warning: package 'dplyr' was built under R version 4.0.5
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

#Get splice details to relevel each new index
update_factor <- tpd_index$splice_detail%>%
  mutate(update_factor  = cumprod(update_factor))%>%
  select(window_id, update_factor)


index_windows <- merge(tpd_index$index_windows,update_factor)

index_windows <-index_windows%>%mutate(updated_index = index*update_factor)
windows_plot <- ggplot(index_windows)+
  geom_line(aes(x = period, y = updated_index, group = window_id, colour = window_id))+
  theme_bw()

print(windows_plot)

splice_detail gives the user a break down of how the given periods index number is made up of both a ‘revision factor’ (from splicing) and the latest periods movement. This can be useful for diagnostics.

head(tpd_index$splice_detail)
#>        period latest_window_movement revision_factor update_factor window_id
#> 1: 1971-02-28              0.9698029        1.002095     0.9718351         2
#> 2: 1971-03-31              1.0120421        1.001120     1.0131760         3
#> 3: 1971-04-30              1.0973656        1.001151     1.0986290         4
#> 4: 1971-05-31              1.1950159        1.008111     1.2047081         5
#> 5: 1971-06-30              0.9490383        1.017805     0.9659356         6
#> 6: 1971-07-31              1.0336941        1.004028     1.0378582         7

Below shows one way in which you could visualise contribution of revision factor verses the latest movement.

library(dplyr)

#Period of interest
splice_detail <- tpd_index$splice_detail[period=="1973-02-28"]

#Log information to determine contribution
lwm_log <- log(splice_detail$latest_window_movement)
rf_log <- log(splice_detail$revision_factor)
sum_log <- sum(lwm_log+rf_log)

lwm_contrib <- lwm_log/sum_log
rf_contrib <- rf_log/sum_log


ggplot(mapping = aes(fill=c("Latest movement","Revision factor"),
                     y=c(lwm_contrib,rf_contrib),
                     x="1973-02-28"))+
  geom_bar(position="stack", stat="identity", width = 0.2)+
  theme_bw()+
  xlab("Date")+
  ylab("% Contribution")+
  labs(fill = "Contributor")+
  scale_fill_manual(values = c("#085c75","#d2ac2f"))

Options

See vignette for further information.

Method

Name

Requires ID

Requires Features

Requires Quantity

Requires Weight

Can Restrict to Matched Sample

TPD

Time Product Dummy

TRUE

FALSE

FALSE

TRUE

FALSE

TDH

Time Dummy Hedonic

FALSE

TRUE

FALSE

TRUE

FALSE

GEKS-J

GEKS Jevons

TRUE

FALSE

FALSE

FALSE

TRUE

GEKS-T

GEKS Tornqvist

TRUE

FALSE

TRUE

FALSE

TRUE

GEKS-F

GEKS Fisher

TRUE

FALSE

TRUE

FALSE

TRUE

GEKS-IT

GEKS Imputation Tornqvist

TRUE

TRUE

TRUE

FALSE

TRUE

splice_method

geomean

window

movement

geomean_short

half

chain_method

geomean

window

movement

half

Copy Link

Version

Install

install.packages('multilateral')

Monthly Downloads

63

Version

1.0.0

License

GPL (>= 3)

Issues

Pull Requests

Stars

Forks

Maintainer

Matthew Stansfield

Last Published

April 20th, 2022

Functions in multilateral (1.0.0)

TDH

Time Dummy Hedonic (TDH)
jevons_t

Jevons
GEKS

GEKS
IT_t

Imputation Tornqvist (GEKS-IT), also known as the ITRYGEKS (Imputation Tornqvist Rolling Year GEKS)
get_window_periods

Get whole windows period index
get_index_list

Get index list
TPD

Time Product Dummy (TPD), also known as Fixed Effects Window Splice (FEWS)
get_chain_index_df

Get chained index df and splice information
multilateral

Multilateral price index calculation
splice_update

Splice update
get_index_df

Get spliced index df and splice information
fisher_t

Fisher
get_window_st_period

Get window start period index
synthetic_gfk

Synthetic scanner data for one consumer electronic product
fixed_t

Laspeyres or Paasche
turvey

Artificial prices of seasonal products Data created by R. Turvey
tornqvist_t

Tornqvist
gm_mean

Geometric mean
check_inputs

All checks
fill_missing

fill missing data points
index_model

Index model