Instructions
Ces instructions décrivent un moyen simple de construire l’indice des prix des widgets, mais n’hésitez pas à utiliser une approche différente si c’est plus facile. Le but est de comprendre le processus, plutôt que de concevoir le système le plus efficace en termes de calcul.
Exécutez le code suivant pour récupérer tous les fichiers de données et les mettre dans votre environnement de travail. Notez que ces données ne sont pas parfaites. N’oubliez pas de vérifier vos calculs intermédiaires pour vous assurer que tout est comme prévu (par exemple, avec la fonction summary).
source ('https://raw.githubusercontent.com/ppd-dpp/cours-indices-des-prix/master/scripts/get_data.R')Le dplyr, tidyr, gpindex et les packages calpr seront utilisés dans ce module. Installez-les comme suit s’ils ne sont pas déjà installés. (Astuce: il vaut la peine de parcourir la documentation dans les packages gpindex etcalpr.)
install.packages(c("dplyr", "tidyr", "gpindex", "devtools"))
devtools::install_github("ppd-dpp/calpr")Faites les poids
À l’aide du fichier «poids», créez un ensemble de poids qui donne la part de valeur de chaque produit vendu dans chaque province chaque année, et un autre qui donne la part de valeur de tous les produits vendus dans chaque province chaque année. Ce premier ensemble de poids sera utilisé pour agréger les indices élémentaires pour obtenir 10 indices au niveau de la province, et le deuxième ensemble de poids sera utilisé pour agréger les indices au niveau de la province en un indice national. Il devrait y avoir 200 poids dans le premier fichier et 20 poids dans le second fichier.
library(dplyr) library(tidyr) library(gpindex) library(calpr) # Make provincial weights weights_prov <- weights %>% group_by(year, province) %>% # group all sales values by reference year and province summarize(weight = sum(weight)) %>% # value of all sales in each province in each year mutate(share_prov = weights_scale(weight)) %>% # scale to sum to 1 select(-weight) # drop the weight column as it won't be needed again # Make product weights weights_prod <- weights %>% # your code here %>% mutate(share_prod = weights_scale(weight)) %>% select(-weight)Calculez la géomée du produit K
En utilisant les microdonnées pour le produit K dans le fichier
dat_micro, calculez la moyenne géométrique des prix dans chaque province pour chaque mois de chaque année de référence. Ce fichier devrait contenir 250 géomées.dat_micro <- dat_micro %>% mutate(period = year_month(period)) %>% # turn transaction dates into month-by-year dates # your code here %>% summarize(geomean = mean_geometric(price)) # calculate the geometric avergageCalculez la géomée des produits A à J
En utilisant les données du système de prix globaux dans
dat_gps, calculez la moyenne géométrique des prix pour chaque produit dans chaque province dans chaque mois de chaque année de référence, pour les produits A à J. Combinez ces données avec les données préparées à l’étape 2. Le fichier résultant devrait avoir 2 500 géomées.dat_index <- dat_gps %>% # your code here %>% gather(key = "quote", value = "price", price1:price3) %>% # melt into a long dataset group_by(province, product, year, period) %>% # your code here %>% bind_rows(dat_micro) # append to dat_microCalculer les indices élémentaires période sur période
Pour chaque produit dans chaque province dans chaque année de référence, calculez le rapport des moyennes géométriques calculées à l’étape 3, en vous assurant d’avoir un prix relatif de 1 en janvier 2018 et janvier 2019 (janvier 2019 sera le mois de liaison lorsqu’il est le temps de chaîner l’index.)
dat_index <- dat_index %>% # your code herePrix mettre à jour les poids des produits
Fusionnez les pondérations au niveau du produit par province de l’étape 1 dans l’ensemble de données créé à l’étape 4 et utilisez les indices élémentaires période sur période pour mettre à jour les pondérations.
dat_index <- dat_index %>% # your code here %>% mutate(share_prod_u = weights_update(cumprod(lag(rel, default = 1)), share_prod, scale = FALSE)) # price update the weightsCalculez l’indice provincial
Calculez un indice arithmétique pour chaque province au cours de chaque année de référence, à l’aide des indices élémentaires d’une période à l’autre et des pondérations mises à jour des prix des étapes 4 et 5.
index_prov <- dat_index %>% group_by(period, year, province) %>% # your code hereCalculez l’indice au niveau du Canada
Fusionnez les pondérations provinciales à l’étape 1 avec les indices provinciaux de l’étape 6 pour calculer un indice canadien pour chaque année de référence.
index <- index_prov %>% # your code here group_by(period, year) %>% # your code here mutate(province = 0) %>% # province 0 is the Canada-level bind_rows(index_prov)Chaîne des indices 2018 et 2019
Enchaînez les indices au niveau de la province de 2018 et 2019 et du niveau du Canada ensemble, en utilisant janvier 2019 comme mois de liaison, pour obtenir un indice de janvier 2018 à décembre 2019 avec janvier 2018 comme période de base (généralement, la période de base serait une année civile , mais il n’y a que 24 mois de données).
index_chain <- index %>% group_by(province) %>% # your code here group_by(period, province) %>% summarize(index = unique(index)) %>% # remove the duplicate rows for the link month ungroup()
Le résultat final devrait être un fichier avec 11 indices de prix, un pour chaque province et un indice national, de janvier 2018 à décembre 2019, avec janvier 2018 comme période de base (= 100).
La validation de l’indice au niveau du Canada nécessite de mettre l’indice du groupe canadien d’analyse économique réglementaire et l’indice Monsterweb sous une forme commune.
Trimestre par rapport aux indices mensuels
Transformez l’indice que vous venez de créer et l’indice du groupe Analyse réglementaire de la réglementation canadienne dans
index_creaen un indice trimestriel, avec le 1er trimestre 2019 comme période de base, en prenant la moyenne des trois valeurs d’indice de chaque trimestre.my_index <- index_chain %>% filter(province == '0') %>% # keep only the Canada-level index mutate(period = year_quarter(period)) %>% group_by(period) %>% summarize(index = mean(index)) %>% mutate(index = index/index[period == '2019-01-01'] * 100) # rebase to Jan 2019 index_crea <- index_crea %>% # your code here %>% # your code here %>% # your code here %>% # your code here %>% # your code here %>% index_mw <- index_mw %>% # your code hereAjoutez les trois indices ensemble
Rassemblez les indices de l’étape 9 dans un ensemble de données avec l’index de Monsterweb dans
index_mw. Ils devraient tous être trimestriels avec le premier trimestre 2019 comme période de base (= 100).