analisis de intervencion de series temporales ejemplo 1 , data estacional.sav

EJEMPLO 1 DEL ANALISIS DE INTERVENCION EN R.

library(haven)
library(readxl)
library(tseries)
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
library(stargazer)

Please cite as: 
 Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
 R package version 5.2.3. https://CRAN.R-project.org/package=stargazer 
library(lmtest)
Cargando paquete requerido: zoo

Adjuntando el paquete: 'zoo'
The following objects are masked from 'package:base':

    as.Date, as.Date.numeric
library(car)
Cargando paquete requerido: carData
library(strucchange)
Cargando paquete requerido: sandwich
library(TSstudio)
library(forecast)
datos=read_sav("ESTACIONAL.sav")

los datos se pueden descargar en el siguiente enlace: https://github.com/jaimeisaac/datassets/blob/main/ESTACIONAL.sav

o si no se puede descargar del enlace anterior, pueden usar el siguiente
https://drive.google.com/file/d/10vVDNb5Iv3MQCsx-WUbMVtcBSMJ-la-f/view?usp=sharing

head(datos)
# A tibble: 6 × 4
      X YEAR_ MONTH_ DATE_   
  <dbl> <dbl>  <dbl> <chr>   
1  80.5  1968      1 JAN 1968
2  84.6  1968      2 FEB 1968
3 127.   1968      3 MAR 1968
4 162    1968      4 APR 1968
5 141.   1968      5 MAY 1968
6 138.   1968      6 JUN 1968
data=datos[,1]
head(data)
# A tibble: 6 × 1
      X
  <dbl>
1  80.5
2  84.6
3 127. 
4 162  
5 141. 
6 138. 
attach(data)
attach(datos)
The following object is masked from data:

    X
#tsoutliers(X)
serieX=ts(X,start = c(1968,1),frequency = 12)
library(tsoutliers)
#serieLS=ts(LS,start = c(1968,1),frequency = 12)
plot(serieX,col='red')

##autoplot(tsclean(serieX), series="clean", color='red', lwd=0.9) +
  #autolayer(serieX, series="original", color='gray', lwd=1) +
  #geom_point(data = tsoutliers(serieX) %>% as.data.frame(),
             #aes(x=index, y=replacements), col='blue') +
  #labs(x = "ano", y = "X ($US)")
modelo=tsoutliers::tso(serieX)
modelo
Series: serieX 
Regression with ARIMA(1,0,1)(0,1,1)[12] errors 

Coefficients:
         ar1      ma1     sma1     LS147
      0.9547  -0.1764  -0.7837  -46.7577
s.e.  0.0265   0.0763   0.0985   12.6145

sigma^2 = 180.4:  log likelihood = -622.69
AIC=1255.38   AICc=1255.78   BIC=1270.56

Outliers:
  type ind    time coefhat  tstat
1   LS 147 1980:03  -46.76 -3.707
plot(modelo)

tsoutliers::plot.tsoutliers(modelo)

Ecuacion del modelo:

\[ (1-0.9547B)(1-B^{12})X_t=(1-(-0.1764)B)(1-(-0.7837)B^{12})e_t+\frac{1}{1-B}46.7577I^{1980:03}\]

tsoutliers::print.tsoutliers(modelo)
Series: serieX 
Regression with ARIMA(1,0,1)(0,1,1)[12] errors 

Coefficients:
         ar1      ma1     sma1     LS147
      0.9547  -0.1764  -0.7837  -46.7577
s.e.  0.0265   0.0763   0.0985   12.6145

sigma^2 = 180.4:  log likelihood = -622.69
AIC=1255.38   AICc=1255.78   BIC=1270.56

Outliers:
  type ind    time coefhat  tstat
1   LS 147 1980:03  -46.76 -3.707
# Crear una secuencia de números de fila para la condición
filas <- 1:nrow(data)

# Si el número de fila es mayor o igual a 112, pone 1, de lo contrario, pone 0.
data$LS <- ifelse(filas==147, 1, 0)
print(head(data,10))
# A tibble: 10 × 2
       X    LS
   <dbl> <dbl>
 1  80.5     0
 2  84.6     0
 3 127.      0
 4 162       0
 5 141.      0
 6 138.      0
 7 140.      0
 8 137.      0
 9 134.      0
10 141.      0
attach(data)
The following object is masked from datos:

    X
The following object is masked from data (pos = 5):

    X
serieLS=ts(data[,2],start = 1968,frequency = 12)
plot(serieLS,col='blue')

library(forecast)
modelo1=Arima(serieX,order = c(0,1,1),seasonal = list(order=c(1,1,0),period=12),xreg = LS)
modelo1
Series: serieX 
Regression with ARIMA(0,1,1)(1,1,0)[12] errors 

Coefficients:
          ma1     sar1      xreg
      -0.1433  -0.3967  -20.9766
s.e.   0.0781   0.0766    9.7962

