LONDON – Britain’s headline rate of inflation eased more than expected last month, with analysts pointing to the change in weightings for the consumer price basket as at least part of the reason for slowdown. Nonetheless, consumer price growth remained stubbornly high.
Annual inflation rose 10.1% in January, which was short of the 10.3% estimate and December’s 10.5% rate. On the month, CPI decreased 0.6%, two-tenths below consensus of a 0.4% fall and significantly lower than the 0.4% rise in the previous month. The annual core rate also eased unexpectedly to 5.8% versus the 6.2% forecast and 6.3% at year’s end.
Breaking down this month’s report, ONS chief economist Grant Fitzner said, “Although still at a high level, inflation eased again in January. This was driven by the price of air and coach travel dropping back after last month’s steep rise. Petrol prices continue to fall and there was a dip in restaurant, café, and takeaway prices. The cost of furniture decreased by more than this time last year, in line with traditional New Year discounting.
“These were offset by rising prices for alcohol and tobacco, following on from seasonal price cuts in December and a more subdued rise at the same time last year.”
Food inflation remained elevated over the period, up 16.8% and only a tenth lower than December.
Elizabeth Martins, senior economist at HSBC explained that part of the drop in the headline rate reflects weighting changes. “The post-pandemic period has been marked by more spending on services and less on goods. With services inflation lower than goods inflation and in this release at least, falling faster, increasing its weighting has brought down the overall headline and core rates.”
Compared to fellow G7 nations, annual UK price growth was only lower than in Italy, but all countries appear to have hit respective peaks for now.
Raw material costs
The ONS reported on pipeline inflation for the first time in three months following issues with calculations, and the picture was encouraging.
In the year to January, PPI input prices grew 14.1%%, lower than predictions of 14.7% and 16.2% in the previous period. On the month, prices fell sharply, down 0.1% from a 1.1% prior and a 0.2% median estimate.
Annual PPI output prices in January rose 13.5% above the 13.3% forecast but below December’s 14.6% print. Output prices increased 0.5% on the month, four-tenths above the 0.1% estimate and higher than -0.8% previously.
“There are further indications that costs facing businesses are rising more slowly, driven by falls in crude oil, electricity and petroleum prices,” ONS’s Fitzner said. “However, business prices remain high overall, particularly for steel and food products.”
Some relief for policymakers
Ben Laidler, global markets strategist at eToro, noted: “UK inflation has fallen for a third consecutive time, but it remains a frustratingly slow-paced decline. Price rises are still in double-digits and are the highest amongst major economies globally.
"However, it’s a step in the right direction with the BoE forecasting a fast inflation fall from mid-year, to around 4% by the end of 2023, as lower natural gas prices are felt in the broader economy and the jobs market eases.”
It should be noted that before the Monetary Policy Committee meets again, it will have a whole month's worth of new data (including the labour market on the 14th and inflation on the 22nd) to work with. HSBC’s Martins said the bank emphasised its data dependency, so those new pieces of information will be crucial. “Inflation remains way higher than normal, and way higher than wage growth (5.9% in December). But this does feel like, finally, something to celebrate.”
Pay growth still lags prices
On Tuesday, the UK reported on the state of the labour market, adding a layer of complexity to the bank’s objectives.
Payroll jobs provisionallyincreased by 102,000 in January following an upwardly revised 48,000 rise previously. In the three months to December, the unemployment rate stood at 3.7%, unchanged versus forecasts and theprevious reading.
Growth in average total pay (including bonuses) was 5.9%, this missed the 6.2% predicted but was below last month’s 6.4% read. Regular pay was up 6.7%, a mark higher than the forecast of 6.5%, and last month’s 6.4%.
Statisticians reported that average regular pay growth for the private sector was 7.3% from October to December, and 4.2% for the public sector; outside of the height of the coronavirus pandemic period, this is the largest growth rate seen for the private sector.
In the three months to January, vacancies fell by 76,000 on the quarter to 1.134 mln, the seventh consecutive quarterly fall since the May to July period last year.
Pollsters noted that ongoing strike action also influenced the figures with 843k days lost to industrial action, the highest since November 2011. ONS director of economic statistics Darren Morgan said, “The number of working days lost to strikes rose again sharply in December. Transport and communications remained the most heavily affected area, but this month there was also a large contribution from the health sector.”
Morgan Stanley’s Bruna Skarica said, “While headline numbers suggest a hawkish Q422 labour market release, the print was far more mixed than that: supply has bounced back more meaningfully at the end of the year, and while headline regular pay growth was a beat, it was helped by revisions - with the monthly pace of private sector wage gains slowing in December.”
/*jshint esversion: 6 */
var socket;
var assigned_server = 3001;
var distributor_server = 3010;
var publisher_channel = '';
var broadcaster_channel = '';
var remote_ip = '';
var session_info = {};
var logging_interval;
var logging_interval_time = 120000;
var socket_emits = 0;
var session_start_time;
var reconnectionDelayGrowFactor = 1.2;
var reconnection_delay = 1000;
var playing = false;
var connected_to_assigned = false;
var socket_close_timeout;
var player_disconnected_annoucement_play_delay = 1500;
var player_disconnected_annoucement_play_timeout = null;
self.onmessage = function (msg) {
switch(msg.data.action) {
case 'Reactivate': reactivate(); break;
case 'ConnectDistributor': connect_to_distributor(msg); break;
case 'SessionStaticInfo': session_static_info(msg); break;
case 'SessionInfo': update_session_info(msg.data); break;
case 'PauseLogging': clearTimeout(logging_interval); break;
case 'RestartLogging': postMessage({action: 'RequestSessionStaticInfo' }); break;
case 'JoinPublisherChannel': join_publisher_channel(msg.data); break;
case 'JoinPlayerChannel': join_player_channel(msg.data); break;
case 'CheckChannelStatus': check_channel_status(msg.data); break;
case 'PlayerLogResponse': player_log_response(msg.data); break;
case 'CloseSocket': close_socket(); break;
case 'RequestMessageSearch': request_message_search(msg.data); break;
case 'RequestMoreMessages': request_more_messages(msg.data); break;
case 'PlayerDisconnectedAnnoucementTimeoutStart': player_disconnected_annoucement_timeout_start(); break;
case 'PlayerDisconnectedAnnoucementTimeoutClear': player_disconnected_annoucement_timeout_clear(); break;
}
};
function player_disconnected_annoucement_timeout_clear() {
clearTimeout(player_disconnected_annoucement_play_timeout);
player_disconnected_annoucement_play_timeout = null;
}
function player_disconnected_annoucement_timeout_start() {
player_disconnected_annoucement_play_timeout = setTimeout(function() { send_play_disconnect_annoucement(); }, player_disconnected_annoucement_play_delay );
}
function send_play_disconnect_annoucement() {
postMessage({action: "PlayDisconnectAnnoucement"});
}
function reactivate() {
playing = false;
connect_to_assigned_server();
}
function player_log_response(data) {
var data_array = {};
data_array.type = 'PlayerLogResponse';
data_array.respond_to_socket_final = data.respond_to_socket_final;
data_array.respond_to_socket = data.respond_to_socket;
data_array.player_socket_id = data.player_socket_id;
data_array.logs = data.logs;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function request_message_search(data) {
var data_array = {};
data_array.type = 'request_message_search';
data_array.publisher_channel = data.publisher_channel;
data_array.search_term = data.search_term;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function request_more_messages(data) {
var data_array = {};
data_array.type = 'request_more_messages';
data_array.publisher_channel = data.publisher_channel;
data_array.last_record_id = data.last_record_id;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function check_channel_status(data) {
var data_array = {};
data_array.type = 'check_channel_status';
data_array.app_name = data.app_name;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1 && connected_to_assigned) { socket.send(msg_string); }
else { setTimeout(function() { check_channel_status(data); },500); }
}
function check_channel_status_response(data) {
postMessage({ action: 'CheckChannelStatusReponse', stream_status: data.stream_status.status, onair: data.stream_status.onair, connected: data.stream_status.connected });
}
function join_publisher_channel(data) {
var data_array = {};
data_array.type = 'join_publisher_channel';
if (typeof data.api_key !== 'undefined') { data_array.api_key = data.api_key; }
else {
data_array.publisher_channel = data.publisher_channel;
data_array.username = data.username;
data_array.subscriber_group = data.subscriber_group;
data_array.display_name = data.display_name;
data_array.single_sign_on = data.single_sign_on;
data_array.remote_ip = data.remote_ip;
data_array.http_referrer = data.http_referrer;
data_array.current_page = data.current_page;
data_array.php_session_id = data.php_session_id;
data_array.from_react = data.from_react;
}
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) {
socket.send(msg_string); }
postMessage({action: 'PublisherChannelJoined' });
}
function session_static_info(msg) {
set_static_session_info(msg.data);
start_log();
}
function connect_to_distributor(msg) {
publisher_channel = msg.data.publisher_channel;
remote_ip = msg.data.remote_ip;
socket = new WebSocket("wss://ws.livesquawk.com/ws"+distributor_server);
socket.onopen = function(event) { request_server_assignment(); };
socket.onmessage = function(event) {
var msg_string = event.data.toString();
var data = JSON.parse(msg_string);
switch(data.type) {
case 'server_assignment_response': server_assignment_response(data); break;
}
};
}
function session_info_interval() {
postMessage({action: 'RequestSessionInfo' });
logging_interval = setTimeout(session_info_interval,logging_interval_time);
}
function server_assignment_response(data) {
assigned_server = data.selected_server;
socket.close();
connect_to_assigned_server();
}
function request_server_assignment() {
var data_array = {};
data_array.type = 'request_server_assignment';
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function connect_to_assigned_server() {
socket = new WebSocket("wss://ws.livesquawk.com/ws"+assigned_server);
socket.onopen = function(event) {
postMessage({ action: 'VisibleConsole',console_string: "Connected to server "+assigned_server });
console.log("Connected to server "+assigned_server);
postMessage({ action: 'ConnectedToAssigned' });
connected_to_assigned = true;
if (playing) {
postMessage({ action: 'RejoinPlayerChannel' });
}
};
socket.onmessage = function(event) {
var msg_string = event.data.toString();
var data = JSON.parse(msg_string);
if (data.type != 'server_ping') { /* console.log(data.type); */ }
switch(data.type) {
case 'reconnect': postMessage({ action: 'VisibleConsole',console_string: "Reconnected" }); break;
case 'reload': postMessage({ action: 'Reload' }); break;
case 'start_log_response': start_log_response(data); break;
case 'application_refresh_start': application_refresh_start(data); break;
case 'application_refresh_stop': application_refresh_stop(data); break;
case 'player_log_request':
case 'check_channel_status_response': check_channel_status_response(data); break;
case 'PlayerLogRequest':
case 'new_tweet':
case 'new_latest_news':
case 'delete_report':
case 'add_report':
case 'add_ref_doc':
case 'calendar_change':
case 'calendar_insert':
case 'calendar_delete':
case 'new_note':
case 'AppStart':
case 'AppStop':
case 'BroadcasterStarted':
case 'BroadcasterStopped':
case 'added_cme_report':
case 'updated_cme_report':
case 'added_cme_commentary':
case 'updated_cme_commentary':
case 'server_assignment_response':
case 'initial_messages':
case 'message_categories':
case 'more_messages':
case 'matched_messages':
pass_straight_to_post_message(data);
break;
case 'output':
case 'server_ping':
case 'reconnect':
case 'disconnect':
break;
}
};
socket.onerror = function(event) {
postMessage({ action: 'VisibleConsole',console_string: "LS Socket Error" + event.type });
console.log(event);
postMessage({ action: 'LSSocketConnectionError' });
};
socket.onclose = function(event) {
console.log('Socket is closed. Reconnect will be attempted in 1 second.', event.reason);
socket_close_timeout = setTimeout(connect_to_assigned_server, reconnection_delay);
reconnection_delay = reconnection_delay*reconnectionDelayGrowFactor;
connected_to_assigned = false;
};
}
function close_socket() {
clearTimeout(socket_close_timeout);
socket_close_timeout = null;
socket.onclose = function(event) {};
socket.onmessage = function(event) {};
socket.onerror = function(event) {};
socket.close(1000);
console.log('Socket Closed');
}
function pass_straight_to_post_message(data) {
data.action = data.type;
postMessage(data);
}
function join_player_channel(data) {
var data_array = {};
data_array.type = 'join_player_channel';
data_array.player_channel = data.player_channel;
data_array.remote_ip = data.remote_ip;
data_array.username = data.username;
data_array.app_name = data.app_name;
data_array.onair_status = data.onair_status;
data_array.http_referrer = data.http_referrer;
data_array.current_page = data.current_page;
data_array.php_session_id = data.php_session_id;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
postMessage({action: 'PlayerChannelJoined' });
playing = true;
}
function start_log_response(data) {
session_info.session_id = data.log_record_id;
session_info_interval();
}
function application_refresh_start(data) {
if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStart' }); }
}
function application_refresh_stop(data) {
if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStop' }); }
}
function set_static_session_info(data) {
session_info.browser_codename = data.browser_codename;
session_info.browser_name = data.browser_name;
session_info.user_agent = data.user_agent;
session_info.browser_version = data.browser_version;
session_info.cookies_enabled = data.cookies_enabled;
session_info.platform = data.platform;
session_info.player_version = data.player_version;
session_info.stream = data.stream;
session_info.connection_protocol = data.protocol;
session_info.delay_target = data.delay_target;
session_info.session_email = data.session_email;
session_info.remote_ip = data.remote_ip;
session_info.php_session_id = data.php_session_id;
session_info.application_name = data.application_name;
session_info.http_referrer = data.http_referrer;
}
function start_log() {
var session_start_date = new Date();
session_start_time = session_start_date.getTime();
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var session_start_date_string = session_start_date.getDate() + " " + months[session_start_date.getMonth()] + " " + session_start_date.getFullYear();
var data_array = {};
data_array.type = 'webrtc_start_log';
data_array.remote_ip = session_info.remote_ip;
data_array.username = session_info.session_email;
data_array.php_session_id = session_info.php_session_id;
data_array.webrtc_protocol = '';
data_array.session_start_time = (session_start_time/1000).toFixed(0);
data_array.stream_name = session_info.stream;
data_array.session_start_date = session_start_date_string;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function update_session_info(data) {
var data_array = {};
var msg_string = '';
var current_date = new Date();
var current_time = current_date.getTime();
session_info.protocol = data.protocol;
session_info.curr_delay = (data.effective_latency / 1000).toFixed(2);
session_info.session_length = current_time - session_start_time;
session_info.ping_time = data.ping_time;
session_info.jitter = data.jitter;
session_info.packet_loss = data.packet_loss;
session_info.effective_latency = data.effective_latency;
session_info.mean_opinion_score = data.mean_opinion_score;
session_info.restarts = data.restarts;
if (socket_emits == 0) {
data_array = {};
data_array.type = 'webrtc_log_data_full';
data_array.connection_protocol = session_info.protocol;
data_array.threshold = 0;
data_array.curr_delay = session_info.curr_delay;
data_array.session_length = session_info.session_length;
data_array.date = current_time;
data_array.browser_codename = session_info.browser_codename;
data_array.browser_name = session_info.browser_name;
data_array.user_agent = session_info.user_agent;
data_array.browser_version = session_info.browser_version;
data_array.cookies_enabled = session_info.cookies_enabled;
data_array.platform = session_info.platform;
data_array.player_version = session_info.player_version;
data_array.stream = session_info.stream;
data_array.restarts = session_info.restarts;
data_array.delay_target = 0;
data_array.op_sys = '';
data_array.flash_version = '';
data_array.remote_ip = session_info.remote_ip;
data_array.http_referrer = session_info.http_referrer;
data_array.php_session_id = session_info.php_session_id;
data_array.user_email = session_info.session_email;
data_array.webrtc_protocol = session_info.protocol;
data_array.ping_time = session_info.ping_time;
data_array.jitter = session_info.jitter;
data_array.packet_loss = session_info.packet_loss;
data_array.effective_latency = session_info.effective_latency;
data_array.mean_opinion_score = session_info.mean_opinion_score;
data_array.session_id = session_info.session_id;
msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
else {
data_array = {};
data_array.type = 'webrtc_log_data';
data_array.session_id = session_info.session_id;
data_array.php_session_id = session_info.php_session_id;
data_array.connection_protocol = session_info.protocol;
data_array.restarts = session_info.restarts;
data_array.threshold = 0;
data_array.curr_delay = session_info.curr_delay;
data_array.session_length = session_info.session_length;
data_array.date = current_time;
data_array.webrtc_protocol = session_info.protocol;
data_array.ping_time = session_info.ping_time;
data_array.jitter = session_info.jitter;
data_array.packet_loss = session_info.packet_loss;
data_array.effective_latency = session_info.effective_latency;
data_array.mean_opinion_score = session_info.mean_opinion_score;
data_array.stream = session_info.stream;
msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
socket_emits++;
if (socket_emits == 100) { socket_emits = 0; }
}
Headline and core CPI fall more than forecast
ONS change to weighting helped cap rise
Factory gate prices show signs of softening
Labour market remained tight at end of 2022
Inflation still outpaces pay growth
By Harry Daniels
LiveSquawk News
@HarryDaniels71
15 February 2023 | 11:30 GMT
LONDON – Britain’s headline rate of inflation eased more than expected last month, with analysts pointing to the change in weightings for the consumer price basket as at least part of the reason for slowdown. Nonetheless, consumer price growth remained stubbornly high.
Annual inflation rose 10.1% in January, which was short of the 10.3% estimate and December’s 10.5% rate. On the month, CPI decreased 0.6%, two-tenths below consensus of a 0.4% fall and significantly lower than the 0.4% rise in the previous month. The annual core rate also eased unexpectedly to 5.8% versus the 6.2% forecast and 6.3% at year’s end.
Breaking down this month’s report, ONS chief economist Grant Fitzner said, “Although still at a high level, inflation eased again in January. This was driven by the price of air and coach travel dropping back after last month’s steep rise. Petrol prices continue to fall and there was a dip in restaurant, café, and takeaway prices. The cost of furniture decreased by more than this time last year, in line with traditional New Year discounting.
“These were offset by rising prices for alcohol and tobacco, following on from seasonal price cuts in December and a more subdued rise at the same time last year.”
Food inflation remained elevated over the period, up 16.8% and only a tenth lower than December.
Elizabeth Martins, senior economist at HSBC explained that part of the drop in the headline rate reflects weighting changes. “The post-pandemic period has been marked by more spending on services and less on goods. With services inflation lower than goods inflation and in this release at least, falling faster, increasing its weighting has brought down the overall headline and core rates.”
Compared to fellow G7 nations, annual UK price growth was only lower than in Italy, but all countries appear to have hit respective peaks for now.
The ONS reported on pipeline inflation for the first time in three months following issues with calculations, and the picture was encouraging.
In the year to January, PPI input prices grew 14.1%%, lower than predictions of 14.7% and 16.2% in the previous period. On the month, prices fell sharply, down 0.1% from a 1.1% prior and a 0.2% median estimate.
Annual PPI output prices in January rose 13.5% above the 13.3% forecast but below December’s 14.6% print. Output prices increased 0.5% on the month, four-tenths above the 0.1% estimate and higher than -0.8% previously.
“There are further indications that costs facing businesses are rising more slowly, driven by falls in crude oil, electricity and petroleum prices,” ONS’s Fitzner said. “However, business prices remain high overall, particularly for steel and food products.”
Ben Laidler, global markets strategist at eToro, noted: “UK inflation has fallen for a third consecutive time, but it remains a frustratingly slow-paced decline. Price rises are still in double-digits and are the highest amongst major economies globally.
"However, it’s a step in the right direction with the BoE forecasting a fast inflation fall from mid-year, to around 4% by the end of 2023, as lower natural gas prices are felt in the broader economy and the jobs market eases.”
It should be noted that before the Monetary Policy Committee meets again, it will have a whole month's worth of new data (including the labour market on the 14th and inflation on the 22nd) to work with. HSBC’s Martins said the bank emphasised its data dependency, so those new pieces of information will be crucial. “Inflation remains way higher than normal, and way higher than wage growth (5.9% in December). But this does feel like, finally, something to celebrate.”
On Tuesday, the UK reported on the state of the labour market, adding a layer of complexity to the bank’s objectives.
Payroll jobs provisionally increased by 102,000 in January following an upwardly revised 48,000 rise previously. In the three months to December, the unemployment rate stood at 3.7%, unchanged versus forecasts and the previous reading.
Growth in average total pay (including bonuses) was 5.9%, this missed the 6.2% predicted but was below last month’s 6.4% read. Regular pay was up 6.7%, a mark higher than the forecast of 6.5%, and last month’s 6.4%.
Statisticians reported that average regular pay growth for the private sector was 7.3% from October to December, and 4.2% for the public sector; outside of the height of the coronavirus pandemic period, this is the largest growth rate seen for the private sector.
In the three months to January, vacancies fell by 76,000 on the quarter to 1.134 mln, the seventh consecutive quarterly fall since the May to July period last year.
Pollsters noted that ongoing strike action also influenced the figures with 843k days lost to industrial action, the highest since November 2011. ONS director of economic statistics Darren Morgan said, “The number of working days lost to strikes rose again sharply in December. Transport and communications remained the most heavily affected area, but this month there was also a large contribution from the health sector.”
Morgan Stanley’s Bruna Skarica said, “While headline numbers suggest a hawkish Q422 labour market release, the print was far more mixed than that: supply has bounced back more meaningfully at the end of the year, and while headline regular pay growth was a beat, it was helped by revisions - with the monthly pace of private sector wage gains slowing in December.”