Integrantes:

  • Díaz Victor
  • Fiafilio Isabel
  • Palacios Leonardo
  • Quispe Griselda

1 Análisis de Componentes Principales

Con una data apropiada, primero haga el análisis exploratorio y luego aplique el Análisis de Componentes Principales.

1.1 Contexto

El conjunto de datos proviene de un estudio sobre incendios forestales en dos regiones de Argelia la región de Bejaia y la región de Sidi Bel-Abbes. La cronología de este conjunto de datos va de junio de 2012 a septiembre de 2012. Este estudio, se centro en determinar las características meteorológicas podían predecir los incendios forestales en estas regiones.

1.2 Variables

  • Fecha : (DD/MM/AAAA) Día, mes (‘junio’ a ‘septiembre’), año (2012)

  • Observaciones de datos meteorológicos

    - Temperature : temperatura mediodía (temperatura máxima) en grados Celsius: 22 a 42

    - RH : Humedad relativa en %: 21 a 90

    - Ws :Velocidad del viento en km/h: 6 a 29

    - Lluvia: total del día en mm: 0 a 16,8

  • Componentes FWI (Fire Weather Index) - Índice meteorológico de incendios

    - Índice del Código de Humedad de Combustible Fino (FFMC) del sistema FWI: 28,6 a 92,5

    - Índice del Código de Humedad de Duff (DMC) del sistema FWI: 1,1 a 65,9

    - Índice del Código de Sequía (DC) del sistema FWI: 7 a 220,4

    - Índice de dispersión inicial (ISI) del sistema FWI: 0 a 18,5

    - Índice de acumulación (BUI) del sistema FWI: 1,1 a 68

    - Índice meteorológico del incendio (FWI) del sistema FWI: 0 a 31,1

    - Clases: “Incendio” y “No incendio

library(readr)
library(DT)
Dataset <- read_csv("DatasetN.txt")
dim(Dataset)
[1] 244  14
datatable(Dataset,options = list(searching = FALSE))

1.3 Análisis exploratorio

1.3.1 Resumen estadístico del dataset

summary(Dataset)
     day               month                year       Temperature   
 Length:244         Length:244         Min.   :2012   Min.   :22.00  
 Class :character   Class :character   1st Qu.:2012   1st Qu.:30.00  
 Mode  :character   Mode  :character   Median :2012   Median :32.00  
                                       Mean   :2012   Mean   :32.17  
                                       3rd Qu.:2012   3rd Qu.:35.00  
                                       Max.   :2012   Max.   :42.00  
       RH              Ws            Rain              FFMC      
 Min.   :21.00   Min.   : 6.0   Min.   : 0.0000   Min.   :28.60  
 1st Qu.:52.00   1st Qu.:14.0   1st Qu.: 0.0000   1st Qu.:72.08  
 Median :63.00   Median :15.0   Median : 0.0000   Median :83.50  
 Mean   :61.94   Mean   :15.5   Mean   : 0.7607   Mean   :77.89  
 3rd Qu.:73.25   3rd Qu.:17.0   3rd Qu.: 0.5000   3rd Qu.:88.30  
 Max.   :90.00   Max.   :29.0   Max.   :16.8000   Max.   :96.00  
      DMC              DC              ISI             BUI       
 Min.   : 0.70   Min.   :  6.90   Min.   : 0.00   Min.   : 1.10  
 1st Qu.: 5.80   1st Qu.: 13.28   1st Qu.: 1.40   1st Qu.: 6.00  
 Median :11.30   Median : 33.10   Median : 3.50   Median :12.45  
 Mean   :14.67   Mean   : 49.29   Mean   : 4.76   Mean   :16.67  
 3rd Qu.:20.75   3rd Qu.: 68.15   3rd Qu.: 7.30   3rd Qu.:22.52  
 Max.   :65.90   Max.   :220.40   Max.   :19.00   Max.   :68.00  
      FWI           Classes         
 Min.   : 0.000   Length:244        
 1st Qu.: 0.700   Class :character  
 Median : 4.450   Mode  :character  
 Mean   : 7.049                     
 3rd Qu.:11.375                     
 Max.   :31.100                     