sigma^2 = 232.9:  log likelihood = -633.59
AIC=1275.19   AICc=1275.46   BIC=1287.31
library(lmtest)
coeftest(modelo1)

z test of coefficients:

       Estimate Std. Error z value  Pr(>|z|)    
ma1   -0.143284   0.078083 -1.8350   0.06650 .  
sar1  -0.396719   0.076611 -5.1784 2.238e-07 ***
xreg -20.976572   9.796213 -2.1413   0.03225 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
checkresiduals(modelo1)


    Ljung-Box test

data:  Residuals from Regression with ARIMA(0,1,1)(1,1,0)[12] errors
Q* = 26.587, df = 22, p-value = 0.2273

Model df: 2.   Total lags used: 24
accuracy(modelo1)
                     ME     RMSE      MAE        MPE     MAPE     MASE
Training set -0.6693036 14.50711 11.37301 -0.9187322 9.379957 0.376606
                     ACF1
Training set -0.004885088
predicciones=forecast(modelo1,12,xreg=LS)
summary(predicciones)

Forecast method: Regression with ARIMA(0,1,1)(1,1,0)[12] errors

Model Information:
Series: serieX 
Regression with ARIMA(0,1,1)(1,1,0)[12] errors 

Coefficients:
          ma1     sar1      xreg
      -0.1433  -0.3967  -20.9766
s.e.   0.0781   0.0766    9.7962

sigma^2 = 232.9:  log likelihood = -633.59
AIC=1275.19   AICc=1275.46   BIC=1287.31

Error measures:
                     ME     RMSE      MAE        MPE     MAPE     MASE
Training set -0.6693036 14.50711 11.37301 -0.9187322 9.379957 0.376606
                     ACF1
Training set -0.004885088

Forecasts:
         Point Forecast        Lo 80     Hi 80       Lo 95      Hi 95
