$value
[1] "11%"
$caption
[1] "Unchanged since May 2025"
$color
[1] "primary"
Pakistan Inflation Dashboard
Underlying Inflation Measures & Monetary Policy Tracker
Overview
Column
$value
[1] "5.4%"
$caption
[1] "Policy Rate - Headline CPI"
$color
[1] "success"
Column
Inflation Trends & Monetary Policy Rate
# Create ordered factor for proper month ordering
historical_data_ordered <- historical_data %>%
mutate(month_ordered = factor(month, levels = month))
plot_ly(historical_data_ordered) %>%
add_trace(
x = ~month_ordered,
y = ~headline,
type = 'scatter',
mode = 'lines+markers',
name = 'Headline CPI',
line = list(color = '#3b82f6', width = 3),
marker = list(size = 4)
) %>%
add_trace(
x = ~month_ordered,
y = ~core,
type = 'scatter',
mode = 'lines+markers',
name = 'Core CPI',
line = list(color = '#f59e0b', width = 2),
marker = list(size = 4)
) %>%
add_trace(
x = ~month_ordered,
y = ~food,
type = 'scatter',
mode = 'lines+markers',
name = 'Food Inflation',
line = list(color = '#10b981', width = 2),
marker = list(size = 4)
) %>%
add_trace(
x = ~month_ordered,
y = ~policy,
type = 'scatter',
mode = 'lines',
name = 'Policy Rate',
line = list(color = '#ef4444', width = 3, dash = 'dash')
) %>%
layout(
xaxis = list(
title = "",
tickangle = -45,
categoryorder = "trace",
tickfont = list(size = 10)
),
yaxis = list(
title = "Percentage (%)",
titlefont = list(size = 12)
),
hovermode = 'x unified',
legend = list(
x = 0.02,
y = 0.98,
bgcolor = 'rgba(255, 255, 255, 0.8)',
bordercolor = '#e2e8f0',
borderwidth = 1
),
margin = list(l = 50, r = 20, t = 40, b = 80)
)Pakistan’s policy rate has been cut from 22% to 11% since June 2024, as inflation dropped from a peak of nearly 30% to current levels. The State Bank maintained rates at 11% since May 2025 due to energy price adjustments and flood-related risks.
Inflation Measures
Row
Current Inflation Measures (September 2025)
# Create formatted table
table_data <- inflation_measures %>%
mutate(
Measure = name,
Description = description,
Current = paste0(sprintf("%.1f", current), "%"),
Change = paste0(ifelse(change > 0, "+", ""), sprintf("%.1f", change), "pp"),
Target = paste0(sprintf("%.1f", target), "%"),
Status = status
) %>%
select(Measure, Description, Current, Change, Target, Status)
# Color mapping
color_map <- c(
"Within Target" = "#d4edda",
"Below Target" = "#d1ecf1",
"Above Target" = "#fff3cd",
"Significantly Above" = "#f8d7da"
)
datatable(
table_data,
options = list(
dom = 't',
pageLength = 10,
ordering = FALSE,
columnDefs = list(
list(width = '200px', targets = 0),
list(width = '300px', targets = 1),
list(className = 'dt-center', targets = 2:5)
)
),
rownames = FALSE,
class = 'cell-border stripe'
) %>%
formatStyle(
'Status',
backgroundColor = styleEqual(
names(color_map),
unname(color_map)
),
fontWeight = 'bold'
) %>%
formatStyle(
'Current',
fontWeight = 'bold',
fontSize = '16px'
)Row
Target Range Explanation
Understanding the Status Colors:
🟢 Within Target (Green): Inflation is within ±0.5 percentage points of the target, indicating price stability.
🔵 Below Target (Blue): Inflation is more than 0.5pp below target, which may indicate weak demand or deflationary pressures.
🟡 Above Target (Yellow): Inflation is 0.5-2.0pp above target, suggesting moderate price pressures that require monitoring.
🔴 Significantly Above (Red): Inflation is more than 2.0pp above target, indicating substantial price pressures requiring policy action.
The State Bank of Pakistan targets inflation in the range of 5-7% to maintain price stability while supporting economic growth.
Components
Row
Inflation by Component Category
# Reorder items by value for better visualization
component_data_sorted <- component_data %>%
arrange(value) %>%
mutate(
item_ordered = factor(item, levels = item),
color = case_when(
value > 10 ~ "#dc3545",
value > 0 ~ "#ffc107",
TRUE ~ "#28a745"
)
)
plot_ly(component_data_sorted) %>%
add_trace(
y = ~item_ordered,
x = ~value,
type = 'bar',
orientation = 'h',
marker = list(color = ~color),
text = ~paste0(sprintf("%.1f", value), "%"),
textposition = 'outside',
textfont = list(size = 11),
hovertemplate = paste(
'<b>%{y}</b><br>',
'Change: %{x:.1f}%<br>',
'<extra></extra>'
)
) %>%
layout(
xaxis = list(
title = "Year-over-Year Change (%)",
titlefont = list(size = 12)
),
yaxis = list(
title = "",
tickfont = list(size = 10)
),
showlegend = FALSE,
margin = list(l = 150, r = 50, t = 40, b = 50)
)Row
Food & Beverages
food_items <- component_data %>%
filter(category == "Food & Beverages")
kable(
food_items %>% select(Item = item, `YoY Change (%)` = value),
align = c('l', 'r'),
format = 'html'
) %>%
kableExtra::kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = FALSE
)| Item | YoY Change (%) |
|---|---|
| Perishable Foods | -2.5 |
| Non-Perishable Foods | 8.2 |
| Beverages | 12.5 |
Housing & Utilities
housing_items <- component_data %>%
filter(category == "Housing & Utilities")
kable(
housing_items %>% select(Item = item, `YoY Change (%)` = value),
align = c('l', 'r'),
format = 'html'
) %>%
kableExtra::kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = FALSE
)| Item | YoY Change (%) |
|---|---|
| Electricity | 25.8 |
| Gas | 35.2 |
| Housing Rent | 4.5 |
Transportation
transport_items <- component_data %>%
filter(category == "Transportation")
kable(
transport_items %>% select(Item = item, `YoY Change (%)` = value),
align = c('l', 'r'),
format = 'html'
) %>%
kableExtra::kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = FALSE
)| Item | YoY Change (%) |
|---|---|
| Motor Fuel | -8.5 |
| Transport Services | 15.3 |
Other Categories
other_items <- component_data %>%
filter(category == "Other")
kable(
other_items %>% select(Item = item, `YoY Change (%)` = value),
align = c('l', 'r'),
format = 'html'
) %>%
kableExtra::kable_styling(
bootstrap_options = c("striped", "hover"),
full_width = FALSE
)| Item | YoY Change (%) |
|---|---|
| Healthcare | 9.8 |
| Education | 14.2 |
| Communication | 3.1 |
Time Series Analysis
Row
Headline vs Core Inflation
# Create ordered factor for proper chronological display
historical_data_ordered <- historical_data %>%
mutate(month_ordered = factor(month, levels = month))
plot_ly(historical_data_ordered) %>%
add_trace(
x = ~month_ordered,
y = ~headline,
type = 'scatter',
mode = 'lines+markers',
name = 'Headline CPI',
line = list(color = '#3b82f6', width = 3),
marker = list(size = 5)
) %>%
add_trace(
x = ~month_ordered,
y = ~core,
type = 'scatter',
mode = 'lines+markers',
name = 'Core CPI',
line = list(color = '#f59e0b', width = 3),
marker = list(size = 5)
) %>%
add_trace(
x = ~month_ordered,
y = 6.5,
type = 'scatter',
mode = 'lines',
name = 'Target (6.5%)',
line = list(color = 'gray', width = 2, dash = 'dot')
) %>%
layout(
xaxis = list(
title = "",
tickangle = -45,
categoryorder = "trace",
tickfont = list(size = 10)
),
yaxis = list(
title = "Percentage (%)",
titlefont = list(size = 12)
),
hovermode = 'x unified',
legend = list(
x = 0.02,
y = 0.98,
bgcolor = 'rgba(255, 255, 255, 0.8)',
bordercolor = '#e2e8f0',
borderwidth = 1
),
margin = list(l = 50, r = 20, t = 20, b = 80)
)Food Inflation Trend
# Create ordered factor
historical_data_ordered <- historical_data %>%
mutate(month_ordered = factor(month, levels = month))
plot_ly(historical_data_ordered) %>%
add_trace(
x = ~month_ordered,
y = ~food,
type = 'scatter',
mode = 'lines',
name = 'Food Inflation',
fill = 'tozeroy',
fillcolor = 'rgba(16, 185, 129, 0.2)',
line = list(color = '#10b981', width = 3)
) %>%
layout(
xaxis = list(
title = "",
tickangle = -45,
categoryorder = "trace",
tickfont = list(size = 10)
),
yaxis = list(
title = "Percentage (%)",
titlefont = list(size = 12)
),
hovermode = 'x',
margin = list(l = 50, r = 20, t = 20, b = 80)
)Row
Policy Rate Evolution
# Create ordered factor
historical_data_ordered <- historical_data %>%
mutate(month_ordered = factor(month, levels = month))
plot_ly(historical_data_ordered) %>%
add_trace(
x = ~month_ordered,
y = ~policy,
type = 'scatter',
mode = 'lines+markers',
name = 'Policy Rate',
line = list(color = '#ef4444', width = 4),
marker = list(size = 7, symbol = 'diamond')
) %>%
layout(
xaxis = list(
title = "",
tickangle = -45,
categoryorder = "trace",
tickfont = list(size = 10)
),
yaxis = list(
title = "Policy Rate (%)",
titlefont = list(size = 12)
),
hovermode = 'x',
margin = list(l = 50, r = 20, t = 20, b = 80)
)Inflation Differential
# Create ordered factor and calculate differential
historical_data_diff <- historical_data %>%
mutate(
month_ordered = factor(month, levels = month),
diff = headline - core
)
plot_ly(historical_data_diff) %>%
add_trace(
x = ~month_ordered,
y = ~diff,
type = 'bar',
name = 'Headline - Core Differential',
marker = list(
color = ~diff,
colorscale = list(
c(0, 'rgb(239, 68, 68)'), # Red for negative
c(0.5, 'rgb(255, 255, 255)'), # White for zero
c(1, 'rgb(34, 197, 94)') # Green for positive
),
showscale = FALSE
),
hovertemplate = paste(
'<b>%{x}</b><br>',
'Differential: %{y:.2f}pp',
'<extra></extra>'
)
) %>%
layout(
xaxis = list(
title = "",
tickangle = -45,
categoryorder = "trace",
tickfont = list(size = 10)
),
yaxis = list(
title = "Differential (pp)",
titlefont = list(size = 12)
),
hovermode = 'x',
margin = list(l = 50, r = 20, t = 20, b = 80)
)About
Row
About This Dashboard
Purpose
This dashboard tracks multiple measures of inflation in Pakistan to provide a comprehensive view of price pressures in the economy, similar to the Federal Reserve Bank of Atlanta’s Underlying Inflation Dashboard.
Data Sources
- State Bank of Pakistan (SBP) - Monetary policy and inflation data
- Pakistan Bureau of Statistics (PBS) - Consumer Price Index
- International Monetary Fund (IMF) - Economic indicators
Update Frequency
Monthly - Data is updated following the release of official CPI figures, typically in the first half of each month.
Methodology
Inflation measures are color-coded based on their distance from the SBP’s target range of 5-7%:
- 🟢 Green (Within Target): ±0.5pp from target
-
🟡 Yellow (Above Target): 0.5-2.0pp above target
- 🔴 Red (Significantly Above): >2.0pp above target
- 🔵 Blue (Below Target): >0.5pp below target
Key Indicators
Headline CPI
Overall consumer price inflation measuring the average change in prices paid by consumers for a basket of goods and services.
Core CPI
Excludes volatile food and energy prices to show underlying inflation trends. This measure is closely watched by the State Bank of Pakistan for monetary policy decisions.
Food Inflation
Measures price changes in food and beverages, which constitute a significant portion of household expenditure in Pakistan.
Policy Rate
The State Bank of Pakistan’s benchmark interest rate, used to control inflation and influence economic activity. Current rate: 11.0%
Real Interest Rate
The policy rate adjusted for inflation (Policy Rate - Headline CPI). Positive real rates help control inflation by encouraging savings over spending.
Recent Developments
Monetary Policy Actions (2024-2025)
- June 2024: Started rate cutting cycle from 22%
- Multiple cuts: Reduced rates by 1,100 basis points total
- May 2025: Final cut to 11%
- June-September 2025: Held rates steady at 11%
Key Factors
Disinflation Success: - Inflation fell from 30% peak to current 5.6% - Food prices moderated significantly - Core inflation remains elevated at 7%
Ongoing Challenges: - Energy tariff adjustments (gas +35%, electricity +26%) - Flood-related agricultural impacts - Global commodity price volatility - Exchange rate pressures
Outlook: The State Bank expects inflation to stabilize in the 5-7% target range, with continued focus on maintaining positive real interest rates to anchor inflation expectations.
Contact & Feedback
For questions, suggestions, or feedback about this dashboard:
📧 Email: analytics@example.com
🌐 Website: www.sbp.org.pk
📱 Twitter: @StateBank_Pak
Dashboard Version: 1.0
Last Updated: September 2025
Next Update: Mid-October 2025
This dashboard is for informational purposes only and does not constitute financial advice or policy guidance from the State Bank of Pakistan.