Ett drama med 'R'
En Mong de många intressanta applikationer som vi hittar i våra förråd av Ubuntu / Debian, är R , en statistisk paket med professionell anda ( jag använder Google, Merck, Pfizer och Bank of America ), som är resurser för nästan allt ni kan föreställa er, från grunderna, till de mest komplexa. Dess användning är inte, säger vi "mycket" vänlig "än kunskap om grunderna i S språket, är tolkningen av de olika funktionerna och dess många alternativ på något sätt omedelbart. Och även om du är intresserad av statistik, är ett bra paket för att rita data av något slag , och de mest fantasifulla sätt du kan tänka, och sparas via skript, en png, jpeg, pdf osv .... Men låt oss försöka det ... ett fall av mycket påtaglig.
Ärendet
Naturligtvis, om du läser detta från Spanien, är en av de särskiljande dragen i den ekonomiska krisen här den höga arbetslösheten vi har åstadkommit på några månader, och stor oro över den framtida utvecklingen av dessa uppgifter, de flesta att data är alla ett drama ... eller snarare många dramer ... Uppenbarligen är detta en arbetslöshet som är en följd och det skulle vara lämpligt att analysera i termer av andra variabler. Men eftersom detta är en ursäkt att leka med R vi kommer att behandla det i sig som en stokastisk process, och försöka härleda framtida utvecklingen med den typiska verktyg för tidsserieanalys av denna typ.
![[Tasa_paro_sa_eurostat.png]](/images/paro/tasa_paro_sa_eurostat.png)
Källa och förberedelser: Eurostat
I forskning vi har en hel uppsättning av verktyg att hantera tidsserier och som inte gör analyser och prognoser av dem med ARIMA . Även om dessa modeller verkar atheoretical ibland lättsinnig, är i verktygslådan någon Econometrica, däribland Banco de España
Serien
Först måste vi välja källan för information. Detta i händelse av arbetslöshet är en grannlaga uppgift, eftersom det är beroende on som "ange" i statistiken ... Den bästa lösningen jag kan komma på är det månadsserier av Eurostat , den EPA may do bättre, men är kvartalsvis och vi skulle också sedan. Ett urval av cirka 80 observationer kommer att vara tillräcklig, så vi tar det från januari 2003 till maj 2009 (nominellt, justerat), det senast offentliggjorda. Den hämtas i csv med vad som direkt kan läsas av R. Värdena i kolumn INDICATOR_VALUE .
För det första att det är inte grafiken, få en uppfattning om hur serien:
2003 # strejk månad maj 2009 (Mediedelning EA15) yStart <- 2003 DDIR <- "/ home / user / projekt / R / stopp / data /" # ES csv ( paste ( dDir , "Unemployment-NS-M-ES.csv" , sep = "" ) ) ESP <- läs. Csv (pasta (DDIR, "Arbetslöshet-NS-M-ES.csv", september = "")) pES [ 'INDICATOR_VALUE' ] , start = yStart , frequency = 12 ) paroES <- TS (PES ['INDICATOR_VALUE'], start = yStart, frekvens = 12) # EA15 csv ( paste ( dDir , "/Unemployment-NS-M-EA15.csv" , sep = "" ) ) paroEA15 <- läs. csv (pasta (DDIR, "/ Arbetslöshet-NS-M-EA15.csv", september = "")) paroEA15 [ 'INDICATOR_VALUE' ] / 15 , start = yStart , frequency = 12 ) paroEA15 <- TS (paroEA15 ['INDICATOR_VALUE'] / 15, start = yStart, frekvens = 12) paroEA15 , paroES ) minmax <- intervall (paroEA15, paroES) X11 () paroES , main = "Parados" , type = "l" , ylab = "x 1000 personas" , plot (paroES, huvud = "arbetslösa", type = "l", YLAB = "1000 personer x" Enero 2003 - Mayo 2009" , XLab = "Månad \ n januari 2003 - maj 2009" minmax [ 1 ] , minmax [ 2 ] + 1000 ) , ylim = c (minmax [1], [minmax 2] + 1000) , sub = "(Fuente:Eurostat)" , lwd = 2 ) col = "red", sub = "(Källa: Eurostat)", lwd = 2) paroEA15 , col= "green4" , type = "l" , lwd = 2 ) linjer paroEA15 (, col = "green4" type = "l", lwd = 2) paroES ) [ 1 ] * dim ( paroES ) [ 2 ] upprepa <- dim (paroES) [1] * dim (paroES) [2] ts ( rep ( 1000 , repe ) , start = yStart , frequency = 12 ) , type = "l" , linjer (ts (rep 1000 (upprepade) start = yStart, frekvens = 12), type = "l" , lty= "dashed" ) col = "grå", lty = "streckade") ts ( rep ( 4000 , repe ) , start = yStart , frequency = 12 ) , type = "l" , linjer (ts (rep 4000 (upprepade) start = yStart, frekvens = 12), type = "l" , lty= "dashed" ) col = "grå", lty = "streckade") , legend= c ( "ES" , "EA15 (media)" ) , col= c ( 'red' , 'green4' ) , legend ("topright", legend = c ("ES", "EA15 (medel)"), col = c ("röda", "green4) , lty= 1 , lwd= 1 ) BG = "gray99", lty = 1, lwd = 1) ( ) dev. off ()
![[Paro_serie.png]](/images/paro/paro_serie.png)
Model Selection: Box-Jenkins metod
Här kommer heuristisk del av processen. Ungefärliga värden av p, d, q.
Detta är ett icke-stationära serier, så vi måste differentiera och observera correlograms, och från dem härleda värdena för p och q. Men eftersom vi har en dator:) följer vi en metod som några diskreta uppgifter kriterier: AIC (Akaike) och / eller BIC (Bayes) . Närmar sig värdena för p och q (och d eftersom vi inte kommer att skilja i förväg) att minimera BIC och AIC.
AIC, kommer genom den mycket Arima i AIC del av klassen, och BIC är i paketet stats4 . Medan BIC stats4 Arima verkar inte fungera, så vi måste nöja oss med AIC, eller program som vi behöver kriterier. Eftersom det sistnämnda eftersom vi har den återstående variansen i komponenten klassen sigma2 Arima. Detta kan även inbegripa kriteriet Hannan-Quinn , HQIC.
Å andra sidan skulle behöva överväga säsongsvariation, med värden av p, d, q alternativ. Konsekvensen av cykliska mönster som visas i correlograms
Efter svettas lite med loopar, sluta vi att en modell SARIMA (0,2,0) x (0,1,1) kan ge oss goda resultat.
# ARIMA - Valda detaljhandel BIC och AIC arima ( pES [ 'INDICATOR_VALUE' ] , arbetslöshet. Arima <- Arima (PES ['INDICATOR_VALUE'] 0 , 2 , 0 ) , seasonal = list ( order = c ( 0 , 1 , 1 ) , period = 12 ) ) För = c (0, 2, 0), säsongens = lista (För = c (0, 1, 1), period = 12)) arbetslöshet. Arima Kontrollera # c ( 1 , 1 ) ) pari (mfrow = c (1, 1)) X11 () arima ) # (test de Ljung-Box ERRONEO) tsdiag (unemployment. Arima) # (Ljung-Box test fel) ( ) dev. off () # Kriterier för information ... # Paro.arima $ AIC paro . arima $ coef ) k = längd (unemployment. Arima $ koefficienten) pES ) T = längd (PES) ( paro . arima $ sigma2 ) + ( 2 * k ) / T #Akaike AIC <- log (unemployment. Arima $ sigma2) + (2 * k) / T # Akaike ( paro . arima $ sigma2 ) + ( k / T ) * log ( T ) #Bayesiano BIC <- log (unemployment. Arima $ sigma2) + (K / T) * log (T) # Bayesianska ( paro . arima $ sigma2 ) + ( ( 2 * k ) / T ) * log ( log ( T ) ) #Hannan-Quinn HQIC <- log (unemployment. Arima $ sigma2) + ((2 * k) / T) * log (log (T)) # Hannan-Quinn , format ( AIC ) , "BIC:" , format ( BIC ) , "HQIC:" , format ( HQIC ) ) Klistra in ("AIC", format (AIC), BIC: "format (BIC)," HQIC: "format (HQIC))
Och vi kan utvärdera autokorrelation av resthalter i diagrammet:
![[Paro_arimadiag.png]](/images/paro/paro_arimadiag.png)
tsdiag , som får oss att förkasta nollhypotesen. Av den anledningen inkluderar jag det i diagrammet. Prediction
Nu kommer den intressanta delen med prognoserna, säger fram till slutet av året.
# Prediction predict ( paro . arima , n . ahead = 7 ) #Junio-Diciembre de 2009 paroES. förutsäga <- förutsäga (unemployment. Arima, n. framåt = 7) # juni till december, 2009 # Plot prognos c ( 2009 , 6 ) #Comienzo predicción Pred. startar <- c (2009, 6) # start prognos predict $ pred + 2 * paroES . predict $ se UCS = paroES. Tippa $ Pred + 2 * paroES. Tippa $ är predict $ pred - 2 * paroES . predict $ se LCS = paroES. Tippa $ Pred - 2 * paroES. Tippa $ är predict <- min ( LCS , paroES ) min. paroES. förutsäga <- min (LCS, paroES) predict <- max ( UCS , paroES ) max. paroES. förutsäga <- max (UCS, paroES) ts ( UCS , start = pred . start , frequency = 12 ) ts. UCS <- TS (UCS, start = Pred. startar, frekvens = 12) ts ( LCS , start = pred . start , frequency = 12 ) ts. LCS <- TS (LCS, start = Pred. startar, frekvens = 12) X11 () ( paroES , ts ( paroES . predict $ pred , start = pred . start , frequency = 12 ) , ts. plot (paroES, ts (paroES. förutsäga $ Pred, start = Pred. startar, frekvens = 12) Predicción" , type = "l" , viktigaste = "Arbetslösa SV \ n Prediction", type = "l" , xlab = "Mensual" , YLAB = "x 1000 människor" XLab = "Månadsvis" min . paroES . predict , max . paroES . predict ) , lwd = c ( 2 , 3 ) , ylim = c (min. paroES. förutsäga, max. paroES. förutsäga), lwd = c (2, 3) "red" , "blue" ) , sub = "Enero 2003 - Diciembre 2009" ) col = c ("röd", "blå"), sub = "januari 2003 - december 2009) ts . UCS , col= "dark red" , lty= "dotted" , lwd = 2 ) linjer (ts. UCS, col = "mörkt röd", lty = "prickad", lwd = 2) ts . LCS , col= "dark green" , lty= "dotted" , lwd = 2 ) linjer (ts. LCS, col = "mörkgröna", lty = "prickad", lwd = 2) ts ( rep ( 5000 , repe ) , start = yStart , frequency = 12 ) , type = "l" , linjer (ts (rep 5000 (upprepade) start = yStart, frekvens = 12), type = "l" , lty= "dashed" ) col = "grå", lty = "streckade") ( ) dev. off () # Skriv ut förutsägelse paroES . predict $ pred , start = pred . start , frequency = 12 ) Prediction <- TS (paroES. tippa $ Pred, start = Pred. Start, frekvens = 12) Predic , ts . UCS , ts . LCS ) resultat <- rbind (predikanter, ts. UCS, ts. LCS) <- c ( "Jun" , "Jul" , "Ago" , "Sep" , "Oct" , "Nov" , "Dic" ) colname (resultat) <- c ("juni", "juli", "sedan", "September", "Oktober" November "December") c ( "Predicción:" ) ) print (c ("Förutsägelse:")) resultat
Detta resultat ger oss:
"Prediction" Juni juli augusti september oktober november december Prediction 4436,84 4482.636 4592.294 4689.091 4834.444 4981.932 5102.101 ts.UCS 4505,45 4636.053 4849.009 5064.884 5343.270 5636.430 5913.906 ts.LCS 4368,23 4329.219 4335.578 4313.299 4325.618 4327.434 4290.297
Och vars graf:
![[Paro_predict.png]](/images/paro/paro_predict.png)
Ca 5 miljoner vid årets slut ... Jag hoppas inte det.
Taggar: ARIMA , nationalekonomi , statistik , Linux , R , Tidsserier
![[Hoover_vote_1932.jpg]](/images/paro/hoover_vote_1932.jpg)
![[Hem]](/wp-content/themes/OATech265/images/home.png)
![[Hem]](/wp-content/themes/OATech265/images/feed.png)




