Nov 1981     43.7011034    24.143054  63.25915    13.78965   73.61256
Dec 1981     22.6942456    -3.059798  48.44829   -16.69317   62.08166
Jan 1982      8.4775435   -22.247434  39.20252   -38.51225   55.46734
Feb 1982      3.5738843   -31.422940  38.57071   -49.94914   57.09691
Mar 1982     35.6164195    -3.184755  74.41759   -23.72486   94.95770
Apr 1982     40.8680771    -1.396383  83.13254   -23.76984  105.50599
May 1982     31.1798571   -14.284834  76.64455   -38.35239  100.71210
Jun 1982     38.5053527    -9.948662  86.95937   -35.59867  112.60937
Jul 1982     36.4138512   -14.855487  87.68319   -41.99584  114.82354
Aug 1982     32.0970664   -21.840847  86.03498   -50.39385  114.58799
Sep 1982     34.4039242   -22.076621  90.88447   -51.97562  120.78346
Oct 1982     41.0819222   -17.831620  99.99546   -49.01857  131.18241
Nov 1982     -0.3462719   -65.815171  65.12263  -100.47231   99.77977
Dec 1982    -19.7635347   -90.529746  51.00268  -127.99112   88.46405
Jan 1983    -32.8627987  -108.556501  42.83090  -148.62633   82.90073
Feb 1983    -40.8197394  -121.139205  39.49973  -163.65776   82.01828
Mar 1983     -7.2468762   -91.939831  77.44608  -136.77357  122.27982
Apr 1983      1.9514739   -86.899955  90.80290  -133.93506  137.83801
May 1983     -9.0902627  -101.914055  83.73353  -151.05200  132.87148
Jun 1983     -6.2974737  -102.930472  90.33552  -154.08489  141.48994
Jul 1983     -9.8998774  -110.197516  90.39776  -163.29188  143.49212
Aug 1983    -17.8994863  -121.732507  85.93353  -176.69839  140.89942
Sep 1983    -17.1822235  -124.434152  90.06971  -181.20989  146.84545
Oct 1983    -12.5187617  -123.083929  98.04641  -181.61359  156.57607
Nov 1983    -54.3717234  -172.553742  63.81029  -235.11552  126.37208
Dec 1983    -74.4196081  -199.062741  50.22352  -265.04483  116.20561
Jan 1984    -87.9621806  -218.747622  42.82326  -287.98125  112.05689
Feb 1984    -94.7078277  -231.359769  41.94411  -303.69894  114.28328
Mar 1984    -61.7420741  -204.018826  80.53468  -279.33559  155.85144
Apr 1984    -54.1094503  -201.796943  93.57804  -279.97798  171.75908
May 1984    -64.6142218  -217.521111  88.29267  -298.46513  169.23668
Jun 1984    -60.0232238  -217.977134  97.93069  -301.59288  181.54644
Jul 1984    -63.0262244  -225.870810  99.81836  -312.07553  186.02308
Aug 1984    -69.5647885  -237.157391  98.02781  -325.87556  186.74598
Sep 1984    -68.2169038  -240.426664 103.99286  -331.58900  195.15520
Oct 1984    -62.7542380  -239.460556 113.95208  -333.00323  207.49475
Nov 1984   -104.4386866  -288.998563  80.12119  -386.69866  177.82129
Dec 1984   -124.2363918  -315.795663  67.32288  -417.20102  168.72823
Jan 1985   -137.6030955  -335.914872  60.70868  -440.89478  165.68859
Feb 1985   -144.8292854  -349.671095  60.01252  -458.10780  168.44923
Mar 1985   -111.6226801  -322.792690  99.54733  -434.57934  211.33398
Apr 1985   -103.3689036  -320.682914 113.94511  -435.72200  228.98420
May 1985   -114.0866991  -337.375717 109.20232  -455.57778  227.40438
Jun 1985   -110.2090840  -339.317337 118.89917  -460.59992  240.18175
Jul 1985   -113.4498790  -348.233179 121.33342  -472.51995  245.62019
Aug 1985   -120.5680668  -360.892440 119.75631  -488.11248  246.97634
Sep 1985   -119.4703615  -365.210896 126.27017  -495.29808  256.35735
Oct 1985   -114.3247548  -365.364625 136.71512  -498.25711  269.60760
Nov 1985   -156.0760556  -415.507432 103.35532  -552.84211  240.69000
Dec 1985   -175.9730118  -443.044450  91.09843  -584.42353  232.47751
Jan 1986   -189.4094859  -463.908424  85.08945  -609.21938  230.40041
Feb 1986   -196.4450355  -478.175724  85.28565  -627.31494  234.42487
Mar 1986   -163.3339805  -452.115377 125.44742  -604.98701  278.31905
Apr 1986   -155.3266269  -450.990640 140.33739  -607.50571  296.85246
May 1986   -165.9599118  -468.349929 136.43011  -628.42553  296.50571
Jun 1986   -161.7992844  -470.768921 147.17035  -634.32757  310.72900
Jul 1986   -164.9457420  -480.357775 150.46629  -647.32682  317.43533
Aug 1986   -171.8339823  -493.559431 149.89147  -663.87060  320.20263
Sep 1986   -170.6370261  -498.554360 157.28031  -672.14331  330.86926
Oct 1986   -165.3656362  -499.360085 168.62881  -676.16607  345.43479
Nov 1986   -207.0904155  -549.929517 135.74869  -731.41758  317.23674
Dec 1986   -226.9479970  -577.974689 124.07870  -763.79700  309.90100
Jan 1987   -240.3567918  -599.384406 118.67082  -789.44214  308.72856
Feb 1987   -247.4679720  -614.322053 119.38611  -808.52287  313.58693
Mar 1987   -214.3190104  -588.836040 160.19802  -787.09338  358.45536
Apr 1987   -206.2138963  -588.240197 175.81240  -790.47270  378.04491
May 1987   -216.8807081  -606.271493 172.51008  -812.40252  378.64111
Jun 1987   -212.8323570  -609.450904 183.78619  -819.40808  393.74337
Jul 1987   -216.0162399  -619.733171 187.70069  -833.44801  401.41553
Aug 1987   -222.9957047  -633.688351 187.69694  -851.09591  405.10450
Sep 1987   -221.8381232  -639.389963 195.71372  -860.42855  416.75231
Oct 1987   -216.6166338  -640.916796 207.68353  -865.52773  432.29447
Nov 1987   -258.3519347  -691.967597 175.26373  -921.50986  404.80599
Dec 1987   -278.2251368  -720.558958 164.10868  -954.71634  398.26607
Jan 1988   -291.6449126  -742.528353 159.23853  -981.21163  397.92180
Feb 1988   -298.7260887  -758.000020 160.54784 -1001.12495  403.67278
Mar 1988   -265.5921653  -733.106028 201.92170  -980.59292  449.40859
Apr 1988   -257.5258346  -733.136893 218.08522  -984.91018  469.85851
May 1988   -268.1793457  -751.752035 215.39334 -1007.73995  471.38126
Jun 1988   -264.0864525  -755.491797 227.31889 -1015.62607  487.45317
Jul 1988   -267.2554881  -766.370585 231.85961 -1030.58616  496.07518
Aug 1988   -274.1987624  -780.906319 232.50879 -1049.14110  500.74357
Sep 1988   -273.0255603  -787.213478 241.16236 -1059.40812  513.35700
Oct 1988   -267.7842744  -789.345280 253.77673 -1065.44300  529.87445
Nov 1988   -309.5154012  -840.838515 221.80771 -1122.10398  503.07318
Dec 1988   -329.3824063  -869.919239 211.15443 -1156.06215  497.29734
Jan 1989   -342.7978257  -892.393935 206.79828 -1183.33254  497.73689
Feb 1989   -349.8909050  -908.399365 208.61755 -1204.05588  504.27407
Mar 1989   -316.7510157  -884.031824 250.52979 -1184.33214  550.83011
Apr 1989   -308.6692989  -884.588852 267.25025 -1189.46225  572.12365
May 1989   -319.3280866  -903.758705 265.10253 -1213.13759  574.48141
Jun 1989   -315.2528641  -908.072368 277.56664 -1221.89206  591.38633
Jul 1989   -318.4277899  -919.519115 282.66353 -1237.71764  600.86206
Aug 1989   -325.3854216  -934.636270 283.86543 -1257.15419  606.38334
Sep 1989   -324.2184165  -941.520946 293.08411 -1268.30117  619.86433
Oct 1989   -318.9849843  -944.235517 306.26555 -1275.22316  637.25319
Nov 1989   -360.7177670  -996.165661 274.73013 -1332.55146  611.11592
Dec 1989   -380.5872306 -1025.721913 264.54745 -1367.23558  606.06112
Jan 1990   -394.0043782 -1048.682537 260.67378 -1395.24822  607.23946
Feb 1990   -401.0927353 -1065.177236 262.99177 -1416.72234  614.53686
Mar 1990   -367.9552128 -1041.314669 305.40424 -1397.76963  661.85921
Apr 1990   -359.8795999 -1042.387981 322.62878 -1403.68609  683.92689
May 1990   -370.5362943 -1062.072571 320.99998 -1428.14976  687.07717
Jun 1990   -366.4540615 -1066.901886 333.99376 -1437.69657  704.78844
Jul 1990   -369.6266506 -1078.874060 339.62076 -1454.32696  715.07366
Aug 1990   -376.5785865 -1094.517735 341.36056 -1474.57176  721.41459
Sep 1990   -375.4091229 -1101.936035 351.11779 -1486.53615  735.71790
Oct 1990   -370.1725750 -1105.186919 364.84177 -1494.28001  753.93486
Nov 1990   -411.9047007 -1157.535802 333.72640 -1552.24906  728.43966
Dec 1990   -431.7731890 -1187.541906 323.99553 -1587.62170  724.07532
Jan 1991   -445.1896510 -1210.961789 320.58249 -1616.33707  725.95777
Feb 1991   -452.2798815 -1227.926439 323.36668 -1638.52892  733.96916
Mar 1991   -419.1414201 -1204.538260 366.25542 -1620.30223  782.01939
Apr 1991   -411.0633856 -1206.090938 383.96417 -1626.95310  804.82633
May 1991   -421.7209105 -1226.263901 382.82208 -1652.16323  808.72141
Jun 1991   -417.6414588 -1231.588655 396.30574 -1662.46627  827.18336
Jul 1991   -420.8149749 -1244.058955 402.42901 -1679.85799  838.22804
Aug 1991   -427.7691704 -1260.206114 404.66777 -1700.87161  845.33327
Sep 1991   -426.6006821 -1268.130170 414.92881 -1713.60897  860.40761
Oct 1991   -421.3653703 -1271.890204 429.15946 -1722.13085  879.40011
Nov 1991   -463.0977567 -1324.645464 398.44995 -1780.72127  854.52576
Dec 1991   -482.9666318 -1355.084262 389.15100 -1816.75545  850.82218
Jan 1992   -496.3833659 -1378.944337 386.17761 -1846.14389  853.37716
Feb 1992   -503.4728531 -1396.355027 389.40932 -1869.01830  862.07259
Mar 1992   -470.3347642 -1373.420190 432.75066 -1851.48474  910.81521
Apr 1992   -462.2576904 -1375.432369 450.91699 -1858.83784  934.32246
May 1992   -472.9148858 -1396.068558 450.23879 -1884.75659  938.92682
Jun 1992   -468.8343308 -1401.860274 464.19161 -1895.77437  958.10571
Jul 1992   -472.0074792 -1414.802324 470.78737 -1913.88777  969.87281
Aug 1992   -478.9607782 -1431.424336 473.50278 -1935.62809  977.70653
Sep 1992   -477.7919030 -1439.827005 484.24320 -1949.09762  993.51382
Oct 1992   -472.5561008 -1444.068450 498.95625 -1958.35602 1013.24382
Nov 1992   -514.2883838 -1497.216697 468.63993 -2017.54752  988.97075
Dec 1992   -534.1571055 -1528.070852 459.75664 -2054.21701  985.90280
Jan 1993   -547.5737316 -1552.352813 457.20535 -2084.25073  989.10327
Feb 1993   -554.6635137 -1570.191686 460.86466 -2107.77983  998.45280
Mar 1993   -521.5252770 -1547.689950 504.63940 -2090.90871 1047.85816
Apr 1993   -513.4478221 -1550.139870 523.24423 -2098.93149 1072.03585
May 1993   -524.1051482 -1571.218738 523.00844 -2125.52719 1077.31689
Jun 1993   -520.0250309 -1577.457457 537.40740 -2137.22837 1097.17831
Jul 1993   -523.1983251 -1590.849861 544.45321 -2156.03044 1109.63379
Aug 1993   -530.1519798 -1607.925736 547.62178 -2178.46470 1118.16074
Sep 1993   -528.9832582 -1616.785049 558.81853 -2192.63253 1134.66602
Oct 1993   -523.7476505 -1621.485872 573.99057 -2202.59338 1155.09808
Nov 1993   -565.4799745 -1675.015391 544.05544 -2262.36796 1131.40801
Dec 1993   -585.3487571 -1706.270239 535.57272 -2299.65023 1128.95271
Jan 1994   -619.7419979 -1751.935045 512.45105 -2351.28184 1111.79785
Feb 1994   -605.8550911 -1749.208591 537.49841 -2354.46337 1142.75319
Mar 1994   -572.7169131 -1727.122974 581.68915 -2338.22863 1192.79480
Apr 1994   -564.6396094 -1729.993410 600.71419 -2346.89445 1217.61523
May 1994   -575.2968836 -1751.496530 600.90276 -2374.13901 1223.54525
Jun 1994   -571.2165927 -1758.162985 615.72980 -2386.49445 1244.06126
Jul 1994   -574.3898290 -1771.986533 623.20688 -2405.95593 1257.17627
Aug 1994   -581.3433426 -1789.496476 626.80979 -2429.05411 1266.36743
Sep 1994   -580.1745600 -1798.792680 638.44356 -2443.89014 1283.54102
Oct 1994   -574.9388752 -1803.932874 654.05512 -2454.52300 1304.64525
Nov 1994   -616.6711829 -1857.832527 624.49016 -2514.86365 1281.52129
Dec 1994   -636.5399413 -1889.474525 616.39464 -2552.73803 1279.65815
Jan 1995   -649.9565933 -1914.554814 614.64163 -2583.99267 1284.07949
Feb 1995   -657.0463048 -1933.201566 619.10896 -2608.75735 1294.66474
Mar 1995   -623.9081035 -1911.516677 663.70047 -2593.13548 1345.31928
Apr 1995   -615.8307398 -1914.791643 683.13016 -2602.42001 1370.75853
May 1995   -626.4880346 -1936.702909 683.72684 -2630.28877 1377.31270
Jun 1995   -622.4078126 -1943.780813 698.96519 -2643.27343 1398.45780
Jul 1995   -625.5810719 -1958.018761 706.85662 -2663.36867 1412.20652
Aug 1995   -632.5346415 -1975.945891 710.87661 -2687.10485 1422.03557
autoplot(predicciones)

