const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
const variance=a=>{const m=mean(a);return mean(a.map(x=>(x-m)**2));};
const std=a=>Math.sqrt(variance(a));
const zscore=(x,a)=>(x-mean(a))/std(a);
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
const corr=(x,y)=>{const mx=mean(x),my=mean(y);
let n=0,dx=0,dy=0;for(let i=0;i<x.length;i++){n+=(x[i]-mx)*(y[i]-my);
dx+=(x[i]-mx)**2;dy+=(y[i]-my)**2;}return n/Math.sqrt(dx*dy);};
function linreg(x,y){const b=corr(x,y)*std(y)/std(x);
const a=mean(y)-b*mean(x);return{slope:b,intercept:a};}
const forecast=(m,x)=>m.slope*x+m.intercept;
// DOSM: GDP growth, CPI, labour force, population census
SELECT year, region, AVG(gdp_per_capita) FROM stats GROUP BY year;
df.groupby(['state']).agg({'population':'sum','urban_rate':'mean'});
model.fit(X_train,y_train);preds=model.predict(X_test);
kpi = { unemployment: 3.2, inflation: 1.8, gdp_growth: 4.7 };
for (const row of dataset) { totals[row.state] += row.value; }
const p95 = quantile(samples, 0.95);
const mean=a=>a.reduce((s,x)=>s+x,0)/a.length;