str(Dataset)
spc_tbl_ [244 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ day        : chr [1:244] "01" "02" "03" "04" ...
 $ month      : chr [1:244] "06" "06" "06" "06" ...
 $ year       : num [1:244] 2012 2012 2012 2012 2012 ...
 $ Temperature: num [1:244] 29 29 26 25 27 31 33 30 25 28 ...
 $ RH         : num [1:244] 57 61 82 89 77 67 54 73 88 79 ...
 $ Ws         : num [1:244] 18 13 22 13 16 14 13 15 13 12 ...
 $ Rain       : num [1:244] 0 1.3 13.1 2.5 0 0 0 0 0.2 0 ...
 $ FFMC       : num [1:244] 65.7 64.4 47.1 28.6 64.8 82.6 88.2 86.6 52.9 73.2 ...
 $ DMC        : num [1:244] 3.4 4.1 2.5 1.3 3 5.8 9.9 12.1 7.9 9.5 ...
 $ DC         : num [1:244] 7.6 7.6 7.1 6.9 14.2 22.2 30.5 38.3 38.8 46.3 ...
 $ ISI        : num [1:244] 1.3 1 0.3 0 1.2 3.1 6.4 5.6 0.4 1.3 ...
 $ BUI        : num [1:244] 3.4 3.9 2.7 1.7 3.9 7 10.9 13.5 10.5 12.6 ...
 $ FWI        : num [1:244] 0.5 0.4 0.1 0 0.5 2.5 7.2 7.1 0.3 0.9 ...
 $ Classes    : chr [1:244] "not fire" "not fire" "not fire" "not fire" ...
 - attr(*, "spec")=
  .. cols(
  ..   day = col_character(),
  ..   month = col_character(),
  ..   year = col_double(),
  ..   Temperature = col_double(),
  ..   RH = col_double(),
  ..   Ws = col_double(),
  ..   Rain = col_double(),
  ..   FFMC = col_double(),
  ..   DMC = col_double(),
  ..   DC = col_double(),
  ..   ISI = col_double(),
  ..   BUI = col_double(),
  ..   FWI = col_double(),
  ..   Classes = col_character()
  .. )
 - attr(*, "problems")=<externalptr> 

1.3.2 Detección de valores perdidos

library(DataExplorer)
plot_missing(Dataset)

1.3.3 Selección variables cuantitativas

Dataset.1=Dataset[, sapply(Dataset, is.numeric)]
head(Dataset.1)
# A tibble: 6 × 11
   year Temperature    RH    Ws  Rain  FFMC   DMC    DC   ISI   BUI   FWI
  <dbl>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  2012          29    57    18   0    65.7   3.4   7.6   1.3   3.4   0.5
2  2012          29    61    13   1.3  64.4   4.1   7.6   1     3.9   0.4
3  2012          26    82    22  13.1  47.1   2.5   7.1   0.3   2.7   0.1
4  2012          25    89    13   2.5  28.6   1.3   6.9   0     1.7   0  
5  2012          27    77    16   0    64.8   3    14.2   1.2   3.9   0.5
6  2012          31    67    14   0    82.6   5.8  22.2   3.1   7     2.5
Dataset.2=Dataset.1[,-1]
head(Dataset.2)
# A tibble: 6 × 10
  Temperature    RH    Ws  Rain  FFMC   DMC    DC   ISI   BUI   FWI
        <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1          29    57    18   0    65.7   3.4   7.6   1.3   3.4   0.5
2          29    61    13   1.3  64.4   4.1   7.6   1     3.9   0.4
3          26    82    22  13.1  47.1   2.5   7.1   0.3   2.7   0.1
4          25    89    13   2.5  28.6   1.3   6.9   0     1.7   0  
5          27    77    16   0    64.8   3    14.2   1.2   3.9   0.5
6          31    67    14   0    82.6   5.8  22.2   3.1   7     2.5

1.3.4 Detección de outliers multivariantes

library(MVN)
outliers <- mvn(data = Dataset.2, mvnTest = "hz", 
                multivariateOutlierMethod = "quan") 

1.4 Análisis gráfico-descriptivo

library(ade4)
library(FactoMineR)
library(psych)
library(car)
library(factoextra)
library(PerformanceAnalytics)
library(GGally)

1.4.1 Gráfico de barras

library(epiDisplay)
tabla2=tab1(Dataset$Classes,cum.percent = TRUE,main="Tabla de Classes",
            col = c('green2','yellow'))

ppClasses=round((prop.table(table(Dataset$Classes))*100),1)
ppClasses

    fire not fire 
    56.6     43.4 
barplot(ppClasses,ylab = "Porcentaje (%)",
        xlab = "Classes",col=c('green2','yellow'),
        main="Proporción de incendios",
        cex.names =0.75)

1.4.2 Estandarización de los datos

Dataset.3<- as.data.frame(scale(Dataset.2))
head(Dataset.3)
  Temperature          RH         Ws       Rain       FFMC        DMC
1  -0.8729411 -0.33179644  0.8881648 -0.3804409 -0.8500537 -0.9114914
2  -0.8729411 -0.06305509 -0.8910816  0.2697523 -0.9407246 -0.8548939
3  -1.6985133  1.34783698  2.3115620  6.1715064 -2.1473446 -0.9842596
4  -1.9737040  1.81813434 -0.8910816  0.8699307 -3.4376608 -1.0812839
5  -1.4233226  1.01191030  0.1764663 -0.3804409 -0.9128258 -0.9438328
6  -0.3225596  0.34005693 -0.5352323 -0.3804409  0.3286676 -0.7174428
          DC        ISI        BUI        FWI
1 -0.8754391 -0.8327668 -0.9346352 -0.8816448
2 -0.8754391 -0.9049754 -0.8994280 -0.8951068
3 -0.8859390 -1.0734623 -0.9839253 -0.9354925
4 -0.8901389 -1.1456709 -1.0543396 -0.9489544
5 -0.7368409 -0.8568363 -0.8994280 -0.8816448
6 -0.5688431 -0.3995150 -0.6811435 -0.6124066

1.5 Análisis de Correlación

1.5.1 Gráfica de dispersión

library(psych)
pairs.panels(Dataset.3)

  • Se observa una alta correlación entre DMC Y BUI (0.98).

  • Se observa una alta correlación entre DC Y BUI (0.94).

  • Se observa una alta correlación entre ISI Y FWI (0.92).

  • Se observa una alta correlación entre FWI Y DMC (0.88).

1.5.2 Matriz de Variancia-Covariancia

head(Dataset.3)
  Temperature          RH         Ws       Rain       FFMC        DMC
1  -0.8729411 -0.33179644  0.8881648 -0.3804409 -0.8500537 -0.9114914
2  -0.8729411 -0.06305509 -0.8910816  0.2697523 -0.9407246 -0.8548939
3  -1.6985133  1.34783698  2.3115620  6.1715064 -2.1473446 -0.9842596
4  -1.9737040  1.81813434 -0.8910816  0.8699307 -3.4376608 -1.0812839
5  -1.4233226  1.01191030  0.1764663 -0.3804409 -0.9128258 -0.9438328
6  -0.3225596  0.34005693 -0.5352323 -0.3804409  0.3286676 -0.7174428
          DC        ISI        BUI        FWI
1 -0.8754391 -0.8327668 -0.9346352 -0.8816448
2 -0.8754391 -0.9049754 -0.8994280 -0.8951068
3 -0.8859390 -1.0734623 -0.9839253 -0.9354925
4 -0.8901389 -1.1456709 -1.0543396 -0.9489544
5 -0.7368409 -0.8568363 -0.8994280 -0.8816448
6 -0.5688431 -0.3995150 -0.6811435 -0.6124066
round(cov(Dataset.3),3)
            Temperature     RH     Ws   Rain   FFMC    DMC     DC    ISI    BUI
Temperature       1.000 -0.654 -0.278 -0.327  0.677  0.483  0.370  0.606  0.456
RH               -0.654  1.000  0.236  0.223 -0.646 -0.405 -0.220 -0.688 -0.350
Ws               -0.278  0.236  1.000  0.170 -0.163 -0.001  0.076  0.012  0.030
Rain             -0.327  0.223  0.170  1.000 -0.544 -0.289 -0.297 -0.348 -0.299
FFMC              0.677 -0.646 -0.163 -0.544  1.000  0.602  0.504  0.741  0.590
DMC               0.483 -0.405 -0.001 -0.289  0.602  1.000  0.875  0.678  0.982
DC                0.370 -0.220  0.076 -0.297  0.504  0.875  1.000  0.504  0.942
ISI               0.606 -0.688  0.012 -0.348  0.741  0.678  0.504  1.000  0.641
BUI               0.456 -0.350  0.030 -0.299  0.590  0.982  0.942  0.641  1.000
FWI               0.567 -0.580  0.034 -0.325  0.691  0.875  0.737  0.922  0.857
               FWI
Temperature  0.567
RH          -0.580
Ws           0.034
Rain        -0.325
FFMC         0.691
DMC          0.875
DC           0.737
ISI          0.922
BUI          0.857
FWI          1.000
sum(diag(cov(Dataset.3)))
[1] 10

1.5.3 Gráfico de correlación

library(corrplot)
i=cor(Dataset.3,method="pearson")
corrplot(i,sig.level=0.05,type="lower")

1.5.4 Prueba de correlación

  • Ho: ρ = 0 (No hay correlación), si pvalor ≥ 0.05

  • H1: ρ ≠ 0 (Hay correlación), si pvalor < 0.05

options(scipen = 999)
res1=cor.mtest(Dataset.3,conf.level=0.05)
round(res1$p,4)
            Temperature     RH     Ws   Rain   FFMC    DMC     DC    ISI    BUI
Temperature           0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
RH                    0 0.0000 0.0002 0.0004 0.0000 0.0000 0.0005 0.0000 0.0000
Ws                    0 0.0002 0.0000 0.0077 0.0106 0.9846 0.2354 0.8491 0.6376
Rain                  0 0.0004 0.0077 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
FFMC                  0 0.0000 0.0106 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
DMC                   0 0.0000 0.9846 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
DC                    0 0.0005 0.2354 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
ISI                   0 0.0000 0.8491 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
BUI                   0 0.0000 0.6376 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
FWI                   0 0.0000 0.5976 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
               FWI
Temperature 0.0000
RH          0.0000
Ws          0.5976
Rain        0.0000
FFMC        0.0000
DMC         0.0000
DC          0.0000
ISI         0.0000
BUI         0.0000
FWI         0.0000

1.6 Análisis de Componentes Principales

library(ade4)
acp = dudi.pca(Dataset.2,
                scannf=FALSE, scale=TRUE,
                nf=ncol(Dataset.2))
summary(acp)
Class: pca dudi
Call: dudi.pca(df = Dataset.2, scale = TRUE, scannf = FALSE, nf = ncol(Dataset.2))

Total inertia: 10

Eigenvalues:
    Ax1     Ax2     Ax3     Ax4     Ax5 
 5.7174  1.5839  0.9256  0.8003  0.3900 

Projected inertia (%):
    Ax1     Ax2     Ax3     Ax4     Ax5 
 57.174  15.839   9.256   8.003   3.900 

Cumulative projected inertia (%):
    Ax1   Ax1:2   Ax1:3   Ax1:4   Ax1:5 
  57.17   73.01   82.27   90.27   94.17 

(Only 5 dimensions (out of 10) are shown)

1.6.1 Retención de Componentes Principales

    1. Criterio práctico: Retener las dos primeras componentes, dado que el análisis gráfico en dos dimensiones resulta práctico. En el caso presentado, las dos primeras componentes retenidos que son AX1 y AX2 explican el 73.1% de la variabilidad de los datos.
    1. Criterio de la media aritmética: Se escogerán las componentes que tengan un eigenvalor mayor a 1.
round(acp$eig,2)
 [1] 5.72 1.58 0.93 0.80 0.39 0.25 0.22 0.09 0.02 0.00
    1. Gráfico de Sedimentación:
library(factoextra)
fviz_eig(acp, addlabels=TRUE, hjust = 0.5)

1.6.2 Análisis ACP/ADCP

    1. Gráfico de variables en el ACP:
fviz_pca_var(acp, col.var="steelblue")+theme_minimal()

    1. Scores o Puntuaciones de cada fecha

Las puntuaciones de cada fecha en el análisis de componentes principales (PCA) se refieren a las coordenadas de las observaciones en el espacio de las componentes principales.

acp$li[1:10,]
        Axis1       Axis2       Axis3       Axis4      Axis5       Axis6
1  -2.0544697  0.15360677  0.29609889  1.04285789 -0.1653572 -0.68683047
2  -2.2161034  0.79492998 -0.27716281 -0.52407327 -0.5838387 -0.33180045
3  -4.7242409 -3.25197605  4.16131985 -2.44639685  0.3913658  0.04268903
4  -4.3142345 -0.96058309 -0.77132302 -1.26265331 -1.2427533  1.09608181
5  -2.5479533 -0.27642615 -0.69812965  0.67651066 -0.5650277  0.01838239
6  -1.0762858  0.85805206 -0.57484908  0.34228397 -0.1179349 -0.07676674
7   0.3039348  1.42798533 -0.09344935  0.09801593 -0.3476391 -0.01543568
8  -0.2510460  0.03934705 -0.53279663  0.52912886 -0.4857654  0.28296735
9  -2.7751105 -0.88108741 -1.78390506 -0.44418824 -1.1118603  0.38005032
10 -1.5658021  0.05972506 -1.70464213 -0.42402949 -0.6093461 -0.02133149
         Axis7        Axis8        Axis9        Axis10
1   0.75087013  0.101648202  0.059736998 -0.0008155778
2   0.35071706 -0.003679111  0.046894292  0.0026325908
3  -1.16454289 -0.146193233  0.025166852  0.0306828252
4   1.19374926 -0.253084043 -0.048473316 -0.0151257720
5   0.09934575 -0.034058910  0.033125807  0.0055057342
6  -0.48953889 -0.065502776  0.021956382  0.0061091708
7  -0.36404297 -0.157865933  0.001070873  0.0122211893
8  -0.83950829 -0.009834631  0.006825318  0.0235482529
9   0.34016695 -0.133855714 -0.133347771 -0.0333951719
10 -0.40177879 -0.128631394 -0.110525469 -0.0266855698
    1. Estadísticas descriptivas de las componentes
library(psych)
describe(acp$li)
       vars   n mean   sd median trimmed  mad   min  max range  skew kurtosis
Axis1     1 244    0 2.40  -0.25   -0.09 2.49 -5.27 6.45 11.71  0.38    -0.31
Axis2     2 244    0 1.26   0.12    0.07 1.17 -4.27 2.65  6.92 -0.59     0.45
Axis3     3 244    0 0.96  -0.11   -0.09 0.79 -1.78 5.15  6.93  1.42     4.20
Axis4     4 244    0 0.90   0.08    0.06 0.80 -4.00 3.11  7.11 -0.87     2.82
Axis5     5 244    0 0.63   0.03    0.02 0.57 -2.01 1.69  3.69 -0.30     0.25
Axis6     6 244    0 0.50   0.04    0.01 0.46 -1.59 1.33  2.92 -0.28     0.30
Axis7     7 244    0 0.47   0.01    0.01 0.48 -1.94 1.45  3.39 -0.14     0.90
Axis8     8 244    0 0.30  -0.01    0.00 0.21 -1.05 1.25  2.29  0.10     2.23
Axis9     9 244    0 0.13   0.02    0.01 0.04 -1.48 0.23  1.71 -6.94    74.51
Axis10   10 244    0 0.06   0.00    0.00 0.03 -0.16 0.80  0.96  8.56   111.12
         se
Axis1  0.15
Axis2  0.08
Axis3  0.06
Axis4  0.06
Axis5  0.04
Axis6  0.03
Axis7  0.03
Axis8  0.02
Axis9  0.01
Axis10 0.00
  • La media en las componentes es cercana a cero, lo que indica que las puntuaciones tienden a centrarse alrededor de cero en estas dimensiones; ello se da porque los datos centrados garantizan que las componentes principales capturen la variabilidad de manera óptima

  • Se observa una alta correlación entre DC Y BUI (0.94).

  • Se observa una alta correlación entre ISI Y FWI (0.92).

  • Se observa una alta correlación entre FWI Y DMC (0.88).

    1. Gráfica de individuos sobre el primer plano de componentes
fviz_pca_ind(acp, repel = F,col.ind = 'steelblue')

    1. Formación de grupos
library (adegenet)
library (factoextra)
grp <- find.clusters(Dataset.3, n.pca = 2, n.clust = 2)
grp$size
[1]  97 147
    1. DAPC: Análisis discriminante de Componentes Principales
dapc.WIDIV <- dapc(Dataset.3, grp$grp, n.pca = 2,n.da=1)
scatter(dapc.WIDIV, posi.da = "bottomright", bg = "white", pch = 17:22,
         cstar = 0)

contrib <- loadingplot(dapc.WIDIV$var.contr, axis=1,
                       thres=.10, lab.jitter=1)

dapc.WIDIV$var.contr
                   LD1
Temperature 0.05057852
RH          0.03749063
Ws          0.00407334
Rain        0.02283046
FFMC        0.08813542
DMC         0.17584803
DC          0.15698164
ISI         0.11699165
BUI         0.17994180
FWI         0.16712851
  • Las variables que discriminan mejor resultan: DMC(Índice del Código de Humedad), DC(Índice del Código de Humedad), ISI(Índice de dispersión inicial), BUI(Índice de acumulación) y FWI(Índice meteorológico del incendio).

1.7 Análisis de Componentes Principales - librería FACTOMINER

respca.f = PCA(Dataset.2, scale.unit=TRUE, ncp=10, graph=TRUE)

summary(respca.f)

Call:
PCA(X = Dataset.2, scale.unit = TRUE, ncp = 10, graph = TRUE) 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
Variance               5.717   1.584   0.926   0.800   0.390   0.249   0.222
% of var.             57.174  15.839   9.256   8.003   3.900   2.485   2.219
Cumulative % of var.  57.174  73.014  82.269  90.272  94.172  96.657  98.876
                       Dim.8   Dim.9  Dim.10
Variance               0.092   0.016   0.004
% of var.              0.924   0.161   0.039
Cumulative % of var.  99.800  99.961 100.000

Individuals (the 10 first)
                Dist    Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3
1           |  2.549 | -2.054  0.303  0.650 | -0.154  0.006  0.004 |  0.296
2           |  2.544 | -2.216  0.352  0.759 | -0.795  0.164  0.098 | -0.277
3           |  7.598 | -4.724  1.600  0.387 |  3.252  2.736  0.183 |  4.161
4           |  5.095 | -4.314  1.334  0.717 |  0.961  0.239  0.036 | -0.771
5           |  2.801 | -2.548  0.465  0.828 |  0.276  0.020  0.010 | -0.698
6           |  1.614 | -1.076  0.083  0.444 | -0.858  0.191  0.282 | -0.575
7           |  1.558 |  0.304  0.007  0.038 | -1.428  0.528  0.840 | -0.093
8           |  1.284 | -0.251  0.005  0.038 | -0.039  0.000  0.001 | -0.533
9           |  3.659 | -2.775  0.552  0.575 |  0.881  0.201  0.058 | -1.784
10          |  2.471 | -1.566  0.176  0.402 | -0.060  0.001  0.001 | -1.705
               ctr   cos2  
1            0.039  0.013 |
2            0.034  0.012 |
3            7.668  0.300 |
4            0.263  0.023 |
5            0.216  0.062 |
6            0.146  0.127 |
7            0.004  0.004 |
8            0.126  0.172 |
9            1.409  0.238 |
10           1.287  0.476 |

Variables
               Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
Temperature |  0.714  8.906  0.509 | -0.441 12.261  0.194 |  0.109  1.274
RH          | -0.662  7.665  0.438 |  0.506 16.186  0.256 | -0.398 17.146
Ws          | -0.094  0.154  0.009 |  0.664 27.867  0.441 |  0.447 21.544
Rain        | -0.470  3.857  0.221 |  0.270  4.603  0.073 |  0.589 37.505
FFMC        |  0.834 12.167  0.696 | -0.294  5.469  0.087 | -0.030  0.098
DMC         |  0.895 14.011  0.801 |  0.339  7.235  0.115 | -0.094  0.959
DC          |  0.787 10.824  0.619 |  0.477 14.361  0.227 | -0.246  6.542
ISI         |  0.871 13.255  0.758 | -0.098  0.609  0.010 |  0.306 10.101
BUI         |  0.884 13.678  0.782 |  0.399 10.028  0.159 | -0.146  2.315
FWI         |  0.941 15.484  0.885 |  0.148  1.381  0.022 |  0.153  2.517
              cos2  
Temperature  0.012 |
RH           0.159 |
Ws           0.199 |
Rain         0.347 |
FFMC         0.001 |
DMC          0.009 |
DC           0.061 |
ISI          0.093 |
BUI          0.021 |
FWI          0.023 |

Conclusiones:

*Gráfica PCA individual

-Las observaciones 173, 201 y 235, presenta mas cercania con la COMP1, esto indica que estan mas correlacionadas con esa COMPONENTE.

-Las observaciones 112, 168 y 176, presentan mas cercania con la COMP2, eso indica que es tan mas correlacionadas con esa COMPONENTE.

  • Gráfica PCA variables

  • las variables FWI e ISI son las que presentan mas cercania con kla COMP1, por lo que indica que existe mas correclacion con esa COMPONENTE.

  • La variable Ws esta mas cercano a la COMP2, esto indica que esta mas correlacionado con la COMP2.

  • Variables:

  • Las variables FWI y DMC explican el 15.484% y 14.011% de la variabilidad de la COMP1. Ambas variables son las que explican mas a esa componente.

  • La variable WS es la que explica mas con 27.867% de la variabilidad de la COMP2. Le sigue la variable RH con 16.86% de la variablidad de la COMP.2

  • La COMP1 explica 50.9% de la variable Temperatura, la COMP2 el 19.4%, la COMP3 el 1.2%.

## se tipifica porque no tienen varianza 1 y media 0 (normal estandarizada)
plot(respca.f, label = "none")

fviz_pca_var(respca.f, col.var = "steelblue")

respca.f$eig
         eigenvalue percentage of variance cumulative percentage of variance
comp 1  5.717432571            57.17432571                          57.17433
comp 2  1.583922773            15.83922773                          73.01355
comp 3  0.925567905             9.25567905                          82.26923
comp 4  0.800262738             8.00262738                          90.27186
comp 5  0.389989518             3.89989518                          94.17176
comp 6  0.248549203             2.48549203                          96.65725
comp 7  0.221916672             2.21916672                          98.87641
comp 8  0.092379425             0.92379425                          99.80021
comp 9  0.016124848             0.16124848                          99.96146
comp 10 0.003854347             0.03854347                         100.00000
respca.f$var
$coord
                  Dim.1       Dim.2       Dim.3        Dim.4       Dim.5
Temperature  0.71356004 -0.44069554  0.10860698  0.092336126  0.48972495
RH          -0.66197722  0.50633312 -0.39836448 -0.040955352  0.10109273
Ws          -0.09381214  0.66437506  0.44654557 -0.556390319  0.18735800
Rain        -0.46962242  0.27001302  0.58917859  0.574714280  0.05070323
FFMC         0.83405573 -0.29431803 -0.03007563 -0.211177601  0.06395776
DMC          0.89501483  0.33851930 -0.09420141  0.183501573 -0.02701680
DC           0.78667881  0.47693233 -0.24607253  0.144593234  0.10774844
ISI          0.87053344 -0.09822417  0.30576974 -0.149193976 -0.23243340
BUI          0.88431591  0.39853760 -0.14636840  0.169555596  0.01627007
FWI          0.94090260  0.14789405  0.15262645  0.002965365 -0.17760966
                   Dim.6       Dim.7        Dim.8         Dim.9        Dim.10
Temperature  0.173819045 -0.07890029 -0.005345948 -0.0007979015 -0.0001573676
RH           0.310596567  0.19564128 -0.008463698  0.0019377020  0.0006781233
Ws          -0.060423828 -0.03925156 -0.023154179 -0.0010240204  0.0001295950
Rain        -0.009875458  0.16195267  0.014920535  0.0003648080  0.0002802592
FFMC        -0.149209992  0.38134505 -0.018062897 -0.0109907302  0.0014424623
DMC         -0.020437033 -0.03429713 -0.193715047  0.0307700474  0.0317839834
DC          -0.120240386 -0.02523883  0.212434123  0.0104111689  0.0164916900
ISI          0.225882669  0.03702586  0.071527110  0.0722586739 -0.0035962286
BUI         -0.049763699 -0.02091704 -0.056988999  0.0057405024 -0.0502092922
FWI          0.165767612 -0.02451073  0.013287420 -0.0984328258  0.0059651093

$cor
                  Dim.1       Dim.2       Dim.3        Dim.4       Dim.5
Temperature  0.71356004 -0.44069554  0.10860698  0.092336126  0.48972495
RH          -0.66197722  0.50633312 -0.39836448 -0.040955352  0.10109273
Ws          -0.09381214  0.66437506  0.44654557 -0.556390319  0.18735800
Rain        -0.46962242  0.27001302  0.58917859  0.574714280  0.05070323
FFMC         0.83405573 -0.29431803 -0.03007563 -0.211177601  0.06395776
DMC          0.89501483  0.33851930 -0.09420141  0.183501573 -0.02701680
DC           0.78667881  0.47693233 -0.24607253  0.144593234  0.10774844
ISI          0.87053344 -0.09822417  0.30576974 -0.149193976 -0.23243340
BUI          0.88431591  0.39853760 -0.14636840  0.169555596  0.01627007
FWI          0.94090260  0.14789405  0.15262645  0.002965365 -0.17760966
                   Dim.6       Dim.7        Dim.8         Dim.9        Dim.10
Temperature  0.173819045 -0.07890029 -0.005345948 -0.0007979015 -0.0001573676
RH           0.310596567  0.19564128 -0.008463698  0.0019377020  0.0006781233
Ws          -0.060423828 -0.03925156 -0.023154179 -0.0010240204  0.0001295950
Rain        -0.009875458  0.16195267  0.014920535  0.0003648080  0.0002802592
FFMC        -0.149209992  0.38134505 -0.018062897 -0.0109907302  0.0014424623
DMC         -0.020437033 -0.03429713 -0.193715047  0.0307700474  0.0317839834
DC          -0.120240386 -0.02523883  0.212434123  0.0104111689  0.0164916900
ISI          0.225882669  0.03702586  0.071527110  0.0722586739 -0.0035962286
BUI         -0.049763699 -0.02091704 -0.056988999  0.0057405024 -0.0502092922
FWI          0.165767612 -0.02451073  0.013287420 -0.0984328258  0.0059651093

$cos2
                  Dim.1       Dim.2        Dim.3         Dim.4        Dim.5
Temperature 0.509167927 0.194212556 0.0117954771 0.00852596011 0.2398305218
RH          0.438213845 0.256373231 0.1586942573 0.00167734082 0.0102197398
Ws          0.008800718 0.441394223 0.1994029455 0.30957018725 0.0351030198
Rain        0.220545214 0.072907030 0.3471314097 0.33029650377 0.0025708172
FFMC        0.695648963 0.086623104 0.0009045434 0.04459597935 0.0040905947
DMC         0.801051540 0.114595319 0.0088739047 0.03367282737 0.0007299073
DC          0.618863558 0.227464449 0.0605516898 0.02090720345 0.0116097258
ISI         0.757828478 0.009647987 0.0934951359 0.02225884240 0.0540252861
BUI         0.782014633 0.158832222 0.0214237088 0.02874910027 0.0002647153
FWI         0.885297696 0.021872651 0.0232948331 0.00000879339 0.0315451905
                    Dim.6        Dim.7         Dim.8           Dim.9
Temperature 0.03021306057 0.0062252561 0.00002857916 0.0000006366468
RH          0.09647022740 0.0382755102 0.00007163419 0.0000037546889
Ws          0.00365103893 0.0015406852 0.00053611600 0.0000010486179
Rain        0.00009752468 0.0262286666 0.00022262236 0.0000001330849
FFMC        0.02226362160 0.1454240492 0.00032626823 0.0001207961511
DMC         0.00041767232 0.0011762931 0.03752551935 0.0009467958189
DC          0.01445775036 0.0006369988 0.04512825680 0.0001083924382
ISI         0.05102298001 0.0013709142 0.00511612743 0.0052213159489
BUI         0.00247642573 0.0004375227 0.00324774599 0.0000329533675
FWI         0.02747890122 0.0006007758 0.00017655553 0.0096890211897
                      Dim.10
Temperature 0.00000002476457
RH          0.00000045985122
Ws          0.00000001679487
Rain        0.00000007854524
FFMC        0.00000208069749
DMC         0.00101022160035
DC          0.00027197583927
ISI         0.00001293286001
BUI         0.00252097301854
FWI         0.00003558252860

$contrib
                 Dim.1      Dim.2       Dim.3        Dim.4       Dim.5
Temperature  8.9055345 12.2614915  1.27440429  1.065395114 61.49665837
RH           7.6645214 16.1859678 17.14560935  0.209598765  2.62051652
Ws           0.1539278 27.8671556 21.54384831 38.683568843  9.00101622
Rain         3.8574170  4.6029410 37.50469390 41.273507813  0.65920162
FFMC        12.1671564  5.4688969  0.09772847  5.572667228  1.04889864
DMC         14.0106863  7.2349057  0.95875242  4.207721510  0.18716075
DC          10.8241514 14.3608295  6.54211209  2.612542413  2.97693277
ISI         13.2546990  0.6091198 10.10138049  2.781441811 13.85300978
BUI         13.6777238 10.0277756  2.31465554  3.592457689  0.06787754
FWI         15.4841825  1.3809165  2.51681513  0.001098813  8.08872778
                  Dim.6      Dim.7       Dim.8         Dim.9        Dim.10
Temperature 12.15576644  2.8052224  0.03093671  0.0039482342  0.0006425101
RH          38.81333205 17.2476948  0.07754345  0.0232851122  0.0119307181
Ws           1.46894011  0.6942629  0.58034135  0.0065031178  0.0004357384
Rain         0.03923757 11.8191510  0.24098696  0.0008253405  0.0020378355
FFMC         8.95743030 65.5309256  0.35318279  0.7491304816  0.0539831459
DMC          0.16804412  0.5300607 40.62107913  5.8716573430 26.2099320938
DC           5.81685646  0.2870441 48.85098254  0.6722075053  7.0563411790
ISI         20.52832173  0.6177608  5.53816765 32.3805592722  0.3355396306
BUI          0.99635231  0.1971563  3.51565945  0.2043638960 65.4059778601
FWI         11.05571891  0.2707214  0.19111997 60.0875196971  0.9231792885

Conclusiones:

  • Los valores de correlacion confirman la grafica descrita anteriormente. las variables FWI e ISI tieen una alta correlacion con la COMP1 siendo los valores 0.94090260 y 0.87053344.
  • La variable RAIN presenta tiene un valor de correlacion mas elevando con la COMP3 que con las demas COMPONENTES siendo el valor 0.58917859.
## para confirmar la retencion de dos componentes
library(paran)
paran(Dataset.2,iterations=5000,graph=TRUE,color=2)

Using eigendecomposition of correlation matrix.
Computing: 10%  20%  30%  40%  50%  60%  70%  80%  90%  100%


Results of Horn's Parallel Analysis for component retention
5000 iterations, using the mean estimate

-------------------------------------------------- 
Component   Adjusted    Unadjusted    Estimated 
            Eigenvalue  Eigenvalue    Bias 
-------------------------------------------------- 
1           5.387352    5.717432      0.330079
2           1.358137    1.583922      0.225785
-------------------------------------------------- 

Adjusted eigenvalues > 1 indicate dimensions to retain.
(2 components retained)

2 Análisis Factorial Clásico

library(pacman)
p_load(dplyr,corrplot,DataExplorer,psych,gtools,mvnormtest)
  • De acuerdo a la gráfica se observa que hasta las COMP2 el valor de los eigenvalores de las componentes sn mayores a 1
library(readr)
datos=read.delim('DatasetN.txt',header = TRUE,sep =",") 
str(datos)
'data.frame':   244 obs. of  14 variables:
 $ day        : int  1 2 3 4 5 6 7 8 9 10 ...
 $ month      : int  6 6 6 6 6 6 6 6 6 6 ...
 $ year       : int  2012 2012 2012 2012 2012 2012 2012 2012 2012 2012 ...
 $ Temperature: int  29 29 26 25 27 31 33 30 25 28 ...
 $ RH         : int  57 61 82 89 77 67 54 73 88 79 ...
 $ Ws         : int  18 13 22 13 16 14 13 15 13 12 ...
 $ Rain       : num  0 1.3 13.1 2.5 0 0 0 0 0.2 0 ...
 $ FFMC       : num  65.7 64.4 47.1 28.6 64.8 82.6 88.2 86.6 52.9 73.2 ...
 $ DMC        : num  3.4 4.1 2.5 1.3 3 5.8 9.9 12.1 7.9 9.5 ...
 $ DC         : num  7.6 7.6 7.1 6.9 14.2 22.2 30.5 38.3 38.8 46.3 ...
 $ ISI        : num  1.3 1 0.3 0 1.2 3.1 6.4 5.6 0.4 1.3 ...
 $ BUI        : num  3.4 3.9 2.7 1.7 3.9 7 10.9 13.5 10.5 12.6 ...
 $ FWI        : num  0.5 0.4 0.1 0 0.5 2.5 7.2 7.1 0.3 0.9 ...
 $ Classes    : chr  "not fire   " "not fire   " "not fire   " "not fire   " ...

2.1 Análisis exploratorio

2.1.1 Revisión valores nulos

plot_missing(datos)

colSums(is.na(datos))
        day       month        year Temperature          RH          Ws 
          0           0           0           0           0           0 
       Rain        FFMC         DMC          DC         ISI         BUI 
          0           0           0           0           0           0 
        FWI     Classes 
          0           0 

2.1.2 Selección variables cuantitativas

datos_num=datos %>% select(c('Temperature':'FWI'))

2.1.3 Gráfico de histogramas

plot_histogram(datos_num)

## Análisis de correlación

2.1.4 Matriz de correlación

plot_correlation(datos_num)

2.1.5 Analisis de matriz de correlacion inversa

correl=round(cor(datos_num),2)
round(solve(correl),3)
            Temperature     RH     Ws   Rain   FFMC     DMC      DC     ISI
Temperature       2.325  0.701  0.394 -0.028 -0.725   0.548   0.021  -0.459
RH                0.701  2.821 -0.367  0.420  0.835   1.929   0.172   1.340
Ws                0.394 -0.367  1.296 -0.238  0.094   0.467  -0.467  -0.933
Rain             -0.028  0.420 -0.238  1.554  0.974   0.313   0.705   0.595
FFMC             -0.725  0.835  0.094  0.974  4.062   1.342   0.398  -3.648
DMC               0.548  1.929  0.467  0.313  1.342  43.135  13.147   0.722
DC                0.021  0.172 -0.467  0.705  0.398  13.147  14.877   1.200
ISI              -0.459  1.340 -0.933  0.595 -3.648   0.722   1.200  23.318
BUI              -0.911 -2.550 -0.184 -0.824 -4.150 -52.880 -27.933  10.727
FWI               0.269 -0.059  0.334 -0.543  3.853  -2.909   0.393 -28.427
                BUI     FWI
Temperature  -0.911   0.269
RH           -2.550  -0.059
Ws           -0.184   0.334
Rain         -0.824  -0.543
FFMC         -4.150   3.853
DMC         -52.880  -2.909
DC          -27.933   0.393
ISI          10.727 -28.427
BUI          89.183 -17.716
FWI         -17.716  41.628

2.2 Pruebas estadísticas

2.2.1 Prueba de correlación

  • Ho: Las variables no están correlacionadas (ρ = 0)

  • H1: Las variables estan correlacionadas (ρ ≠ 0)

round(cor.mtest(datos_num,alpha=0.05)$p,3)
            Temperature    RH    Ws  Rain  FFMC   DMC    DC   ISI   BUI   FWI
Temperature           0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
RH                    0 0.000 0.000 0.000 0.000 0.000 0.001 0.000 0.000 0.000
Ws                    0 0.000 0.000 0.008 0.011 0.985 0.235 0.849 0.638 0.598
Rain                  0 0.000 0.008 0.000 0.000 0.000 0.000 0.000 0.000 0.000
FFMC                  0 0.000 0.011 0.000 0.000 0.000 0.000 0.000 0.000 0.000
DMC                   0 0.000 0.985 0.000 0.000 0.000 0.000 0.000 0.000 0.000
DC                    0 0.001 0.235 0.000 0.000 0.000 0.000 0.000 0.000 0.000
ISI                   0 0.000 0.849 0.000 0.000 0.000 0.000 0.000 0.000 0.000
BUI                   0 0.000 0.638 0.000 0.000 0.000 0.000 0.000 0.000 0.000
FWI                   0 0.000 0.598 0.000 0.000 0.000 0.000 0.000 0.000 0.000
  • Cantidad de correlaciones no significativas: 5
res1=cor.mtest(datos_num,conf.level=0.05)
i=cor(datos_num,method="pearson")
corrplot(i, p.mat = res1$p, sig.level = 0.05)

  • De las 45 pruebas de correlación realizadas para las 10 variables, solo 5 de ellas resultaron no significativas. A partir de esto, podemos concluir que existe evidencia de correlación entre las variables.

2.2.2 Prueba de Esfericidad de Bartlett

En está prueba de aceptar la hipótesis nula se determina que la matriz de correlación de las variables es una matriz de identidad, lo que implica que no están correlacionadas.

  • H0: |Rp| = 1
  • H1: |Rp| ≠ 1
options(scipen=0)
esfer=cortest.bartlett(cor(datos_num),n=dim(datos_num))
str(esfer)
List of 3
 $ chisq  : num [1:2] 3344.6 67.7
 $ p.value: num [1:2] 0 0.016
 $ df     : num 45
esfer$p.value[1]
[1] 0
  • Con un valor de p-value igual a cero, se rechaza la hipótesis nula, lo que nos lleva a concluir que existe correlación entre las variables del estudio.

2.2.2.1 Prueba multivariada de Shapiro Wilk

  • H0: Las variables no siguen una distribución normal multivariada.
  • H1: Las variables siguen una distribución normal multivariada.
mshapiro.test(t(datos_num))

    Shapiro-Wilk normality test

data:  Z
W = 0.35548, p-value < 2.2e-16
  • Con un valor de p-value menor que 2.2e-16, se rechaza la hipótesis nula, lo que lleva a la conclusión de que no se cumple la normalidad multivariada

  • Dado que no vamos a llevar a cabo un proceso de inferencia estadística, podemos continuar con el análisis factorial, incluso si no se cumple la suposición de normalidad multivariada.

2.2.3 Indicador Kaiser-Meyer-Olkin KMO y MSA

kmo = psych::KMO(datos_num)
kmo$MSA #KMO general
[1] 0.7697472
kmo$MSAi #KMO por cada variable
Temperature          RH          Ws        Rain        FFMC         DMC 
  0.9234204   0.8928050   0.5919317   0.7998613   0.8439772   0.7269029 
         DC         ISI         BUI         FWI 
  0.6899307   0.7633394   0.6777123   0.8035108 
  • Dado que el índice KMO general (0.7697472) y los valores individuales para cada variable son todos mayores que 0.5, podemos concluir que los datos son adecuados para realizar un análisis factorial.

  • De encontrarse variables con un índice KMO por debajo de 0.5, es recomendable considerar la eliminación de dichas variables, comenzando por la variable que tenga el índice más bajo.

2.3 Análisis factorial sin rotación

datos_num_sr <- principal(r=datos_num,nfactors=2,rotate="none")
datos_num_sr$values
 [1] 5.717432571 1.583922773 0.925567905 0.800262738 0.389989518 0.248549203
 [7] 0.221916672 0.092379425 0.016124848 0.003854347
print(datos_num_sr)
Principal Components Analysis
Call: principal(r = datos_num, nfactors = 2, rotate = "none")
Standardized loadings (pattern matrix) based upon correlation matrix
              PC1   PC2   h2    u2 com
Temperature  0.71 -0.44 0.70 0.297 1.7
RH          -0.66  0.51 0.69 0.305 1.9
Ws          -0.09  0.66 0.45 0.550 1.0
Rain        -0.47  0.27 0.29 0.707 1.6
FFMC         0.83 -0.29 0.78 0.218 1.2
DMC          0.90  0.34 0.92 0.084 1.3
DC           0.79  0.48 0.85 0.154 1.6
ISI          0.87 -0.10 0.77 0.233 1.0
BUI          0.88  0.40 0.94 0.059 1.4
FWI          0.94  0.15 0.91 0.093 1.0

                       PC1  PC2
SS loadings           5.72 1.58
Proportion Var        0.57 0.16
Cumulative Var        0.57 0.73
Proportion Explained  0.78 0.22
Cumulative Proportion 0.78 1.00

Mean item complexity =  1.4
Test of the hypothesis that 2 components are sufficient.

The root mean square of the residuals (RMSR) is  0.08 
 with the empirical chi square  156.63  with prob <  1.3e-20 

Fit based upon off diagonal values = 0.98

2.3.0.1 Gráfico de sedimentación

plot(datos_num_sr$values,type="b",pch=20,col="steelblue",lwd=2)
abline(h=1,lty=3,col="tomato",lwd=2)

  • Se retendrán los dos primeros factores o componentes ya que dos de los tres primeros autovalores (5.717432571 1.583922773 0.925567905) son mayores que 1.
  • La suma de todos los autovalores es igual al número de variables.

2.3.1 Ordenando comunalidades

comunalidad = data.frame(comunalidad = datos_num_sr$communality)
comunalidad$variables = rownames(comunalidad)
comunalidad = dplyr::arrange(comunalidad, desc(comunalidad))
print(comunalidad)
            comunalidad   variables
BUI           0.9408469         BUI
DMC           0.9156469         DMC
FWI           0.9071703         FWI
DC            0.8463280          DC
FFMC          0.7822721        FFMC
ISI           0.7674765         ISI
Temperature   0.7033805 Temperature
RH            0.6945871          RH
Ws            0.4501949          Ws
Rain          0.2934522        Rain

Conclusiones:

  • El primer y segundo factor explican el 57.2% y el 15.8% de la variabilidad total, respectivamente.
  • Los dos primeros factores explican un total del 73% de la variabilidad acumulada.
  • Las cargas factoriales o las correlaciones entre las variables y los factores indican, por ejemplo, que la variable “Temperature” está fuertemente correlacionada con el primer factor (0.71).
  • La variable h2 (comunalidad) señala, por ejemplo, que el 71.51% de la variabilidad en la variable “temperatura” se explica mediante el primer y segundo factor
  • La variable u2 (especificidad) indica que el 29.48% de la variabilidad es explicada por los factores no retenidos.
  • Se puede afirmar que dos factores son suficientes para llevar a cabo el análisis factorial
  • La variable BUI(Índice de acumulación) es la que presenta la mayor comunalidad.

2.3.2 Cargas factoriales

Representan la contribución de cada variable a los componentes principales

datos_num_sr$loadings# Se omiten los valores menores de 0.10

Loadings:
            PC1    PC2   
Temperature  0.714 -0.441
RH          -0.662  0.506
Ws                  0.664
Rain        -0.470  0.270
FFMC         0.834 -0.294
DMC          0.895  0.339
DC           0.787  0.477
ISI          0.871       
BUI          0.884  0.399
FWI          0.941  0.148

                 PC1   PC2
SS loadings    5.717 1.584
Proportion Var 0.572 0.158
Cumulative Var 0.572 0.730
  • Los valores 0.714, -0.441 y 0.109 son las contribuciones de “Temperature” a PC1, PC2 y PC3, respectivamente.

2.3.3 Gráfico Correlación entre los factores

plot_correlation(datos_num_sr$scores)

  • No se observa correlación entre los factores.

2.4 Análisis factorial comparativo sin rotación y con rotación

2.4.1 Rotación de los factores

datos_num_cr <- principal(r=datos_num,nfactors=2,rotate="varimax")
datos_num_cr
Principal Components Analysis
Call: principal(r = datos_num, nfactors = 2, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
              RC1   RC2   h2    u2 com
Temperature  0.33  0.77 0.70 0.297 1.3
RH          -0.25 -0.80 0.69 0.305 1.2
Ws           0.31 -0.60 0.45 0.550 1.5
Rain        -0.23 -0.49 0.29 0.707 1.4
FFMC         0.51  0.72 0.78 0.218 1.8
DMC          0.93  0.24 0.92 0.084 1.1
DC           0.92  0.07 0.85 0.154 1.0
ISI          0.65  0.58 0.77 0.233 2.0
BUI          0.95  0.19 0.94 0.059 1.1
FWI          0.85  0.42 0.91 0.093 1.5

                       RC1  RC2
SS loadings           4.33 2.97
Proportion Var        0.43 0.30
Cumulative Var        0.43 0.73
Proportion Explained  0.59 0.41
Cumulative Proportion 0.59 1.00

Mean item complexity =  1.4
Test of the hypothesis that 2 components are sufficient.

The root mean square of the residuals (RMSR) is  0.08 
 with the empirical chi square  156.63  with prob <  1.3e-20 

Fit based upon off diagonal values = 0.98

2.4.2 Comunalidades comparativa

#Comunalidad sin rotación
datos_num_sr$communality
Temperature          RH          Ws        Rain        FFMC         DMC 
  0.7033805   0.6945871   0.4501949   0.2934522   0.7822721   0.9156469 
         DC         ISI         BUI         FWI 
  0.8463280   0.7674765   0.9408469   0.9071703 
#Comunalidad con rotación
datos_num_cr$communality
Temperature          RH          Ws        Rain        FFMC         DMC 
  0.7033805   0.6945871   0.4501949   0.2934522   0.7822721   0.9156469 
         DC         ISI         BUI         FWI 
  0.8463280   0.7674765   0.9408469   0.9071703 

2.4.3 Cargas factoriales comparativa

#Cargas sin rotación
datos_num_sr$loadings

Loadings:
            PC1    PC2   
Temperature  0.714 -0.441
RH          -0.662  0.506
Ws                  0.664
Rain        -0.470  0.270
FFMC         0.834 -0.294
DMC          0.895  0.339
DC           0.787  0.477
ISI          0.871       
BUI          0.884  0.399
FWI          0.941  0.148

                 PC1   PC2
SS loadings    5.717 1.584
Proportion Var 0.572 0.158
Cumulative Var 0.572 0.730
#Cargas con rotación
datos_num_cr$loadings

Loadings:
            RC1    RC2   
Temperature  0.327  0.772
RH          -0.247 -0.796
Ws           0.308 -0.596
Rain        -0.227 -0.492
FFMC         0.510  0.723
DMC          0.926  0.242
DC           0.918       
ISI          0.653  0.584
BUI          0.952  0.187
FWI          0.853  0.424

                 RC1   RC2
SS loadings    4.332 2.969
Proportion Var 0.433 0.297
Cumulative Var 0.433 0.730

2.4.4 Gráfica comparativa

#Sin rotación
loadings=datos_num_sr$loadings
par(mfcol=c(1,2))
plot(loadings,xlim=c(-1,1),ylim=c(-1,1),xlab='Factor1',ylab='Factor2')
text(loadings,row.names(loadings),pos=c(1,2,2,2,1))
abline(v=0,h=0,lty=2)

#Con rotacion
rot.loadings=datos_num_cr$loadings
plot(rot.loadings,xlim=c(-1,1),ylim=c(-1,1),xlab='Factor1 Rot',ylab='Factor2 Rot')
text(rot.loadings,row.names(loadings),pos=c(1,2,2,2,1))
abline(v=0,h=0,lty=2)

par(mfcol=c(1,1))

2.4.5 Score o puntuaciones

#Scores sin rotación
head(datos_num_sr$scores,5)
            PC1        PC2
[1,] -0.8574473 -0.1218012
[2,] -0.9249063 -0.6303331
[3,] -1.9716950  2.5786272
[4,] -1.8005759  0.7616863
[5,] -1.0634062  0.2191898
#Scores con rotación
head(datos_num_cr$scores,5)
            RC1         RC2
[1,] -0.7696475 -0.39710722
[2,] -1.1190657 -0.02152464
[3,] -0.1147497 -3.24403020
[4,] -1.0271441 -1.66349473
[5,] -0.7401618 -0.79437855

2.4.6 Gráfico Correlación entre factores con rotación

plot_correlation(datos_num_cr$scores)

Conclusiones:

  • La rotación de factores no cambia la comunalidad.
  • La rotación de factores cambia los scores.
  • La rotación de factores cambia el valor de los autovalores.
  • No se recomienda realizar la rotación de factores, ya que desde el principio existe una clara correlación entre las variables y los factores (cargas bien diferenciadas).
  • La rotación genera un inconveniente, ya que la variable ISI(Índice de dispersión inicial) no está claramente definida en cuanto a cuál factor debe estar relacionada.
  • La rotación de factores mantiene en cero la correlación entre los factores.

2.4.7 Gráfico Resumen

x=c(1,2,3,3)
m <- matrix(x, ncol = 2)
#m
layout(m)
nf <- layout(m)
#layout.show(nf)

load <- datos_num_sr$loadings[,1:2]
plot(load, pch=16, xlim=c(-1,1), ylim=c(-1,1),col="chartreuse3",
     xlab="Factor 1",ylab="Factor 2") 
abline(h=0,lty=3,col="brown1",lwd=2)
abline(v=0,lty=3,col="burlywood1",lwd=2)
text(load,pos=1,labels=names(datos),cex=1.1)#agrega los nombres a las variables

# Grafica de circulo de correlaciones
library(ade4)
s.corcircle(load,grid=FALSE)
fa.diagram(datos_num_sr)

Conclusiones:

  • Se nota una correlación entre las siguientes variables con el primer factor: FWI, DMC, BUI, ISI, FFMC, DC y temperatura. Mientras que, Ws muestra una correlación significativa con el segundo factor.
LS0tDQp0aXRsZTogIlByw6FjdGljYSBDYWxpZmljYWRhIDIgZGVsIGNpY2xvIDIwMjMtSUkiDQphdXRob3I6ICIiDQpkYXRlOiAiIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiB5ZXMNCiAgICAgIHNtb290aF9zY3JvbGw6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgYW5jaG9yX3NlY3Rpb25zOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHRoZW1lOiBqb3VybmFsDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgY29tbWVudCA9Jyd9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgY29tbWVudCA9ICcnKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KCkNCmBgYA0KDQpJbnRlZ3JhbnRlczoNCg0KLSBEw61heiBWaWN0b3INCi0gRmlhZmlsaW8gSXNhYmVsDQotIFBhbGFjaW9zIExlb25hcmRvDQotIFF1aXNwZSBHcmlzZWxkYQ0KDQoNCiMgQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIFByaW5jaXBhbGVzDQoNCkNvbiB1bmEgZGF0YSBhcHJvcGlhZGEsIHByaW1lcm8gaGFnYSBlbCBhbsOhbGlzaXMgZXhwbG9yYXRvcmlvIHkgbHVlZ28gYXBsaXF1ZSBlbCBBbsOhbGlzaXMgZGUgQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXMuDQoNCiMjICoqQ29udGV4dG8qKg0KDQpFbCBjb25qdW50byBkZSBkYXRvcyBwcm92aWVuZSBkZSB1biBlc3R1ZGlvIHNvYnJlIGluY2VuZGlvcyBmb3Jlc3RhbGVzIGVuIGRvcyByZWdpb25lcyBkZSBBcmdlbGlhIGxhIHJlZ2nDs24gZGUgQmVqYWlhIHkgbGEgcmVnacOzbiBkZSBTaWRpIEJlbC1BYmJlcy4gTGEgY3Jvbm9sb2fDrWEgZGUgZXN0ZSBjb25qdW50byBkZSBkYXRvcyB2YSBkZSBqdW5pbyBkZSAyMDEyIGEgc2VwdGllbWJyZSBkZSAyMDEyLiBFc3RlIGVzdHVkaW8sIHNlIGNlbnRybyBlbiBkZXRlcm1pbmFyIGxhcyBjYXJhY3RlcsOtc3RpY2FzIG1ldGVvcm9sw7NnaWNhcyBwb2TDrWFuIHByZWRlY2lyIGxvcyBpbmNlbmRpb3MgZm9yZXN0YWxlcyBlbiBlc3RhcyByZWdpb25lcy4NCg0KIyMgKipWYXJpYWJsZXMqKg0KDQotICAgRmVjaGEgOiAoREQvTU0vQUFBQSkgRMOtYSwgbWVzICgnanVuaW8nIGEgJ3NlcHRpZW1icmUnKSwgYcOxbyAoMjAxMikNCg0KLSAgIE9ic2VydmFjaW9uZXMgZGUgZGF0b3MgbWV0ZW9yb2zDs2dpY29zDQoNCiAgICAqKi0gVGVtcGVyYXR1cmUqKiA6IHRlbXBlcmF0dXJhIG1lZGlvZMOtYSAodGVtcGVyYXR1cmEgbcOheGltYSkgZW4gZ3JhZG9zIENlbHNpdXM6IDIyIGEgNDINCg0KICAgICoqLSBSSCoqIDogSHVtZWRhZCByZWxhdGl2YSBlbiAlOiAyMSBhIDkwDQoNCiAgICAqKi0gV3MqKiA6VmVsb2NpZGFkIGRlbCB2aWVudG8gZW4ga20vaDogNiBhIDI5DQoNCiAgICAqKi0gTGx1dmlhKio6IHRvdGFsIGRlbCBkw61hIGVuIG1tOiAwIGEgMTYsOA0KDQotICAgQ29tcG9uZW50ZXMgRldJIChGaXJlIFdlYXRoZXIgSW5kZXgpIC0gw41uZGljZSBtZXRlb3JvbMOzZ2ljbyBkZSBpbmNlbmRpb3MNCg0KICAgICoqLSDDjW5kaWNlIGRlbCBDw7NkaWdvIGRlIEh1bWVkYWQgZGUgQ29tYnVzdGlibGUgRmlubyAoRkZNQykgZGVsIHNpc3RlbWEgRldJKio6IDI4LDYgYSA5Miw1DQoNCiAgICAqKi0gw41uZGljZSBkZWwgQ8OzZGlnbyBkZSBIdW1lZGFkIGRlIER1ZmYgKERNQykgZGVsIHNpc3RlbWEgRldJKio6IDEsMSBhIDY1LDkNCg0KICAgICoqLSDDjW5kaWNlIGRlbCBDw7NkaWdvIGRlIFNlcXXDrWEgKERDKSBkZWwgc2lzdGVtYSBGV0kqKjogNyBhIDIyMCw0DQoNCiAgICAqKi0gw41uZGljZSBkZSBkaXNwZXJzacOzbiBpbmljaWFsIChJU0kpIGRlbCBzaXN0ZW1hIEZXSSoqOiAwIGEgMTgsNQ0KDQogICAgKiotIMONbmRpY2UgZGUgYWN1bXVsYWNpw7NuIChCVUkpIGRlbCBzaXN0ZW1hIEZXSSoqOiAxLDEgYSA2OA0KDQogICAgKiotIMONbmRpY2UgbWV0ZW9yb2zDs2dpY28gZGVsIGluY2VuZGlvIChGV0kpIGRlbCBzaXN0ZW1hIEZXSSoqOiAwIGEgMzEsMQ0KDQogICAgKiotIENsYXNlcyoqOiAiSW5jZW5kaW8iIHkgIk5vIGluY2VuZGlvDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShEVCkNCkRhdGFzZXQgPC0gcmVhZF9jc3YoIkRhdGFzZXROLnR4dCIpDQpkaW0oRGF0YXNldCkNCmRhdGF0YWJsZShEYXRhc2V0LG9wdGlvbnMgPSBsaXN0KHNlYXJjaGluZyA9IEZBTFNFKSkNCmBgYA0KDQojIyAqKkFuw6FsaXNpcyBleHBsb3JhdG9yaW8qKg0KDQojIyMgUmVzdW1lbiBlc3RhZMOtc3RpY28gZGVsIGRhdGFzZXQNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnN1bW1hcnkoRGF0YXNldCkNCg0Kc3RyKERhdGFzZXQpDQpgYGANCg0KIyMjIERldGVjY2nDs24gZGUgdmFsb3JlcyBwZXJkaWRvcw0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShEYXRhRXhwbG9yZXIpDQpwbG90X21pc3NpbmcoRGF0YXNldCkNCmBgYA0KDQojIyMgU2VsZWNjacOzbiB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcw0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KRGF0YXNldC4xPURhdGFzZXRbLCBzYXBwbHkoRGF0YXNldCwgaXMubnVtZXJpYyldDQpoZWFkKERhdGFzZXQuMSkNCkRhdGFzZXQuMj1EYXRhc2V0LjFbLC0xXQ0KaGVhZChEYXRhc2V0LjIpDQpgYGANCg0KIyMjIERldGVjY2nDs24gZGUgb3V0bGllcnMgbXVsdGl2YXJpYW50ZXMNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoTVZOKQ0Kb3V0bGllcnMgPC0gbXZuKGRhdGEgPSBEYXRhc2V0LjIsIG12blRlc3QgPSAiaHoiLCANCiAgICAgICAgICAgICAgICBtdWx0aXZhcmlhdGVPdXRsaWVyTWV0aG9kID0gInF1YW4iKSANCmBgYA0KDQojIyAqKkFuw6FsaXNpcyBncsOhZmljby1kZXNjcmlwdGl2byoqDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGFkZTQpDQpsaWJyYXJ5KEZhY3RvTWluZVIpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KGZhY3RvZXh0cmEpDQpsaWJyYXJ5KFBlcmZvcm1hbmNlQW5hbHl0aWNzKQ0KbGlicmFyeShHR2FsbHkpDQpgYGANCg0KIyMjIEdyw6FmaWNvIGRlIGJhcnJhcw0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShlcGlEaXNwbGF5KQ0KdGFibGEyPXRhYjEoRGF0YXNldCRDbGFzc2VzLGN1bS5wZXJjZW50ID0gVFJVRSxtYWluPSJUYWJsYSBkZSBDbGFzc2VzIiwNCiAgICAgICAgICAgIGNvbCA9IGMoJ2dyZWVuMicsJ3llbGxvdycpKQ0KDQpwcENsYXNzZXM9cm91bmQoKHByb3AudGFibGUodGFibGUoRGF0YXNldCRDbGFzc2VzKSkqMTAwKSwxKQ0KcHBDbGFzc2VzDQpiYXJwbG90KHBwQ2xhc3Nlcyx5bGFiID0gIlBvcmNlbnRhamUgKCUpIiwNCiAgICAgICAgeGxhYiA9ICJDbGFzc2VzIixjb2w9YygnZ3JlZW4yJywneWVsbG93JyksDQogICAgICAgIG1haW49IlByb3BvcmNpw7NuIGRlIGluY2VuZGlvcyIsDQogICAgICAgIGNleC5uYW1lcyA9MC43NSkNCmBgYA0KDQojIyMgRXN0YW5kYXJpemFjacOzbiBkZSBsb3MgZGF0b3MNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCkRhdGFzZXQuMzwtIGFzLmRhdGEuZnJhbWUoc2NhbGUoRGF0YXNldC4yKSkNCmhlYWQoRGF0YXNldC4zKQ0KYGBgDQoNCiMjICoqQW7DoWxpc2lzIGRlIENvcnJlbGFjacOzbioqDQoNCiMjIyBHcsOhZmljYSBkZSBkaXNwZXJzacOzbg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwc3ljaCkNCnBhaXJzLnBhbmVscyhEYXRhc2V0LjMpDQpgYGANCg0KLSAgIFNlIG9ic2VydmEgdW5hIGFsdGEgY29ycmVsYWNpw7NuIGVudHJlIERNQyBZIEJVSSAoMC45OCkuDQoNCi0gICBTZSBvYnNlcnZhIHVuYSBhbHRhIGNvcnJlbGFjacOzbiBlbnRyZSBEQyBZIEJVSSAoMC45NCkuDQoNCi0gICBTZSBvYnNlcnZhIHVuYSBhbHRhIGNvcnJlbGFjacOzbiBlbnRyZSBJU0kgWSBGV0kgKDAuOTIpLg0KDQotICAgU2Ugb2JzZXJ2YSB1bmEgYWx0YSBjb3JyZWxhY2nDs24gZW50cmUgRldJIFkgRE1DICgwLjg4KS4NCg0KIyMjIE1hdHJpeiBkZSBWYXJpYW5jaWEtQ292YXJpYW5jaWENCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmhlYWQoRGF0YXNldC4zKQ0Kcm91bmQoY292KERhdGFzZXQuMyksMykNCnN1bShkaWFnKGNvdihEYXRhc2V0LjMpKSkNCmBgYA0KDQojIyMgR3LDoWZpY28gZGUgY29ycmVsYWNpw7NuDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGNvcnJwbG90KQ0KaT1jb3IoRGF0YXNldC4zLG1ldGhvZD0icGVhcnNvbiIpDQpjb3JycGxvdChpLHNpZy5sZXZlbD0wLjA1LHR5cGU9Imxvd2VyIikNCmBgYA0KDQojIyMgUHJ1ZWJhIGRlIGNvcnJlbGFjacOzbg0KDQotICAgSG86IM+BID0gMCAoTm8gaGF5IGNvcnJlbGFjacOzbiksIHNpIHB2YWxvciDiiaUgMC4wNQ0KDQotICAgSDE6IM+BIOKJoCAwIChIYXkgY29ycmVsYWNpw7NuKSwgc2kgcHZhbG9yIDwgMC4wNQ0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kb3B0aW9ucyhzY2lwZW4gPSA5OTkpDQpyZXMxPWNvci5tdGVzdChEYXRhc2V0LjMsY29uZi5sZXZlbD0wLjA1KQ0Kcm91bmQocmVzMSRwLDQpDQpgYGANCg0KIyMgKipBbsOhbGlzaXMgZGUgQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXMqKg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShhZGU0KQ0KYWNwID0gZHVkaS5wY2EoRGF0YXNldC4yLA0KICAgICAgICAgICAgICAgIHNjYW5uZj1GQUxTRSwgc2NhbGU9VFJVRSwNCiAgICAgICAgICAgICAgICBuZj1uY29sKERhdGFzZXQuMikpDQpzdW1tYXJ5KGFjcCkNCmBgYA0KDQojIyMgUmV0ZW5jacOzbiBkZSBDb21wb25lbnRlcyBQcmluY2lwYWxlcw0KDQotIDEpICBDcml0ZXJpbyBwcsOhY3RpY286IFJldGVuZXIgbGFzIGRvcyBwcmltZXJhcyBjb21wb25lbnRlcywgZGFkbyBxdWUgZWwgYW7DoWxpc2lzIGdyw6FmaWNvIGVuIGRvcyBkaW1lbnNpb25lcyByZXN1bHRhIHByw6FjdGljby4gRW4gZWwgY2FzbyBwcmVzZW50YWRvLCBsYXMgZG9zIHByaW1lcmFzIGNvbXBvbmVudGVzIHJldGVuaWRvcyBxdWUgc29uIEFYMSB5IEFYMiBleHBsaWNhbiBlbCA3My4xJSBkZSBsYSB2YXJpYWJpbGlkYWQgZGUgbG9zIGRhdG9zLg0KDQotIDIpICBDcml0ZXJpbyBkZSBsYSBtZWRpYSBhcml0bcOpdGljYTogU2UgZXNjb2dlcsOhbiBsYXMgY29tcG9uZW50ZXMgcXVlIHRlbmdhbiB1biBlaWdlbnZhbG9yIG1heW9yIGEgMS4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnJvdW5kKGFjcCRlaWcsMikNCmBgYA0KDQotIDMpICBHcsOhZmljbyBkZSBTZWRpbWVudGFjacOzbjoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZmFjdG9leHRyYSkNCmZ2aXpfZWlnKGFjcCwgYWRkbGFiZWxzPVRSVUUsIGhqdXN0ID0gMC41KQ0KYGBgDQoNCiMjIyBBbsOhbGlzaXMgQUNQL0FEQ1ANCg0KLSAxKSAgR3LDoWZpY28gZGUgdmFyaWFibGVzIGVuIGVsIEFDUDoNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmZ2aXpfcGNhX3ZhcihhY3AsIGNvbC52YXI9InN0ZWVsYmx1ZSIpK3RoZW1lX21pbmltYWwoKQ0KYGBgDQoNCi0gMikgIFNjb3JlcyBvIFB1bnR1YWNpb25lcyBkZSBjYWRhIGZlY2hhDQoNCkxhcyBwdW50dWFjaW9uZXMgZGUgY2FkYSBmZWNoYSBlbiBlbCBhbsOhbGlzaXMgZGUgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgKFBDQSkgc2UgcmVmaWVyZW4gYSBsYXMgY29vcmRlbmFkYXMgZGUgbGFzIG9ic2VydmFjaW9uZXMgZW4gZWwgZXNwYWNpbyBkZSBsYXMgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMuDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQphY3AkbGlbMToxMCxdDQpgYGANCg0KLSAzKSAgRXN0YWTDrXN0aWNhcyBkZXNjcmlwdGl2YXMgZGUgbGFzIGNvbXBvbmVudGVzDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBzeWNoKQ0KZGVzY3JpYmUoYWNwJGxpKQ0KYGBgDQoNCi0gICBMYSBtZWRpYSBlbiBsYXMgY29tcG9uZW50ZXMgZXMgY2VyY2FuYSBhIGNlcm8sIGxvIHF1ZSBpbmRpY2EgcXVlIGxhcyBwdW50dWFjaW9uZXMgdGllbmRlbiBhIGNlbnRyYXJzZSBhbHJlZGVkb3IgZGUgY2VybyBlbiBlc3RhcyBkaW1lbnNpb25lczsgZWxsbyBzZSBkYSBwb3JxdWUgbG9zIGRhdG9zIGNlbnRyYWRvcyBnYXJhbnRpemFuIHF1ZSBsYXMgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgY2FwdHVyZW4gbGEgdmFyaWFiaWxpZGFkIGRlIG1hbmVyYSDDs3B0aW1hDQoNCi0gICBTZSBvYnNlcnZhIHVuYSBhbHRhIGNvcnJlbGFjacOzbiBlbnRyZSBEQyBZIEJVSSAoMC45NCkuDQoNCi0gICBTZSBvYnNlcnZhIHVuYSBhbHRhIGNvcnJlbGFjacOzbiBlbnRyZSBJU0kgWSBGV0kgKDAuOTIpLg0KDQotICAgU2Ugb2JzZXJ2YSB1bmEgYWx0YSBjb3JyZWxhY2nDs24gZW50cmUgRldJIFkgRE1DICgwLjg4KS4NCg0KLSA0KSAgR3LDoWZpY2EgZGUgaW5kaXZpZHVvcyBzb2JyZSBlbCBwcmltZXIgcGxhbm8gZGUgY29tcG9uZW50ZXMNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmZ2aXpfcGNhX2luZChhY3AsIHJlcGVsID0gRixjb2wuaW5kID0gJ3N0ZWVsYmx1ZScpDQpgYGANCg0KLSA1KSAgRm9ybWFjacOzbiBkZSBncnVwb3MNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkgKGFkZWdlbmV0KQ0KbGlicmFyeSAoZmFjdG9leHRyYSkNCmdycCA8LSBmaW5kLmNsdXN0ZXJzKERhdGFzZXQuMywgbi5wY2EgPSAyLCBuLmNsdXN0ID0gMikNCmdycCRzaXplDQpgYGANCg0KLSA2KSAgREFQQzogQW7DoWxpc2lzIGRpc2NyaW1pbmFudGUgZGUgQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXMNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmRhcGMuV0lESVYgPC0gZGFwYyhEYXRhc2V0LjMsIGdycCRncnAsIG4ucGNhID0gMixuLmRhPTEpDQpzY2F0dGVyKGRhcGMuV0lESVYsIHBvc2kuZGEgPSAiYm90dG9tcmlnaHQiLCBiZyA9ICJ3aGl0ZSIsIHBjaCA9IDE3OjIyLA0KICAgICAgICAgY3N0YXIgPSAwKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpjb250cmliIDwtIGxvYWRpbmdwbG90KGRhcGMuV0lESVYkdmFyLmNvbnRyLCBheGlzPTEsDQogICAgICAgICAgICAgICAgICAgICAgIHRocmVzPS4xMCwgbGFiLmppdHRlcj0xKQ0KZGFwYy5XSURJViR2YXIuY29udHINCmBgYA0KKiBMYXMgdmFyaWFibGVzIHF1ZSBkaXNjcmltaW5hbiBtZWpvciByZXN1bHRhbjogRE1DKMONbmRpY2UgZGVsIEPDs2RpZ28gZGUgSHVtZWRhZCksIERDKMONbmRpY2UgZGVsIEPDs2RpZ28gZGUgSHVtZWRhZCksIElTSSjDjW5kaWNlIGRlIGRpc3BlcnNpw7NuIGluaWNpYWwpLCBCVUkow41uZGljZSBkZSBhY3VtdWxhY2nDs24pIHkgRldJKMONbmRpY2UgbWV0ZW9yb2zDs2dpY28gZGVsIGluY2VuZGlvKS4NCg0KIyMgKipBbsOhbGlzaXMgZGUgQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXMgLSBsaWJyZXLDrWEgRkFDVE9NSU5FUioqDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpyZXNwY2EuZiA9IFBDQShEYXRhc2V0LjIsIHNjYWxlLnVuaXQ9VFJVRSwgbmNwPTEwLCBncmFwaD1UUlVFKQ0Kc3VtbWFyeShyZXNwY2EuZikNCmBgYA0KDQpDb25jbHVzaW9uZXM6IA0KDQoqR3LDoWZpY2EgUENBIGluZGl2aWR1YWwNCg0KLUxhcyBvYnNlcnZhY2lvbmVzIDE3MywgMjAxIHkgMjM1LCBwcmVzZW50YSBtYXMgY2VyY2FuaWEgY29uIGxhIENPTVAxLCBlc3RvIGluZGljYSBxdWUgZXN0YW4gbWFzIGNvcnJlbGFjaW9uYWRhcyBjb24gZXNhIENPTVBPTkVOVEUuDQoNCi1MYXMgb2JzZXJ2YWNpb25lcyAxMTIsIDE2OCB5IDE3NiwgcHJlc2VudGFuIG1hcyBjZXJjYW5pYSBjb24gbGEgQ09NUDIsIGVzbyBpbmRpY2EgcXVlIGVzIHRhbiBtYXMgY29ycmVsYWNpb25hZGFzIGNvbiBlc2EgQ09NUE9ORU5URS4NCg0KKiBHcsOhZmljYSBQQ0EgdmFyaWFibGVzDQoNCi0gbGFzIHZhcmlhYmxlcyBGV0kgZSBJU0kgc29uIGxhcyBxdWUgcHJlc2VudGFuIG1hcyBjZXJjYW5pYSBjb24ga2xhIENPTVAxLCBwb3IgbG8gcXVlIGluZGljYSBxdWUgZXhpc3RlIG1hcyBjb3JyZWNsYWNpb24gY29uIGVzYSBDT01QT05FTlRFLg0KDQotIExhIHZhcmlhYmxlIFdzIGVzdGEgbWFzIGNlcmNhbm8gYSBsYSBDT01QMiwgZXN0byBpbmRpY2EgcXVlIGVzdGEgbWFzIGNvcnJlbGFjaW9uYWRvIGNvbiBsYSBDT01QMi4NCg0KKiBWYXJpYWJsZXM6DQoNCi0gICBMYXMgdmFyaWFibGVzIEZXSSB5IERNQyBleHBsaWNhbiBlbCAxNS40ODQlIHkgMTQuMDExJSBkZSBsYSB2YXJpYWJpbGlkYWQgZGUgbGEgQ09NUDEuIEFtYmFzIHZhcmlhYmxlcyBzb24gbGFzIHF1ZSBleHBsaWNhbiBtYXMgYSBlc2EgY29tcG9uZW50ZS4NCg0KLSAgIExhIHZhcmlhYmxlIFdTIGVzIGxhIHF1ZSBleHBsaWNhIG1hcyBjb24gMjcuODY3JSBkZSBsYSB2YXJpYWJpbGlkYWQgZGUgbGEgQ09NUDIuIExlIHNpZ3VlIGxhIHZhcmlhYmxlIFJIIGNvbiAxNi44NiUgZGUgbGEgdmFyaWFibGlkYWQgZGUgbGEgQ09NUC4yDQoNCi0gICBMYSBDT01QMSBleHBsaWNhIDUwLjklIGRlIGxhIHZhcmlhYmxlIFRlbXBlcmF0dXJhLCBsYSBDT01QMiBlbCAxOS40JSwgbGEgQ09NUDMgZWwgMS4yJS4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMjIHNlIHRpcGlmaWNhIHBvcnF1ZSBubyB0aWVuZW4gdmFyaWFuemEgMSB5IG1lZGlhIDAgKG5vcm1hbCBlc3RhbmRhcml6YWRhKQ0KcGxvdChyZXNwY2EuZiwgbGFiZWwgPSAibm9uZSIpDQpmdml6X3BjYV92YXIocmVzcGNhLmYsIGNvbC52YXIgPSAic3RlZWxibHVlIikNCmBgYA0KYGBge3J9DQpyZXNwY2EuZiRlaWcNCnJlc3BjYS5mJHZhcg0KYGBgDQoNCkNvbmNsdXNpb25lczoNCg0KLSBMb3MgdmFsb3JlcyBkZSBjb3JyZWxhY2lvbiBjb25maXJtYW4gbGEgZ3JhZmljYSBkZXNjcml0YSBhbnRlcmlvcm1lbnRlLiBsYXMgdmFyaWFibGVzIEZXSSBlIElTSSB0aWVlbiB1bmEgYWx0YSBjb3JyZWxhY2lvbiBjb24gbGEgQ09NUDEgc2llbmRvIGxvcyB2YWxvcmVzIDAuOTQwOTAyNjAgeSAwLjg3MDUzMzQ0Lg0KLSBMYSB2YXJpYWJsZSBSQUlOIHByZXNlbnRhIHRpZW5lIHVuIHZhbG9yIGRlIGNvcnJlbGFjaW9uIG1hcyBlbGV2YW5kbyBjb24gbGEgQ09NUDMgcXVlIGNvbiBsYXMgZGVtYXMgQ09NUE9ORU5URVMgc2llbmRvIGVsIHZhbG9yIDAuNTg5MTc4NTkuDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIyBwYXJhIGNvbmZpcm1hciBsYSByZXRlbmNpb24gZGUgZG9zIGNvbXBvbmVudGVzDQpsaWJyYXJ5KHBhcmFuKQ0KcGFyYW4oRGF0YXNldC4yLGl0ZXJhdGlvbnM9NTAwMCxncmFwaD1UUlVFLGNvbG9yPTIpDQpgYGANCg0KDQojIEFuw6FsaXNpcyBGYWN0b3JpYWwgQ2zDoXNpY28NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocGFjbWFuKQ0KcF9sb2FkKGRwbHlyLGNvcnJwbG90LERhdGFFeHBsb3Jlcixwc3ljaCxndG9vbHMsbXZub3JtdGVzdCkNCmBgYA0KDQoqIERlIGFjdWVyZG8gYSBsYSBncsOhZmljYSBzZSBvYnNlcnZhIHF1ZSBoYXN0YSBsYXMgQ09NUDIgZWwgdmFsb3IgZGUgbG9zIGVpZ2VudmFsb3JlcyBkZSBsYXMgY29tcG9uZW50ZXMgc24gbWF5b3JlcyBhIDENCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocmVhZHIpDQpkYXRvcz1yZWFkLmRlbGltKCdEYXRhc2V0Ti50eHQnLGhlYWRlciA9IFRSVUUsc2VwID0iLCIpIA0Kc3RyKGRhdG9zKQ0KYGBgDQoNCiMjICoqQW7DoWxpc2lzIGV4cGxvcmF0b3JpbyoqDQogDQojIyMgUmV2aXNpw7NuIHZhbG9yZXMgbnVsb3MNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnBsb3RfbWlzc2luZyhkYXRvcykNCmNvbFN1bXMoaXMubmEoZGF0b3MpKQ0KYGBgDQojIyMgU2VsZWNjacOzbiB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcw0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmRhdG9zX251bT1kYXRvcyAlPiUgc2VsZWN0KGMoJ1RlbXBlcmF0dXJlJzonRldJJykpDQpgYGANCg0KIyMjIEdyw6FmaWNvIGRlIGhpc3RvZ3JhbWFzDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpwbG90X2hpc3RvZ3JhbShkYXRvc19udW0pDQpgYGANCiMjICoqQW7DoWxpc2lzIGRlIGNvcnJlbGFjacOzbioqDQoNCiMjIyBNYXRyaXogZGUgY29ycmVsYWNpw7NuDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcGxvdF9jb3JyZWxhdGlvbihkYXRvc19udW0pDQpgYGANCg0KIyMjIEFuYWxpc2lzIGRlIG1hdHJpeiBkZSBjb3JyZWxhY2lvbiBpbnZlcnNhDQoNCmBgYHtyfQ0KY29ycmVsPXJvdW5kKGNvcihkYXRvc19udW0pLDIpDQpyb3VuZChzb2x2ZShjb3JyZWwpLDMpDQpgYGANCg0KIyMgKipQcnVlYmFzIGVzdGFkw61zdGljYXMqKg0KDQojIyMgUHJ1ZWJhIGRlIGNvcnJlbGFjacOzbg0KDQotICAgSG86IExhcyB2YXJpYWJsZXMgbm8gZXN0w6FuIGNvcnJlbGFjaW9uYWRhcyAoz4EgPSAwKQ0KDQotICAgSDE6IExhcyB2YXJpYWJsZXMgZXN0YW4gY29ycmVsYWNpb25hZGFzICjPgSDiiaAgMCkNCg0KYGBge3J9DQpyb3VuZChjb3IubXRlc3QoZGF0b3NfbnVtLGFscGhhPTAuMDUpJHAsMykNCmBgYA0KKiBDYW50aWRhZCBkZSBjb3JyZWxhY2lvbmVzIG5vIHNpZ25pZmljYXRpdmFzOiA1DQoNCmBgYHtyfQ0KcmVzMT1jb3IubXRlc3QoZGF0b3NfbnVtLGNvbmYubGV2ZWw9MC4wNSkNCmk9Y29yKGRhdG9zX251bSxtZXRob2Q9InBlYXJzb24iKQ0KY29ycnBsb3QoaSwgcC5tYXQgPSByZXMxJHAsIHNpZy5sZXZlbCA9IDAuMDUpDQpgYGANCg0KDQoqIERlIGxhcyA0NSBwcnVlYmFzIGRlIGNvcnJlbGFjacOzbiByZWFsaXphZGFzIHBhcmEgbGFzIDEwIHZhcmlhYmxlcywgc29sbyA1IGRlIGVsbGFzIHJlc3VsdGFyb24gbm8gc2lnbmlmaWNhdGl2YXMuIEEgcGFydGlyIGRlIGVzdG8sIHBvZGVtb3MgY29uY2x1aXIgcXVlIGV4aXN0ZSBldmlkZW5jaWEgZGUgY29ycmVsYWNpw7NuIGVudHJlIGxhcyB2YXJpYWJsZXMuDQoNCiMjIyBQcnVlYmEgZGUgRXNmZXJpY2lkYWQgZGUgQmFydGxldHQNCg0KRW4gZXN0w6EgcHJ1ZWJhIGRlIGFjZXB0YXIgbGEgaGlww7N0ZXNpcyBudWxhIHNlIGRldGVybWluYSBxdWUgbGEgbWF0cml6IGRlIGNvcnJlbGFjacOzbiBkZSBsYXMgdmFyaWFibGVzIGVzIHVuYSBtYXRyaXogZGUgaWRlbnRpZGFkLCBsbyBxdWUgaW1wbGljYSBxdWUgbm8gZXN0w6FuIGNvcnJlbGFjaW9uYWRhcy4NCg0KLSAgSDA6IHxScHwgPSAxDQotICBIMTogfFJwfCDiiaAgMQ0KDQpgYGB7cn0NCm9wdGlvbnMoc2NpcGVuPTApDQplc2Zlcj1jb3J0ZXN0LmJhcnRsZXR0KGNvcihkYXRvc19udW0pLG49ZGltKGRhdG9zX251bSkpDQpzdHIoZXNmZXIpDQplc2ZlciRwLnZhbHVlWzFdDQpgYGANCiogQ29uIHVuIHZhbG9yIGRlIHAtdmFsdWUgaWd1YWwgYSBjZXJvLCBzZSByZWNoYXphIGxhIGhpcMOzdGVzaXMgbnVsYSwgbG8gcXVlIG5vcyBsbGV2YSBhIGNvbmNsdWlyIHF1ZSBleGlzdGUgY29ycmVsYWNpw7NuIGVudHJlIGxhcyB2YXJpYWJsZXMgZGVsIGVzdHVkaW8uDQoNCg0KIyMjIyBQcnVlYmEgbXVsdGl2YXJpYWRhIGRlIFNoYXBpcm8gV2lsayANCg0KLSBIMDogIExhcyB2YXJpYWJsZXMgbm8gc2lndWVuIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBtdWx0aXZhcmlhZGEuDQotIEgxOiAgTGFzIHZhcmlhYmxlcyBzaWd1ZW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYS4NCg0KYGBge3J9DQptc2hhcGlyby50ZXN0KHQoZGF0b3NfbnVtKSkNCmBgYA0KKiBDb24gdW4gdmFsb3IgZGUgcC12YWx1ZSBtZW5vciBxdWUgMi4yZS0xNiwgc2UgcmVjaGF6YSBsYSBoaXDDs3Rlc2lzIG51bGEsIGxvIHF1ZSBsbGV2YSBhIGxhIGNvbmNsdXNpw7NuIGRlIHF1ZSBubyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGENCg0KKiBEYWRvIHF1ZSBubyB2YW1vcyBhIGxsZXZhciBhIGNhYm8gdW4gcHJvY2VzbyBkZSBpbmZlcmVuY2lhIGVzdGFkw61zdGljYSwgcG9kZW1vcyBjb250aW51YXIgY29uIGVsIGFuw6FsaXNpcyBmYWN0b3JpYWwsIGluY2x1c28gc2kgbm8gc2UgY3VtcGxlIGxhIHN1cG9zaWNpw7NuIGRlIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhLg0KDQojIyMgSW5kaWNhZG9yIEthaXNlci1NZXllci1PbGtpbiBLTU8geSBNU0ENCg0KYGBge3J9DQprbW8gPSBwc3ljaDo6S01PKGRhdG9zX251bSkNCmttbyRNU0EgI0tNTyBnZW5lcmFsDQprbW8kTVNBaSAjS01PIHBvciBjYWRhIHZhcmlhYmxlDQpgYGANCg0KKiBEYWRvIHF1ZSBlbCDDrW5kaWNlIEtNTyBnZW5lcmFsICgwLjc2OTc0NzIpIHkgbG9zIHZhbG9yZXMgaW5kaXZpZHVhbGVzIHBhcmEgY2FkYSB2YXJpYWJsZSBzb24gdG9kb3MgbWF5b3JlcyBxdWUgMC41LCBwb2RlbW9zIGNvbmNsdWlyIHF1ZSBsb3MgZGF0b3Mgc29uIGFkZWN1YWRvcyBwYXJhIHJlYWxpemFyIHVuIGFuw6FsaXNpcyBmYWN0b3JpYWwuDQoNCiogRGUgZW5jb250cmFyc2UgdmFyaWFibGVzIGNvbiB1biDDrW5kaWNlIEtNTyBwb3IgZGViYWpvIGRlIDAuNSwgZXMgcmVjb21lbmRhYmxlIGNvbnNpZGVyYXIgbGEgZWxpbWluYWNpw7NuIGRlIGRpY2hhcyB2YXJpYWJsZXMsIGNvbWVuemFuZG8gcG9yIGxhIHZhcmlhYmxlIHF1ZSB0ZW5nYSBlbCDDrW5kaWNlIG3DoXMgYmFqby4NCg0KDQojIyAqKkFuw6FsaXNpcyBmYWN0b3JpYWwgc2luIHJvdGFjacOzbioqDQoNCmBgYHtyfQ0KZGF0b3NfbnVtX3NyIDwtIHByaW5jaXBhbChyPWRhdG9zX251bSxuZmFjdG9ycz0yLHJvdGF0ZT0ibm9uZSIpDQpkYXRvc19udW1fc3IkdmFsdWVzDQpwcmludChkYXRvc19udW1fc3IpDQpgYGANCg0KIyMjIyBHcsOhZmljbyBkZSBzZWRpbWVudGFjacOzbg0KDQpgYGB7cn0NCnBsb3QoZGF0b3NfbnVtX3NyJHZhbHVlcyx0eXBlPSJiIixwY2g9MjAsY29sPSJzdGVlbGJsdWUiLGx3ZD0yKQ0KYWJsaW5lKGg9MSxsdHk9Myxjb2w9InRvbWF0byIsbHdkPTIpDQpgYGANCg0KLSBTZSByZXRlbmRyw6FuIGxvcyBkb3MgcHJpbWVyb3MgZmFjdG9yZXMgbyBjb21wb25lbnRlcyB5YSBxdWUgKipkb3MqKiBkZSBsb3MgdHJlcyBwcmltZXJvcyBhdXRvdmFsb3JlcyAoNS43MTc0MzI1NzEgMS41ODM5MjI3NzMgMC45MjU1Njc5MDUpIHNvbiBtYXlvcmVzIHF1ZSAxLg0KLSBMYSBzdW1hIGRlIHRvZG9zIGxvcyBhdXRvdmFsb3JlcyBlcyBpZ3VhbCBhbCBuw7ptZXJvIGRlIHZhcmlhYmxlcy4NCg0KIyMjIE9yZGVuYW5kbyBjb211bmFsaWRhZGVzDQoNCmBgYHtyfQ0KY29tdW5hbGlkYWQgPSBkYXRhLmZyYW1lKGNvbXVuYWxpZGFkID0gZGF0b3NfbnVtX3NyJGNvbW11bmFsaXR5KQ0KY29tdW5hbGlkYWQkdmFyaWFibGVzID0gcm93bmFtZXMoY29tdW5hbGlkYWQpDQpjb211bmFsaWRhZCA9IGRwbHlyOjphcnJhbmdlKGNvbXVuYWxpZGFkLCBkZXNjKGNvbXVuYWxpZGFkKSkNCnByaW50KGNvbXVuYWxpZGFkKQ0KYGBgDQoNCkNvbmNsdXNpb25lczoNCg0KLSBFbCBwcmltZXIgeSBzZWd1bmRvIGZhY3RvciBleHBsaWNhbiBlbCA1Ny4yJSB5IGVsIDE1LjglIGRlIGxhIHZhcmlhYmlsaWRhZCB0b3RhbCwgcmVzcGVjdGl2YW1lbnRlLg0KLSBMb3MgZG9zIHByaW1lcm9zIGZhY3RvcmVzIGV4cGxpY2FuIHVuIHRvdGFsIGRlbCA3MyUgZGUgbGEgdmFyaWFiaWxpZGFkIGFjdW11bGFkYS4NCi0gTGFzIGNhcmdhcyBmYWN0b3JpYWxlcyBvIGxhcyBjb3JyZWxhY2lvbmVzIGVudHJlIGxhcyB2YXJpYWJsZXMgeSBsb3MgZmFjdG9yZXMgaW5kaWNhbiwgcG9yIGVqZW1wbG8sIHF1ZSBsYSB2YXJpYWJsZSAiVGVtcGVyYXR1cmUiIGVzdMOhIGZ1ZXJ0ZW1lbnRlIGNvcnJlbGFjaW9uYWRhIGNvbiBlbCBwcmltZXIgZmFjdG9yICgwLjcxKS4NCi0gTGEgdmFyaWFibGUgaDIgKGNvbXVuYWxpZGFkKSBzZcOxYWxhLCBwb3IgZWplbXBsbywgcXVlIGVsIDcxLjUxJSBkZSBsYSB2YXJpYWJpbGlkYWQgZW4gbGEgdmFyaWFibGUgInRlbXBlcmF0dXJhIiBzZSBleHBsaWNhIG1lZGlhbnRlIGVsIHByaW1lciB5IHNlZ3VuZG8gZmFjdG9yDQotIExhIHZhcmlhYmxlIHUyIChlc3BlY2lmaWNpZGFkKSBpbmRpY2EgcXVlIGVsIDI5LjQ4JSBkZSBsYSB2YXJpYWJpbGlkYWQgZXMgZXhwbGljYWRhIHBvciBsb3MgZmFjdG9yZXMgbm8gcmV0ZW5pZG9zLg0KLSBTZSBwdWVkZSBhZmlybWFyIHF1ZSBkb3MgZmFjdG9yZXMgc29uIHN1ZmljaWVudGVzIHBhcmEgbGxldmFyIGEgY2FibyBlbCBhbsOhbGlzaXMgZmFjdG9yaWFsDQotIExhIHZhcmlhYmxlIEJVSSjDjW5kaWNlIGRlIGFjdW11bGFjacOzbikgZXMgbGEgcXVlIHByZXNlbnRhIGxhIG1heW9yIGNvbXVuYWxpZGFkLg0KDQoNCiMjIyBDYXJnYXMgZmFjdG9yaWFsZXMNClJlcHJlc2VudGFuIGxhIGNvbnRyaWJ1Y2nDs24gZGUgY2FkYSB2YXJpYWJsZSBhIGxvcyBjb21wb25lbnRlcyBwcmluY2lwYWxlcw0KDQpgYGB7cn0NCmRhdG9zX251bV9zciRsb2FkaW5ncyMgU2Ugb21pdGVuIGxvcyB2YWxvcmVzIG1lbm9yZXMgZGUgMC4xMA0KYGBgDQoqIExvcyB2YWxvcmVzIDAuNzE0LCAtMC40NDEgeSAwLjEwOSBzb24gbGFzIGNvbnRyaWJ1Y2lvbmVzIGRlICJUZW1wZXJhdHVyZSIgYSBQQzEsIFBDMiB5IFBDMywgcmVzcGVjdGl2YW1lbnRlLg0KDQojIyMgR3LDoWZpY28gQ29ycmVsYWNpw7NuIGVudHJlIGxvcyBmYWN0b3Jlcw0KDQpgYGB7cn0NCnBsb3RfY29ycmVsYXRpb24oZGF0b3NfbnVtX3NyJHNjb3JlcykNCmBgYA0KDQoqIE5vIHNlIG9ic2VydmEgY29ycmVsYWNpw7NuIGVudHJlIGxvcyBmYWN0b3Jlcy4NCg0KDQojIyAqKkFuw6FsaXNpcyBmYWN0b3JpYWwgY29tcGFyYXRpdm8gc2luIHJvdGFjacOzbiB5IGNvbiByb3RhY2nDs24qKg0KDQoNCiMjIyBSb3RhY2nDs24gZGUgbG9zIGZhY3RvcmVzDQpgYGB7cn0NCmRhdG9zX251bV9jciA8LSBwcmluY2lwYWwocj1kYXRvc19udW0sbmZhY3RvcnM9Mixyb3RhdGU9InZhcmltYXgiKQ0KZGF0b3NfbnVtX2NyDQpgYGANCg0KIyMjIENvbXVuYWxpZGFkZXMgY29tcGFyYXRpdmENCg0KYGBge3J9DQojQ29tdW5hbGlkYWQgc2luIHJvdGFjacOzbg0KZGF0b3NfbnVtX3NyJGNvbW11bmFsaXR5DQojQ29tdW5hbGlkYWQgY29uIHJvdGFjacOzbg0KZGF0b3NfbnVtX2NyJGNvbW11bmFsaXR5DQpgYGANCiMjIyBDYXJnYXMgZmFjdG9yaWFsZXMgY29tcGFyYXRpdmENCg0KYGBge3J9DQojQ2FyZ2FzIHNpbiByb3RhY2nDs24NCmRhdG9zX251bV9zciRsb2FkaW5ncw0KI0NhcmdhcyBjb24gcm90YWNpw7NuDQpkYXRvc19udW1fY3IkbG9hZGluZ3MNCmBgYA0KDQojIyMgR3LDoWZpY2EgY29tcGFyYXRpdmENCg0KYGBge3J9DQojU2luIHJvdGFjacOzbg0KbG9hZGluZ3M9ZGF0b3NfbnVtX3NyJGxvYWRpbmdzDQpwYXIobWZjb2w9YygxLDIpKQ0KcGxvdChsb2FkaW5ncyx4bGltPWMoLTEsMSkseWxpbT1jKC0xLDEpLHhsYWI9J0ZhY3RvcjEnLHlsYWI9J0ZhY3RvcjInKQ0KdGV4dChsb2FkaW5ncyxyb3cubmFtZXMobG9hZGluZ3MpLHBvcz1jKDEsMiwyLDIsMSkpDQphYmxpbmUodj0wLGg9MCxsdHk9MikNCg0KI0NvbiByb3RhY2lvbg0Kcm90LmxvYWRpbmdzPWRhdG9zX251bV9jciRsb2FkaW5ncw0KcGxvdChyb3QubG9hZGluZ3MseGxpbT1jKC0xLDEpLHlsaW09YygtMSwxKSx4bGFiPSdGYWN0b3IxIFJvdCcseWxhYj0nRmFjdG9yMiBSb3QnKQ0KdGV4dChyb3QubG9hZGluZ3Mscm93Lm5hbWVzKGxvYWRpbmdzKSxwb3M9YygxLDIsMiwyLDEpKQ0KYWJsaW5lKHY9MCxoPTAsbHR5PTIpDQpwYXIobWZjb2w9YygxLDEpKQ0KYGBgDQoNCiMjIyBTY29yZSBvIHB1bnR1YWNpb25lcw0KDQpgYGB7cn0NCiNTY29yZXMgc2luIHJvdGFjacOzbg0KaGVhZChkYXRvc19udW1fc3Ikc2NvcmVzLDUpDQoNCiNTY29yZXMgY29uIHJvdGFjacOzbg0KaGVhZChkYXRvc19udW1fY3Ikc2NvcmVzLDUpDQpgYGANCg0KIyMjIEdyw6FmaWNvIENvcnJlbGFjacOzbiBlbnRyZSBmYWN0b3JlcyBjb24gcm90YWNpw7NuDQoNCmBgYHtyfQ0KcGxvdF9jb3JyZWxhdGlvbihkYXRvc19udW1fY3Ikc2NvcmVzKQ0KYGBgDQoNCkNvbmNsdXNpb25lczogDQoNCi0gTGEgcm90YWNpw7NuIGRlIGZhY3RvcmVzIG5vIGNhbWJpYSBsYSBjb211bmFsaWRhZC4NCi0gTGEgcm90YWNpw7NuIGRlIGZhY3RvcmVzIGNhbWJpYSBsb3Mgc2NvcmVzLg0KLSBMYSByb3RhY2nDs24gZGUgZmFjdG9yZXMgY2FtYmlhIGVsIHZhbG9yIGRlIGxvcyBhdXRvdmFsb3Jlcy4NCi0gTm8gc2UgcmVjb21pZW5kYSByZWFsaXphciBsYSByb3RhY2nDs24gZGUgZmFjdG9yZXMsIHlhIHF1ZSBkZXNkZSBlbCBwcmluY2lwaW8gZXhpc3RlIHVuYSBjbGFyYSBjb3JyZWxhY2nDs24gZW50cmUgbGFzIHZhcmlhYmxlcyB5IGxvcyBmYWN0b3JlcyAoY2FyZ2FzIGJpZW4gZGlmZXJlbmNpYWRhcykuDQotIExhIHJvdGFjacOzbiBnZW5lcmEgdW4gaW5jb252ZW5pZW50ZSwgeWEgcXVlIGxhIHZhcmlhYmxlIElTSSjDjW5kaWNlIGRlIGRpc3BlcnNpw7NuIGluaWNpYWwpIG5vIGVzdMOhIGNsYXJhbWVudGUgZGVmaW5pZGEgZW4gY3VhbnRvIGEgY3XDoWwgZmFjdG9yIGRlYmUgZXN0YXIgcmVsYWNpb25hZGEuDQotICBMYSByb3RhY2nDs24gZGUgZmFjdG9yZXMgbWFudGllbmUgZW4gY2VybyBsYSBjb3JyZWxhY2nDs24gZW50cmUgbG9zIGZhY3RvcmVzLg0KDQoNCiMjIyBHcsOhZmljbyBSZXN1bWVuDQoNCmBgYHtyfQ0KeD1jKDEsMiwzLDMpDQptIDwtIG1hdHJpeCh4LCBuY29sID0gMikNCiNtDQpsYXlvdXQobSkNCm5mIDwtIGxheW91dChtKQ0KI2xheW91dC5zaG93KG5mKQ0KDQpsb2FkIDwtIGRhdG9zX251bV9zciRsb2FkaW5nc1ssMToyXQ0KcGxvdChsb2FkLCBwY2g9MTYsIHhsaW09YygtMSwxKSwgeWxpbT1jKC0xLDEpLGNvbD0iY2hhcnRyZXVzZTMiLA0KICAgICB4bGFiPSJGYWN0b3IgMSIseWxhYj0iRmFjdG9yIDIiKSANCmFibGluZShoPTAsbHR5PTMsY29sPSJicm93bjEiLGx3ZD0yKQ0KYWJsaW5lKHY9MCxsdHk9Myxjb2w9ImJ1cmx5d29vZDEiLGx3ZD0yKQ0KdGV4dChsb2FkLHBvcz0xLGxhYmVscz1uYW1lcyhkYXRvcyksY2V4PTEuMSkjYWdyZWdhIGxvcyBub21icmVzIGEgbGFzIHZhcmlhYmxlcw0KDQojIEdyYWZpY2EgZGUgY2lyY3VsbyBkZSBjb3JyZWxhY2lvbmVzDQpsaWJyYXJ5KGFkZTQpDQpzLmNvcmNpcmNsZShsb2FkLGdyaWQ9RkFMU0UpDQpmYS5kaWFncmFtKGRhdG9zX251bV9zcikNCg0KYGBgDQoNCkNvbmNsdXNpb25lczoNCg0KLSBTZSBub3RhIHVuYSBjb3JyZWxhY2nDs24gZW50cmUgbGFzIHNpZ3VpZW50ZXMgdmFyaWFibGVzIGNvbiBlbCBwcmltZXIgZmFjdG9yOiBGV0ksIERNQywgQlVJLCBJU0ksIEZGTUMsIERDIHkgdGVtcGVyYXR1cmEuIE1pZW50cmFzIHF1ZSwgV3MgbXVlc3RyYSB1bmEgY29ycmVsYWNpw7NuIHNpZ25pZmljYXRpdmEgY29uIGVsIHNlZ3VuZG8gZmFjdG9yLg==