library(dygraphs)
dygraph(serieX, main = "Ejemplo de Serie de Tiempo") %>%
  dyAxis("y", label = "Valores") %>%
  dyAxis("x", label = "Fecha") %>%
  dyOptions(colors = "blue", strokeWidth = 2) %>%
  dyHighlight(highlightCircleSize = 5, highlightSeriesBackgroundAlpha = 0.2) %>%
  dyRangeSelector()  # Agrega un selector de rango en la parte inferior
library(ggplot2)

# Graficar usando plot()
plot(serieX, type = "o", col = "blue", main = "Serie de Tiempo con Base R", xlab = "Año", ylab = "X")

library(ggplot2)

# Convertir los datos en un data frame
data$Fecha <- as.Date(paste(datos$YEAR_, datos$MONTH_, "01", sep = "-"), "%Y-%m-%d")

# Graficar con ggplot2
ggplot(data, aes(x = Fecha, y = X)) +
  geom_line(color = "blue") +
  geom_point() +
  ggtitle("Serie de Tiempo con ggplot2") +
  xlab("Fecha") +
  ylab("X")

library(plotly)

Adjuntando el paquete: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout
# Graficar con plotly
plot_ly(x = ~data$Fecha, y = ~data$X, type = 'scatter', mode = 'lines+markers',
        line = list(color = 'blue')) %>%
  layout(title = "Serie de Tiempo Interactiva con plotly",
         xaxis = list(title = "Fecha"),
         yaxis = list(title = "X"))
