title: “Female Labor Force Participation and Per Capita Income in a Fragility Context: Empirical Evidence and Projections for Somalia (1990–2025)” author: “Abdirizak Ahmed Osman Barri” date: “2026-06-04”

Insights from Classical,Machine Learning, Deep Learning , and Hybrid Models

Section I: Descriptive Statistics

To be reproducible

set.seed(123)

#1.1 Data Cleaning data<-read.csv(“Flaborforce.CSV”) #Selecting area Somalia<-data[data$entity==“Somalia”,] View() #select Study variable

Flaborforce<-Somalia$female.labor.force.and.national.per.capital.income #any missing value any(is.na(Flaborforce)) #1.2 Data transformation is.ts(Flaborforce) class(Flaborforce) Flaborforcets<-ts(Flaborforce, frequency = 1, start = 1990)

#1.3 data measurement library(psych) describe(Flaborforcets)

#1.4 data visualization library(TSstudio) ts_plot(Flaborforcets) windows() plot.ts(Flaborforcets, main= “Somalia female labor force and national per capital income 1990-2025”, xlab=“years”, ylab=“Female-Labor_force_and_national_percapital_income_rate”, col=“blue”)

#2.0 diagnostic analytics

#2.1 Data validation (Splitting data into train and test) split<-ts_split(Flaborforcets, sample.out = 26) train<-split\(train test<-split\)test

#2.2 checking stationarity library(tseries) adf.test(Flaborforcets) pp.test(Flaborforcets)

#2.3 differencing techniques library(forecast) ndiffs(Flaborforcets) ndiffs(train)

Flaborforcetsd<-diff(Flaborforcets) adf.test(Flaborforcetsd) pp.test(Flaborforcetsd)

traind<-diff(train) adf.test(traind)

#2.4 Functional Analysis windows() acf(Flaborforcets) windows() pacf(Flaborforcets)

windows() acf(train) windows() pacf(train)

#3. Predictive Analytics #3.1 : Modelling # using Autoarima arima<-auto.arima(Flaborforcets) summary(arima) arima1<-auto.arima(train) summary(arima1)

#4 prescriptive analysis #4.1 best model selection bestmodel<-auto.arima(Flaborforcets, stepwise = FALSE, approximation = FALSE, trace = TRUE, allowdrift = TRUE, allowmean = TRUE) bestmodel1<-auto.arima(train, stepwise = FALSE, approximation = FALSE, trace = TRUE, allowdrift = TRUE, allowmean = TRUE) #4.2 model comparison #4.3 model adequacy checking windows() checkresiduals(arima)

windows() checkresiduals(arima1) #4.4 forecasting #forecasting from 2025 to 2050 forecast<-forecast(arima,h=26) print(forecast) windows() plot(forecast)

#end ########################################################################## library(Metrics)

6 Model Comparison - Classical Models (ARIMA, ETS, BATS, TBATS, ARFIMA, Theta)

Data Splitting

split<-ts_split(Flaborforcets,sample.out = 10) train<-split\(train test<-split\)test

#5. Modelling ##################################################3 #5.1: ARIMA Model #fitting arima model fitARIMA = auto.arima(train, stepwise = FALSE, approximation = FALSE, trace = TRUE, allowdrift = TRUE, allowmean = TRUE) # Parameter estimation print(fitARIMA)

Model Adequacy Checking

summary(fitARIMA) windows() checkresiduals(fitARIMA)

Prediction

predARIMA = forecast::forecast(fitARIMA,h=26) summary(predARIMA) test windows() plot(predARIMA) #accuracy metrics a1<-forecast::accuracy(predARIMA, test);a1 smape(test,predARIMA$mean)

##############################################3 #5.2 ETS Model: if it is heteroscedasticity

#fitting ETS model fitETS=ets(train) summary(fitETS) predETS=forecast::forecast(fitETS, h=26) print(predETS) test windows() plot(predETS) a2<-forecast::accuracy(predETS, test);a2 smape(test,predETS$mean)

##############################################3 #5.2 ETS Model: if it is heteroscedasticity

#fitting ETS model fitETS=ets(train) summary(fitETS) predETS=forecast::forecast(fitETS, h=26) print(predETS) test windows() plot(predETS) a2<-forecast::accuracy(predETS, test);a2 smape(test,predETS$mean)

5.3 BATS : if its exceeds 3 differencing

fit_bats=bats(train) summary(fit_bats) predBATS=forecast::forecast(fit_bats,h=26) print(predBATS) test windows() plot(predBATS) a3<-forecast::accuracy(predBATS,test);a3 smape(test,predBATS$mean)

5.4 fitting TBATS: if it is NOT normally distributed

fit_tbats = tbats(train) summary(fit_tbats) predTBATS=forecast::forecast(fit_tbats, h=26) print(predTBATS) test windows() autoplot(predTBATS) a4<-forecast::accuracy(predTBATS, test);a4 smape(test,predTBATS$mean)

###########################################3 # 5.5 Theta model: if the sample size is less than 30 fit_theta=thetaf(train, h=26) print(fit_theta) windows() autoplot(fit_theta) a5<-forecast::accuracy(fit_theta\(mean, test);a5 smape(test,fit_theta\)mean)

#5.6 fitting ARFIMA model: if its non-linear fit_ARFIMA=arfima(train) predARFIMA = forecast::forecast(fit_ARFIMA, h=26) print(predARFIMA) test windows() autoplot(predARFIMA) a6<-forecast::accuracy(predARFIMA$mean, test);a6

smape(test,predARFIMA$mean)

Plot for Forecasting

windows() par(mfrow=c(3,2)) plot(predARIMA,col=“red”) plot(predETS,col=“red”) plot(fit_theta,col=“red”) plot(predTBATS,col=“red”) plot(predBATS,col=“red”) plot(predARFIMA,col=“red”)

Decision

a1;a2;a3;a4;a5;a6

#END