<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>classify lasso | Carlos Mendez</title><link>https://carlos-mendez.org/tag/classify-lasso/</link><atom:link href="https://carlos-mendez.org/tag/classify-lasso/index.xml" rel="self" type="application/rss+xml"/><description>classify lasso</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><copyright>© 2018–2026 Carlos Mendez. All rights reserved.</copyright><lastBuildDate>Thu, 28 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://carlos-mendez.org/media/icon_huedfae549300b4ca5d201a9bd09a3ecd5_79625_512x512_fill_lanczos_center_3.png</url><title>classify lasso</title><link>https://carlos-mendez.org/tag/classify-lasso/</link></image><item><title>Okun's law and spatial regimes in Indonesia: A machine learning approach</title><link>https://carlos-mendez.org/publication/20260528-em/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://carlos-mendez.org/publication/20260528-em/</guid><description>&lt;h2 id="the-puzzle">The puzzle&lt;/h2>
&lt;p>Okun&amp;rsquo;s law is one of macroeconomics' most reliable regularities: when output grows, unemployment falls. Yet estimated for Indonesia as a single economy, the relationship does not hold. The reason is aggregation. A vast, heterogeneous archipelago is not one labor market, and a national average quietly cancels out regions that move in opposite directions. The question, then, is not &lt;em>whether&lt;/em> Okun&amp;rsquo;s law holds in Indonesia, but &lt;em>where&lt;/em>.&lt;/p>
&lt;hr>
&lt;h2 id="a-two-step-data-driven-approach">A two-step, data-driven approach&lt;/h2>
&lt;p>Rather than imposing geographic groups in advance (say, &amp;ldquo;West&amp;rdquo; versus &amp;ldquo;East&amp;rdquo;), the authors let the data sort districts into groups with similar growth–unemployment dynamics, then model how those dynamics spill across space. The framework is descriptive — it maps associations, not causal effects.&lt;/p>
&lt;pre>&lt;code class="language-mermaid">graph LR
A[&amp;quot;&amp;lt;b&amp;gt;Step 1 — C-Lasso&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;(machine learning)&amp;lt;br/&amp;gt;&amp;lt;i&amp;gt;Sorts districts into latent regimes&amp;lt;br/&amp;gt;sharing a growth-unemployment pattern&amp;lt;/i&amp;gt;&amp;quot;]
B[&amp;quot;&amp;lt;b&amp;gt;Step 2 — Spatial Durbin Model&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;i&amp;gt;Splits each regime's response into a&amp;lt;br/&amp;gt;direct (local) and indirect (neighbor&amp;lt;br/&amp;gt;spillover) association&amp;lt;/i&amp;gt;&amp;quot;]
A --&amp;gt; B
style A fill:#6a9bcc,stroke:#141413,color:#fff
style B fill:#d97757,stroke:#141413,color:#fff
&lt;/code>&lt;/pre>
&lt;hr>
&lt;h2 id="four-latent-regimes">Four latent regimes&lt;/h2>
&lt;p>The classifier uncovers &lt;strong>four distinct regimes&lt;/strong> that cut across administrative and physical geography — districts in the same group need not be neighbors. Each tells a different story about how growth meets the labor market.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Regime&lt;/th>
&lt;th style="text-align:left">Structural profile&lt;/th>
&lt;th style="text-align:left">Examples&lt;/th>
&lt;th style="text-align:left">Okun behavior&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Group 1&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Labor-absorbing centers — metropolises, industrial belts, smallholder plantations&lt;/td>
&lt;td style="text-align:left">Bekasi, North Jakarta, Makassar, Medan&lt;/td>
&lt;td style="text-align:left">&lt;strong>Strong, textbook.&lt;/strong> Growth co-moves with falling unemployment, locally and in neighbors.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Group 2&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Capital-intensive hubs — resource zones, mechanized corporate farming&lt;/td>
&lt;td style="text-align:left">Balikpapan, Central Jakarta, rural Java pockets&lt;/td>
&lt;td style="text-align:left">&lt;strong>Reversed.&lt;/strong> Faster growth tracks &lt;em>higher&lt;/em> measured open unemployment.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Group 3&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Transitional centers — secondary cities shifting from agriculture to services&lt;/td>
&lt;td style="text-align:left">Cilacap, Indramayu, Malang&lt;/td>
&lt;td style="text-align:left">&lt;strong>Weak.&lt;/strong> Little baseline link; adjustment runs through hours worked, not layoffs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Group 4&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Peripheral markets — thin, isolated rural island economies&lt;/td>
&lt;td style="text-align:left">Remote Papua, East Nusa Tenggara&lt;/td>
&lt;td style="text-align:left">&lt;strong>Negligible.&lt;/strong> Pervasive informality severs the link to formal unemployment.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Why does growth co-move with &lt;em>rising&lt;/em> unemployment in Group 2?&lt;/strong>
Where capital-intensive industry and corporate agriculture dominate, growth often arrives through mechanization that displaces traditional farm labor. As displaced workers leave informal or family work to look for formal wage jobs, they enter the statistics as &amp;ldquo;openly unemployed.&amp;rdquo; Measured unemployment rises alongside output through search frictions and skills mismatch — not because growth itself destroys jobs.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="robustness-at-the-province-level">Robustness at the province level&lt;/h2>
&lt;p>To check that the pattern is not an artifact of district-level noise, the authors re-run the framework on 34 provinces. It reproduces a similar structure, now in three regimes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Diversified, demand-rich provinces&lt;/strong> — industrial and consumer hubs with a steep Okun coefficient of $-0.262$.&lt;/li>
&lt;li>&lt;strong>Agricultural commodity heartlands&lt;/strong> — large corporate plantations where growth is locally &amp;ldquo;jobless&amp;rdquo; but generates spillovers to neighbors.&lt;/li>
&lt;li>&lt;strong>Commodity-frontier enclaves&lt;/strong> — thin labor markets tied to mining and heavy industry, with a near-flat coefficient of $-0.033$.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="spatial-spillovers-matter">Spatial spillovers matter&lt;/h2>
&lt;p>Labor-market adjustment does not stop at district borders. Changes in unemployment are correlated across neighboring districts ($\rho = 0.135$), so a growth shock in one place reaches the next.&lt;/p>
&lt;p>Separating local responses from spillovers is what makes this visible. In Group 1, growth is associated with lower unemployment at home (direct association $-0.112$) &lt;em>and&lt;/em> with lower unemployment next door (indirect spillover $-0.077$). A model that ignores spillovers would miss roughly the entire neighboring footprint of regional momentum.&lt;/p>
&lt;hr>
&lt;h2 id="key-takeaways">Key takeaways&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Aggregate estimates mislead.&lt;/strong> A single national Okun coefficient averages over regimes whose growth–unemployment associations point in opposite directions.&lt;/li>
&lt;li>&lt;strong>Diversified hubs are the engine.&lt;/strong> In metropolitan and smallholder-plantation districts (Group 1), output gains translate most reliably into job creation, at home and nearby.&lt;/li>
&lt;li>&lt;strong>Structural change reshapes absorption.&lt;/strong> Moving from family farming to mechanized corporate agriculture lowers how many workers the local economy absorbs per unit of output.&lt;/li>
&lt;li>&lt;strong>Informality hides slack.&lt;/strong> In peripheral regions (Group 4), open-unemployment figures understate distress because people fall back on underemployment and informal work.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="open-questions">Open questions&lt;/h2>
&lt;ol>
&lt;li>If capital-intensive growth (Group 2) keeps pushing displaced farm workers into open unemployment, how can local governments build training pipelines that move them into modern service jobs?&lt;/li>
&lt;li>Given how much of the total association runs through spillovers in labor-absorbing zones, should planning shift from isolated district targets toward coordinated multi-district economic corridors?&lt;/li>
&lt;/ol>
&lt;hr>
&lt;style>
.podcast-overlay {
display: none;
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 9999;
animation: podSlideUp 0.35s ease-out;
}
@keyframes podSlideUp {
from { transform: translateY(100%); }
to { transform: translateY(0); }
}
.podcast-overlay.pod-closing {
animation: podSlideDown 0.3s ease-in forwards;
}
@keyframes podSlideDown {
from { transform: translateY(0); }
to { transform: translateY(100%); }
}
.podcast-container {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
padding: 18px 24px 20px;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
box-shadow: 0 -4px 32px rgba(0,0,0,0.5);
border-top: 1px solid rgba(106,155,204,0.2);
}
.podcast-inner {
max-width: 800px;
margin: 0 auto;
}
.podcast-top-row {
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 14px;
}
.podcast-icon {
width: 42px;
height: 42px;
background: linear-gradient(135deg, #d97757, #e8956a);
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.podcast-icon svg {
width: 22px;
height: 22px;
fill: #fff;
}
.podcast-title-block {
flex: 1;
min-width: 0;
}
.podcast-title-block h4 {
margin: 0 0 1px 0;
color: #f0ece2;
font-size: 14px;
font-weight: 600;
letter-spacing: 0.02em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.podcast-title-block span {
color: #8b9dc3;
font-size: 11px;
}
.podcast-close-btn {
background: none;
border: none;
cursor: pointer;
padding: 6px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.2s;
flex-shrink: 0;
}
.podcast-close-btn:hover {
background: rgba(255,255,255,0.1);
}
.podcast-close-btn svg {
width: 20px;
height: 20px;
fill: #8b9dc3;
}
.podcast-progress-wrap {
margin-bottom: 12px;
}
.podcast-time-row {
display: flex;
justify-content: space-between;
font-size: 11px;
color: #8b9dc3;
margin-bottom: 5px;
font-variant-numeric: tabular-nums;
}
.podcast-bar-bg {
width: 100%;
height: 6px;
background: rgba(255,255,255,0.1);
border-radius: 3px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: height 0.15s;
}
.podcast-bar-buffered {
position: absolute;
top: 0;
left: 0;
height: 100%;
background: rgba(106,155,204,0.25);
border-radius: 3px;
transition: width 0.3s;
}
.podcast-bar-progress {
position: absolute;
top: 0;
left: 0;
height: 100%;
background: linear-gradient(90deg, #6a9bcc, #00d4c8);
border-radius: 3px;
transition: width 0.1s linear;
}
.podcast-bar-bg:hover {
height: 10px;
margin-top: -2px;
}
.podcast-controls-row {
display: flex;
align-items: center;
justify-content: space-between;
}
.podcast-transport {
display: flex;
align-items: center;
gap: 8px;
}
.podcast-btn {
background: none;
border: none;
cursor: pointer;
padding: 4px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: all 0.2s;
}
.podcast-btn svg {
fill: #c8d0e0;
transition: fill 0.2s;
}
.podcast-btn:hover svg {
fill: #f0ece2;
}
.podcast-btn-skip {
position: relative;
}
.podcast-btn-skip span {
position: absolute;
font-size: 7px;
font-weight: 700;
color: #c8d0e0;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
pointer-events: none;
margin-top: 1px;
}
.podcast-btn-play {
width: 48px;
height: 48px;
background: linear-gradient(135deg, #d97757, #e8956a);
border-radius: 50%;
box-shadow: 0 3px 12px rgba(217,119,87,0.4);
transition: all 0.2s;
}
.podcast-btn-play:hover {
transform: scale(1.08);
box-shadow: 0 5px 20px rgba(217,119,87,0.5);
}
.podcast-btn-play svg {
fill: #fff;
width: 22px;
height: 22px;
}
.podcast-extras {
display: flex;
align-items: center;
gap: 10px;
}
.podcast-volume-wrap {
display: flex;
align-items: center;
gap: 5px;
}
.podcast-volume-wrap svg {
fill: #8b9dc3;
width: 16px;
height: 16px;
cursor: pointer;
flex-shrink: 0;
}
.podcast-volume-wrap svg:hover {
fill: #c8d0e0;
}
.podcast-volume-slider {
-webkit-appearance: none;
appearance: none;
width: 60px;
height: 4px;
background: rgba(255,255,255,0.12);
border-radius: 2px;
outline: none;
cursor: pointer;
}
.podcast-volume-slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 12px;
height: 12px;
background: #6a9bcc;
border-radius: 50%;
cursor: pointer;
}
.podcast-speed-btn {
background: rgba(255,255,255,0.08);
border: 1px solid rgba(255,255,255,0.12);
color: #c8d0e0;
font-size: 11px;
font-weight: 600;
padding: 3px 9px;
border-radius: 12px;
cursor: pointer;
transition: all 0.2s;
font-family: inherit;
min-width: 40px;
text-align: center;
}
.podcast-speed-btn:hover {
background: rgba(106,155,204,0.2);
border-color: #6a9bcc;
color: #f0ece2;
}
.podcast-download-btn {
background: none;
border: 1px solid rgba(255,255,255,0.12);
border-radius: 8px;
padding: 4px 10px;
cursor: pointer;
display: flex;
align-items: center;
gap: 4px;
color: #8b9dc3;
font-size: 11px;
font-family: inherit;
text-decoration: none;
transition: all 0.2s;
}
.podcast-download-btn:hover {
border-color: #6a9bcc;
color: #f0ece2;
background: rgba(106,155,204,0.1);
}
.podcast-download-btn svg {
width: 14px;
height: 14px;
fill: currentColor;
}
@media (max-width: 600px) {
.podcast-container { padding: 14px 16px 16px; }
.podcast-volume-wrap { display: none; }
.podcast-title-block h4 { font-size: 13px; }
.podcast-extras { gap: 8px; }
}
&lt;/style>
&lt;div class="podcast-overlay" id="podOverlay">
&lt;div class="podcast-container">
&lt;div class="podcast-inner">
&lt;audio id="podAudio" preload="none" src="https://files.catbox.moe/i3g2l3.m4a">&lt;/audio>
&lt;div class="podcast-top-row">
&lt;div class="podcast-icon">
&lt;svg viewBox="0 0 24 24">&lt;path d="M12 1a5 5 0 0 0-5 5v4a5 5 0 0 0 10 0V6a5 5 0 0 0-5-5zm0 16a7 7 0 0 1-7-7H3a9 9 0 0 0 8 8.94V22h2v-3.06A9 9 0 0 0 21 10h-2a7 7 0 0 1-7 7z"/>&lt;/svg>
&lt;/div>
&lt;div class="podcast-title-block">
&lt;h4>AI Podcast: Okun's Law and Spatial Regimes in Indonesia&lt;/h4>
&lt;span id="podDurationLabel">Click play to load&lt;/span>
&lt;/div>
&lt;button class="podcast-close-btn" onclick="podClose()" title="Close player">
&lt;svg viewBox="0 0 24 24">&lt;path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>&lt;/svg>
&lt;/button>
&lt;/div>
&lt;div class="podcast-progress-wrap">
&lt;div class="podcast-time-row">
&lt;span id="podCurrent">0:00&lt;/span>
&lt;span id="podDuration">0:00&lt;/span>
&lt;/div>
&lt;div class="podcast-bar-bg" id="podBarBg" onclick="podSeek(event)">
&lt;div class="podcast-bar-buffered" id="podBuffered">&lt;/div>
&lt;div class="podcast-bar-progress" id="podProgress">&lt;/div>
&lt;/div>
&lt;/div>
&lt;div class="podcast-controls-row">
&lt;div class="podcast-transport">
&lt;button class="podcast-btn podcast-btn-skip" onclick="podSkip(-15)" title="Back 15s">
&lt;svg width="26" height="26" viewBox="0 0 24 24">&lt;path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"/>&lt;/svg>
&lt;span>15&lt;/span>
&lt;/button>
&lt;button class="podcast-btn podcast-btn-play" id="podPlayBtn" onclick="podToggle()" title="Play">
&lt;svg id="podIconPlay" viewBox="0 0 24 24">&lt;path d="M8 5v14l11-7z"/>&lt;/svg>
&lt;svg id="podIconPause" viewBox="0 0 24 24" style="display:none">&lt;path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"/>&lt;/svg>
&lt;/button>
&lt;button class="podcast-btn podcast-btn-skip" onclick="podSkip(15)" title="Forward 15s">
&lt;svg width="26" height="26" viewBox="0 0 24 24">&lt;path d="M12 5V1l5 5-5 5V7c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6h2c0 4.42-3.58 8-8 8s-8-3.58-8-8 3.58-8 8-8z"/>&lt;/svg>
&lt;span>15&lt;/span>
&lt;/button>
&lt;/div>
&lt;div class="podcast-extras">
&lt;div class="podcast-volume-wrap">
&lt;svg id="podVolIcon" onclick="podMute()" viewBox="0 0 24 24">&lt;path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3A4.5 4.5 0 0 0 14 8.5v7a4.47 4.47 0 0 0 2.5-3.5zM14 3.23v2.06a6.51 6.51 0 0 1 0 13.42v2.06A8.51 8.51 0 0 0 14 3.23z"/>&lt;/svg>
&lt;input type="range" class="podcast-volume-slider" id="podVolume" min="0" max="1" step="0.05" value="0.8">
&lt;/div>
&lt;button class="podcast-speed-btn" id="podSpeedBtn" onclick="podCycleSpeed()" title="Playback speed">1x&lt;/button>
&lt;a class="podcast-download-btn" href="https://files.catbox.moe/i3g2l3.m4a" target="_blank" rel="noopener" title="Stream">
&lt;svg viewBox="0 0 24 24">&lt;path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>&lt;/svg>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
(function(){
var overlay = document.getElementById('podOverlay');
var a = document.getElementById('podAudio');
var speeds = [0.75, 1, 1.25, 1.5, 2];
var si = 1;
var opened = false;
function fmt(s){
if(isNaN(s)) return '0:00';
var m=Math.floor(s/60), sec=Math.floor(s%60);
return m+':'+(sec&lt;10?'0':'')+sec;
}
document.addEventListener('click', function(e){
var link = e.target.closest('a.btn-page-header');
if(!link) return;
var text = link.textContent.trim();
if(text.indexOf('AI Podcast') === -1) return;
e.preventDefault();
e.stopPropagation();
overlay.style.display = 'block';
overlay.classList.remove('pod-closing');
if(!opened){
a.preload = 'metadata';
a.load();
opened = true;
}
});
a.volume = 0.8;
a.addEventListener('loadedmetadata', function(){
document.getElementById('podDuration').textContent = fmt(a.duration);
document.getElementById('podDurationLabel').textContent = fmt(a.duration) + ' minutes';
});
a.addEventListener('timeupdate', function(){
document.getElementById('podCurrent').textContent = fmt(a.currentTime);
var pct = a.duration ? (a.currentTime/a.duration)*100 : 0;
document.getElementById('podProgress').style.width = pct+'%';
});
a.addEventListener('progress', function(){
if(a.buffered.length>0){
var pct = (a.buffered.end(a.buffered.length-1)/a.duration)*100;
document.getElementById('podBuffered').style.width = pct+'%';
}
});
a.addEventListener('ended', function(){
document.getElementById('podIconPlay').style.display='';
document.getElementById('podIconPause').style.display='none';
});
window.podToggle = function(){
if(a.paused){a.play();document.getElementById('podIconPlay').style.display='none';document.getElementById('podIconPause').style.display='';}
else{a.pause();document.getElementById('podIconPlay').style.display='';document.getElementById('podIconPause').style.display='none';}
};
window.podSkip = function(s){a.currentTime = Math.max(0,Math.min(a.duration||0,a.currentTime+s));};
window.podSeek = function(e){
var rect = document.getElementById('podBarBg').getBoundingClientRect();
var pct = (e.clientX - rect.left)/rect.width;
a.currentTime = pct * (a.duration||0);
};
window.podMute = function(){
a.muted = !a.muted;
document.getElementById('podVolume').value = a.muted ? 0 : a.volume;
};
window.podCycleSpeed = function(){
si = (si+1) % speeds.length;
a.playbackRate = speeds[si];
document.getElementById('podSpeedBtn').textContent = speeds[si]+'x';
};
window.podClose = function(){
overlay.classList.add('pod-closing');
setTimeout(function(){ overlay.style.display='none'; }, 300);
a.pause();
document.getElementById('podIconPlay').style.display='';
document.getElementById('podIconPause').style.display='none';
};
document.getElementById('podVolume').addEventListener('input', function(){
a.volume = this.value;
a.muted = false;
});
if(window.location.hash === '#podcast-player'){
overlay.style.display = 'block';
a.preload = 'metadata';
a.load();
opened = true;
}
})();
&lt;/script>&lt;blockquote>
&lt;/blockquote></description></item></channel></rss>