library(forecast)

# Graficar con forecast usando autoplot
autoplot(serieX) +
  ggtitle("Serie de Tiempo con forecast") +
  xlab("Fecha") +
  ylab("X")

# Descomponer usando stl()
#stl_descomposicion <- stl(serieX, s.window = "periodic")

# Graficar la descomposición
#plot(stl_descomposicion)
# Graficar la función de autocorrelación
#acf(serieX, main = "Función de Autocorrelación")
# Graficar el periodograma
#spectrum(serieX, main = "Periodograma")
# Instalar y cargar el paquete uroot
#install.packages("uroot")
library(uroot)

# Realizar el test de estacionalidad OCSB
resultado_ocsb <- ocsb.test(serieX)

# Mostrar los resultados
print(resultado_ocsb)

    OCSB test

data:  serieX

Test statistic: -4.9305, 5% critical value: -1.803
alternative hypothesis: stationary

Lag order 0 was selected using fixed
# Instalar los paquetes necesarios
#install.packages("isotree")
#install.packages("dplyr")
#install.packages("ggplot2")

# Cargar los paquetes
library(isotree)
library(dplyr)

Adjuntando el paquete: 'dplyr'
The following object is masked from 'package:car':

    recode
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(ggplot2)
# Convertir las fechas a un formato Date adecuado
datos$Fecha <- as.Date(paste(datos$YEAR_, datos$MONTH_, "01", sep = "-"), "%Y-%m-%d")

