
Indicele prețurilor de consum (IPC) este o măsură utilizată pe scară largă a prețurilor bunurilor și serviciilor achiziționate de gospodării. Este instrumentul principal pentru urmărirea inflației și a modificărilor costului vieții în timp. Indicele este construit din colectări lunare de prețuri pe un „coș” de bunuri și servicii dintr-un eșantion de unități de vânzare cu amănuntul și servicii. Datele istorice ale IPC sunt ușor de descărcat
  O caracteristică cheie a IPC este că prețurile sunt ajustate pentru schimbările de calitate. Dacă prețul oglinzii laterale a unei mașini crește cu 200 de dolari, dar 120 de dolari din această creștere reflectă că oglinda devine „inteligentă” mai degrabă decât „proastă”, doar cei 80 de dolari rămași sunt considerați inflație. În mod similar, dacă prețul unei proceduri medicale crește deoarece echipamentele noi îmbunătățesc calitatea îngrijirii, partea atribuibilă calității îmbunătățite este eliminată din calculul inflației. Consumatorii încă plătesc pentru aceste îmbunătățiri ale calității, indiferent dacă le doresc sau nu, așa că, în multe cazuri, IPC subestimează creșterea pură a costurilor.
  Există opt categorii majore ale IPC și fiecare categorie are propriul indice: alimente și băuturi, locuințe, îmbrăcăminte, transport, îngrijire medicală, recreere, educație și comunicare și altele. Acestea sunt ponderate pentru a forma IPC general, cu cele mai mari ponderi ca locuințe la aproximativ 44% din total, transporturi la 17%, alimente și băuturi la 14% și îngrijire medicală la 8%. (Fiecare dintre acestea este în continuare subdivizată în propriul index; de exemplu, Altele include îngrijirea personală, iar Îngrijirea personală are indici separați pentru produse cosmetice, parfumuri, preparate pentru baie și unghii.) Desigur, greutățile nu vor reflecta procentele dvs. din ceea ce cumpărați.
  Descărcarea datelor istorice CPI de la FRED (Federal Reserve Bank of St. Louis) a fost mai ușoară decât mă așteptam. Aveți nevoie de o cheie API pe care o puteți obține de la https://fredaccount.stlouisfed.org/login
  Iată un grafic cu linii care arată creșterea cumulată a IPC pentru IPC general și pentru fiecare dintre cele opt categorii majore până în iunie 2026, indexată până în decembrie 2016 = 1,00. IPC global a crescut cu 37,1% din decembrie 2016. Locuințele (chirie, asigurări, energie etc.) au crescut cel mai mult la 44,8%. Transportul (achiziții de vehicule, combustibil, întreținere, asigurări, tarife de transport public) este următorul, cu 43,5%. Produsele alimentare (bacănii și restaurante) au crescut cu 39,9%. Asistența medicală este mai mică la 25,9%. Asistența medicală include cheltuielile din buzunar pentru furnizori, spitale și asigurări, dar exclude primele de asigurări de sănătate plătite de angajator și de guvern.