# Seleccionar solo la columna de interés y eliminar NAs si los hay
datos <- data %>%
  select(Fecha, X) %>%
  na.omit()

# Visualizar los primeros datos
head(data)
# A tibble: 6 × 3
      X    LS Fecha     
  <dbl> <dbl> <date>    
1  80.5     0 1968-01-01
2  84.6     0 1968-02-01
3 127.      0 1968-03-01
4 162       0 1968-04-01
5 141.      0 1968-05-01
6 138.      0 1968-06-01
# Convertir los datos a un formato adecuado para Isolation Forest
# Isolation Forest espera un data frame con las características numéricas, así que solo utilizamos la columna 'X'
modelo_iforest <- isolation.forest(data.frame(data$X), ntrees = 100, sample_size = 256)
Warning in isolation.forest(data.frame(data$X), ntrees = 100, sample_size =
256): 'sample_size' is larger than the number of rows in 'data', will be
decreased.
# Predecir anomalías
predicciones <- predict(modelo_iforest, data.frame(data$X))

# Añadir las predicciones al data frame original
data$anomalies_score <- predicciones

# Determinar un umbral para identificar anomalías
# Generalmente, los valores más altos indican mayor probabilidad de ser una anomalía
umbral <- 0.6  # Este valor puede ajustarse según el análisis
data$anomaly <- ifelse(data$anomalies_score > umbral, "Anomalía", "Normal")
data$anomaly
         1          2          3          4          5          6          7 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
         8          9         10         11         12         13         14 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        15         16         17         18         19         20         21 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        22         23         24         25         26         27         28 
  "Normal"   "Normal"   "Normal" "Anomalía"   "Normal"   "Normal"   "Normal" 
        29         30         31         32         33         34         35 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        36         37         38         39         40         41         42 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        43         44         45         46         47         48         49 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        50         51         52         53         54         55         56 
  "Normal"   "Normal"   "Normal" "Anomalía" "Anomalía"   "Normal" "Anomalía" 
        57         58         59         60         61         62         63 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        64         65         66         67         68         69         70 
  "Normal" "Anomalía"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        71         72         73         74         75         76         77 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        78         79         80         81         82         83         84 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" "Anomalía" 
        85         86         87         88         89         90         91 
"Anomalía" "Anomalía"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        92         93         94         95         96         97         98 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
        99        100        101        102        103        104        105 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       106        107        108        109        110        111        112 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       113        114        115        116        117        118        119 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       120        121        122        123        124        125        126 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       127        128        129        130        131        132        133 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       134        135        136        137        138        139        140 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       141        142        143        144        145        146        147 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       148        149        150        151        152        153        154 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       155        156        157        158        159        160        161 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
       162        163        164        165        166 
  "Normal"   "Normal"   "Normal"   "Normal"   "Normal" 
# Graficar la serie de tiempo con ggplot2, resaltando las anomalías
ggplot(data, aes(x = Fecha, y = X)) +
  geom_line(color = "blue") +
  geom_point(aes(color = anomaly), size = 2) +
  scale_color_manual(values = c("Normal" = "black", "Anomalía" = "red")) +
  ggtitle("Detección de Anomalías usando Isolation Forest") +
  xlab("Fecha") +
  ylab("X")

GRAFICO DE RANGO MEDIA.

datos=read_sav("estacional.sav")
# Cargar los datos
#data <- read.csv("ruta/del/archivo/estacional1.csv")

# Convertir las fechas a un formato Date adecuado
datos$Fecha <- as.Date(paste(datos$YEAR_, datos$MONTH_, "01", sep = "-"), "%Y-%m-%d")

# Calcular la media y el rango por año
agg_data <- datos %>%
  group_by(YEAR_) %>%
  summarise(media = mean(X), rango = max(X) - min(X))

# Ver los datos agregados
print(agg_data)
# A tibble: 14 × 3
   YEAR_ media rango
   <dbl> <dbl> <dbl>
 1  1968 126.   81.5
 2  1969 122.   74.9
 3  1970 119.   74.5
 4  1971 171.  102. 
 5  1972 196.   79.5
 6  1973 170.  144. 
 7  1974 112.  105. 
 8  1975  96.7  68.9
 9  1976 128.   81.7
10  1977 166.  120  
11  1978 168.  127. 
12  1979 145.  107. 
13  1980 108.   79.6
14  1981  96.0  51.1
library(ggplot2)

# Graficar la media contra el rango
ggplot(agg_data, aes(x = media, y = rango)) +
  geom_point(color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red") +  # Ajustar una línea de tendencia
  ggtitle("Gráfico de Rango-Media de la Serie Temporal") +
  xlab("Media") +
  ylab("Rango")
`geom_smooth()` using formula = 'y ~ x'

El gráfico de rango-media es una herramienta útil para visualizar la relación entre la media de una serie temporal y la dispersión (rango) de sus valores. Este gráfico puede ayudarte a identificar la estacionalidad o tendencias en la variabilidad de la serie.

Voy a guiarte paso a paso para crear un gráfico de rango-media utilizando la serie temporal que has proporcionado.

Paso 1: Cargar y Preparar los Datos

Primero, necesitamos cargar el archivo estacional1.csv que has subido, inspeccionar los datos, y luego preparar la serie temporal en R.

Paso 2: Crear el Gráfico de Rango-Media

El gráfico de rango-media se construye de la siguiente manera:

  1. Dividir la serie temporal en subseries: Dividimos la serie temporal en intervalos de tiempo (por ejemplo, años, meses).
  2. Calcular la media y el rango para cada subserie: Para cada intervalo, calculamos la media y el rango de los valores.
  3. Graficar las medias contra los rangos: Graficamos la media en el eje X y el rango en el eje Y para cada subserie.

Los datos se han cargado correctamente. Ahora procederemos a crear el gráfico de rango-media en R usando los siguientes pasos:

  1. Dividir la serie temporal en subseries: Utilizaremos intervalos mensuales para calcular la media y el rango.
  2. Calcular la media y el rango para cada subserie.
  3. Graficar las medias contra los rangos.

Paso 3: Interpretación del Gráfico

  • Eje X (Media): Representa la media de la serie temporal en cada año.

  • Eje Y (Rango): Representa la diferencia entre el valor máximo y el mínimo de la serie temporal en cada año.

  • Tendencia: Si observas una relación lineal o algún patrón en el gráfico, puede indicar que hay una relación entre la media y la dispersión de la serie temporal.

la serie no es estacionaria en Varianza.

Observaciones Clave del Gráfico:

  1. Relación Positiva Entre Media y Rango:

    • Se observa una tendencia ascendente en el gráfico, lo que indica que a medida que aumenta la media, también lo hace el rango. Esto sugiere que los valores de la serie temporal tienden a dispersarse más (es decir, hay más variabilidad) cuando la media es más alta.

    • La línea roja ajustada a los puntos también refuerza esta relación positiva, mostrando una pendiente ascendente.

  2. Estacionariedad en Varianza:

    • No estacionaria en varianza: La relación positiva entre la media y el rango sugiere que la serie temporal no es estacionaria en varianza. En una serie estacionaria en varianza, esperaríamos que el rango no dependiera de la media; es decir, que la variabilidad se mantuviera constante sin importar el nivel promedio de la serie.

    • En este caso, dado que la variabilidad parece aumentar con la media, esto es un indicio de que la serie podría tener heterocedasticidad, lo que significa que la varianza no es constante a lo largo del tiempo.

Conclusión

El gráfico sugiere que la serie temporal no es estacionaria en varianza, ya que existe una relación positiva entre la media y el rango. Esto significa que a medida que el nivel promedio de la serie temporal aumenta, la variabilidad de los datos también lo hace.

Si estás analizando esta serie para modelado o pronóstico, es posible que necesites transformar la serie (por ejemplo, aplicando una transformación logarítmica) o utilizar métodos específicos que manejen la heterocedasticidad, como los modelos GARCH, para tratar con la no estacionariedad en varianza.

#library(readxl)
#interv1 <- read_excel("interv1.xlsx", sheet = "interv",range = "A2:G38")
#interv1
#interv1=interv1[,2:3]
#interv1
#library(readxl)
#interv1 <- read_excel("interv1.xlsx", range = "A2:G38")
#head(interv1)
#interv1=interv1[,2:3]
#interv1
#library(tsoutliers)
#serie=ts(interv1[,2],start =c(2004,11) ,frequency = 12)
#serie
#library(fpp2)
#library(fpp3)
#autoplot(serie)
#modeloA=tsoutliers::tso(serie)
#print(modeloA)
#autoarima=auto.arima(serie)
#autoarima
#summary(autoarima)
#library(fpp3)
#gg_tsresiduals(autoarima)
# Realizar predicciones para los próximos 12 meses
#predicciones <- forecast(autoarima, h = 12)

# Graficar las predicciones
#autoplot(predicciones)
#checkresiduals(autoarima)
#gg_tsresiduals(autoarima)
#library(forecast)

# Crear correlograma de ACF con ggAcf
#ggAcf(serie, main = "Correlograma de ACF", lag.max = 36)

# Crear correlograma de PACF con ggPacf
#ggPacf(serie, main = "Correlograma de PACF", lag.max = 36)
# Instalar y cargar los paquetes necesarios
#install.packages(c("ggplot2", "forecast", "patchwork", "ggfortify"))
#library(ggplot2)
#library(forecast)
#library(patchwork)
#library(ggfortify)

# Crear la serie temporal (por ejemplo, desde datos ya cargados)
# serie <- ts(data$X, start = c(1960, 1), frequency = 12)

# Correlogramas con ggAcf y ggPacf del paquete forecast
#p1 <- ggAcf(serie, main = "ACF (forecast)")
#p2 <- ggPacf(serie, main = "PACF (forecast)")

# Combinar ambos gráficos en uno solo
#p1 + p2

# Correlogramas con ggplot2 y ggfortify
#autoplot(acf(serie, plot = FALSE), main = "ACF (ggplot2)")
#autoplot(pacf(serie, plot = FALSE), main = "PACF (ggplot2)")
#serie1 <- ts(interv1[,2],
          #start = c(2004,11),
          #freq = 12)

#plot(serie1)
# Plot the series
#ts_plot(serie1,
        #title = "US Monthly Natural Gas Consumption",
        #Ytitle = "Billion Cubic Feet",
       # Xtitle = "Source: Federal Reserve Bank of St. Louis", 
        #slider = TRUE)
#ts_seasonal(serie1, type = "all")
#ts_info(serie1)
#ts_cor(serie1
       #, lag = 36)
#serieA <- ts_to_prophet(serie1) # converting the series to df format
#head(serieA)
#library(tseries)
# Realizar la prueba de Dickey-Fuller
#resultado_adf <- adf.test(serie, alternative = "stationary")

# Mostrar los resultados
#print(resultado_adf)
#tail(serieA)
#ts_lags(serie1)
#ts_lags(serie1, lags = c(12, 24, 36, 48))
#library(lubridate)
#serieA$flag <- ifelse(year(serieA$ds) >= 2006, 1, 0)
#serieA
# Definir el tamaño de las submuestras
#tamaño_submuestra <- 12

# Crear un data frame para almacenar las medias y rangos
#num_submuestras <- length(serie) %/% tamaño_submuestra
#medias <- numeric(num_submuestras)
#rangos <- numeric(num_submuestras)

# Calcular las medias y rangos para cada submuestra
#for (i in 1:num_submuestras) {
  #submuestra <- serie[((i - 1) * tamaño_submuestra + 1):(i * tamaño_submuestra)]
 # medias[i] <- mean(submuestra)
 # rangos[i] <- max(submuestra) - min(submuestra)
#}
# Ajustar un modelo lineal
#modelo <- lm(rangos ~ medias)

# Resumen del modelo
#summary(modelo)

Interpretación:

  • Si la pendiente es cercana a cero y no es estadísticamente significativa (valor p > 0.05), entonces puedes concluir que la serie es estacionaria en varianza.

  • Si la pendiente es significativa (valor p < 0.05), entonces hay evidencia de que la serie no es estacionaria en varianza.

# Crear un factor para los meses
#meses <- as.factor(cycle(serie))

# Realizar la prueba de Kruskal-Wallis
#kruskal_test <- kruskal.test(serie ~ meses)

# Mostrar los resultados
#print(kruskal_test)

El resultado de la prueba de Kruskal-Wallis que has realizado muestra lo siguiente:

  • Kruskal-Wallis chi-squared = 4.29129
  • Grados de libertad (df) = 11
  • p-value = 0.96061

Interpretación:

  • Valor p (p-value = 0.96061): El valor p es muy alto (mucho mayor que 0.05), lo que significa que no hay evidencia suficiente para rechazar la hipótesis nula. La hipótesis nula en la prueba de Kruskal-Wallis es que las medianas de los grupos (en este caso, los meses) son iguales.

  • Conclusión: Dado que no se rechaza la hipótesis nula, no hay evidencia estadística para afirmar que la serie tiene estacionalidad. En otras palabras, la prueba de Kruskal-Wallis no muestra diferencias significativas entre los valores de la serie en los diferentes meses, lo que sugiere que la serie no tiene estacionalidad.

#library(MTS)
#da=read.csv2("Stock_indexes_99world.csv", header=FALSE)
#head(da)
#x=da[,-1] # remove time index
#x
#datos=read_sav("estacional1.sav")
#data=datos[,c(1,5)]
#head(data)
# defining pre-intervention period
#pre_period<-as.Date(c("1968-01-01", "2016-08-01"))
# defining post-intervention period
#post_period<-as.Date(c("2016-09-01", "2019-10-01" ))

#time_period = seq.Date(as.Date("2006-06-01"), as.Date("2019-10-01"), by = "1 month")

# Creating the time series elements
#Rate_dif<- ts(Banking_Rates$Rate_Diff)
#Dep <- ts(Banking_Rates$Deposit)

# Merging the data
#library(zoo)
#Dif_Rate<-zoo(cbind(Rate_dif, Dep), time_period)