IPC-urile exclud o mulțime de lucruri precum modificările de calitate pe care le-am menționat mai sus și alte articole pe care le puteți plăti, dar pe care guvernul nu le clasifică drept cheltuieli personale. Cu toții simțim că prețul alimentelor noastre crește – am discutat anterior despre acest lucru în produse alimentare . Fiecare categorie are propriile sale motive pentru care este în creștere; Voi lăsa acea discuție pe seama economiștilor, cu excepția faptului că costul energiei afectează o mulțime de articole din costul de producție și livrare.
La fel ca multe măsuri generale, IPC este o încercare de a estima costul total al bunurilor și serviciilor. Dar ceea ce contează în cele din urmă pentru tine este costul real al lucrurilor tu cumpăra.
Iată codul meu R:
library(tidyquant)
library(dplyr)
library(tidyr)
library(lubridate)
library(ggplot2)
library(ggrepel) # repel overlapping text labels
# Set your API environment variable
Sys.setenv(FRED_API_KEY = "xxxx")
# Define the official FRED database tracking codes
cpi_series <- c(
"CPIAUCSL", "CPIFABSL", "CPIHOSSL", "CPIAPPSL",
"CPITRNSL", "CPIMEDSL", "CPIRECNS", "CPIEDUNS", "CPIOGSNS"
)
# Download and clean data vectors
raw_data <- tq_get(cpi_series, get = "economic.data") # get from FRED
# 2. Clean, Filter, and Perform Group-Indexing
cpi_processed <- raw_data %>%
mutate(
Year = year(date),
Month = month(date)
) %>%
# Keep all Decembers from 2015 onward OR strictly isolate June 2026
filter((Month == 12 & Year >= 2015) | (Year == 2026 & Month == 6)) %>%
# Convert raw tracking codes into readable titles
mutate(Category = case_when(
symbol == "CPIAUCSL" ~ "Overall CPI",
symbol == "CPIFABSL" ~ "1. Food & Bev",
symbol == "CPIHOSSL" ~ "2. Housing",
symbol == "CPIAPPSL" ~ "3. Apparel",
symbol == "CPITRNSL" ~ "4. Transportation",
symbol == "CPIMEDSL" ~ "5. Medical Care",
symbol == "CPIRECNS" ~ "6. Recreation",
symbol == "CPIEDUNS" ~ "7. Education & Comm",
symbol == "CPIOGSNS" ~ "8. Other Goods"
)) %>%
# Chronologically sort each group, then anchor base-100 to the first row (Dec 2015)
group_by(Category) %>%
arrange(date, .by_group = TRUE) %>%
mutate(Indexed_Value = (price / first(price)) * 100) %>%
ungroup() %>%
# Convert Timeline to ordered categories for a clean discrete X-Axis
mutate(Period = if_else(Month == 6, paste0(Year, " (June)"), as.character(Year))) %>%
mutate(Period = factor(Period, levels = unique(Period(order(date)))))
# 3. Isolate final data point rows for the text tags
label_data <- cpi_processed %>%
group_by(Category) %>%
filter(date == max(date)) %>%
ungroup()
# 4. Generate the Chart with the Categorical String Axis Baseline
ggplot(cpi_processed, aes(x = Period, y = Indexed_Value, color = Category, group = Category)) +
geom_line(aes(linewidth = ifelse(Category == "Overall CPI", 1.5, 0.8))) +
geom_point(size = 2) +
# Non-overlapping direct text labels
geom_text_repel(
data = label_data,
aes(label = paste0(Category, " (", round(Indexed_Value, 1), ")")),
nudge_x = 0.5,
direction = "y",
hjust = 0,
segment.color = "grey50",
segment.size = 0.4,
force = 2,
fontface = "bold",
size = 4 # millimters
) +
# High-contrast visual color mapping matrix
scale_color_manual(values = c(
"Overall CPI" = "#000000",
"1. Food & Bev" = "#E64B35",
"2. Housing" = "#56B4E9",
"3. Apparel" = "#009E73",
"4. Transportation" = "#4D8805",
"5. Medical Care" = "#0072B2",
"6. Recreation" = "#D55E00",
"7. Education & Comm" = "#CC79A7",
"8. Other Goods" = "#999999"
)) +
# Format plot margins to prevent label cropping
scale_x_discrete(expand = expansion(mult = c(0.05, 0.35))) +
scale_linewidth_identity() +
labs(
title = "10.5-Year Cumulative CPI Growth Comparison",
subtitle = "Base Index: December 2016 = 100",
x = "Reporting Period",
y = "Indexed Value (Relative to 100)"
) +
theme_minimal(base_size = 12) +
theme(
legend.position = "none",
panel.grid.minor = element_blank(),
text = element_text(face = "bold"),
plot.title = element_text(face = "bold", size = 14),
axis.text = element_text(face = "bold")
)
# 5. Save the final graphic output file
# ggsave("cpi_growth_comparison.png", width = 12, height = 7, dpi = 300, bg = "white")
# Extract and print the final 10.5-year cumulative values
final_column_summary <- cpi_processed %>%
filter(date == max(date)) %>%
select(Category, Indexed_Value) %>%
mutate(Indexed_Value = round(Indexed_Value, 2)) %>%
arrange(desc(Indexed_Value)) # Sorts from highest inflation to lowest
print(as.data.frame(final_column_summary))
Sfârşit
