1 Eólica

1.1 Leer datos Mar de Plata - Buenos Aires - Argentina

suppressMessages(library(ggplot2))  
suppressMessages(library(readxl))
suppressMessages(library(ggpubr))  
suppressMessages(library(dplyr))  
suppressMessages(library(ggmap))  
suppressMessages(library(tidyverse))
suppressMessages(library(RColorBrewer)) 
suppressMessages(library(rmarkdown)) 
suppressMessages(library(lubridate))
suppressMessages(library(univariateML))
suppressMessages(library(fitdistrplus))
suppressMessages(library(univariateML))
suppressMessages(library(tidyverse))
suppressMessages(library(shiny))
setwd("C:/Users/User/Desktop/MasterIndustriales/Fuentes Energia")
source("windRoseFunction.R")
data<- read_excel("2821473_Mar_De_Plata_new.xlsx")
#Este tipo de estación recoge datos cada 3 horas

Leo los datos obtenidos de Mar de Plata Buenos Aires entre los años 2016/2020

dat_1 <- str_split_fixed(data$DATE, "T", 2)
colnames(dat_1) <- c('DATE','HOUR')
DATE00 <- paste(dat_1[,1],dat_1[,2], sep= " ")
DATE00 <- as.POSIXct(DATE00, format="%Y-%m-%d %H:%M:%S",tz="UTC")

Separamos los valores de la columna WND

dat2 <- str_split_fixed(data$WND, ",", 5) 
head(dat2)
##      [,1]  [,2] [,3] [,4]   [,5]
## [1,] "110" "1"  "N"  "0062" "1" 
## [2,] "070" "1"  "N"  "0041" "1" 
## [3,] "090" "1"  "N"  "0046" "1" 
## [4,] "090" "1"  "N"  "0041" "1" 
## [5,] "050" "1"  "N"  "0077" "1" 
## [6,] "090" "1"  "N"  "0067" "1"

Convertimos a valor numerico y factor las columnas leídas en WND

dat20 <- as.integer(dat2[,1])
dat21 <- as.factor(dat2[,2])
dat22 <- as.factor(dat2[,3])
dat23 <- as.integer(dat2[,4])
dat24 <- as.factor(dat2[,5])
dat_2 <-data.frame(dat20,dat21,dat22,dat23,dat24)

La velocidad al estar multiplicada por un factor de 10 se divide para obtenerla en [m/s]

dat_2[,4] = dat_2[,4]/10

Se añaden los nombres a las columnas

colnames(dat_2) <- c('ANGULAR_DEGREES','QUALITY_ANGLE',
                     'TYPE_ANGLE','SPEED[M/S]','QUALITY_SPEED')
dat <-data.frame(DATE00,dat_1,data[4],dat_2)
colnames(dat)[4]<-"REPORT_TYPE"

Datos Viento Mar de Plata - Argentina - Buenos Aires [216 - 2020]

head(dat)
##                DATE00       DATE     HOUR REPORT_TYPE ANGULAR_DEGREES
## 1 2016-01-01 00:00:00 2016-01-01 00:00:00       FM-12             110
## 2 2016-01-01 03:00:00 2016-01-01 03:00:00       FM-12              70
## 3 2016-01-01 06:00:00 2016-01-01 06:00:00       FM-12              90
## 4 2016-01-01 09:00:00 2016-01-01 09:00:00       FM-12              90
## 5 2016-01-01 12:00:00 2016-01-01 12:00:00       FM-12              50
## 6 2016-01-01 15:00:00 2016-01-01 15:00:00       FM-12              90
##   QUALITY_ANGLE TYPE_ANGLE SPEED.M.S. QUALITY_SPEED
## 1             1          N        6.2             1
## 2             1          N        4.1             1
## 3             1          N        4.6             1
## 4             1          N        4.1             1
## 5             1          N        7.7             1
## 6             1          N        6.7             1

1.2 Análisis preliminar de los datos de viento

1.2.1 Magnitudes de interés y unidades

REPORT_TYPE: Tipo de medidor utilizado (fijo o movil) Diferentes tipos de reporte, se obconsideraran solo los reportes fijos FM-12

table(dat$REPORT_TYPE)
## 
## FM-12 FM-15 FM-16 
## 25075 40101  2341

ANGULAR_DEGREES: Grados que hacen referencia a la dirección del viento medida

table(dat$ANGULAR_DEGREES)
## 
##   10   20   21   23   27   30   32   40   50   60   70   80   90  100  110  111 
##  274 3560    1    1    1  144    1  151 3182  271 3629  171 2242  125 2567    1 
##  114  116  120  130  140  150  160  161  170  180  181  190  192  200  201  210 
##    1    1  193  210 3073  175 2193    1  198 2707    1  292    1 4057    1  220 
##  211  220  230  239  240  241  250  252  260  270  274  280  290  300  310  320 
##    1  222 4040    1  268    1 3492    1  229 3260    1  139 2900  239  459 8249 
##  321  323  330  333  340  342  350  360  999 
##    4    1  414    1 4908    1  274 4850 3917

QUALITY_ANGLE: Calidad del ángulo medido, la calidad (1) hace referencia a una buena calidad, la calidad (9) hace referencia a calidad defectuosa

table(dat$QUALITY_ANGLE)
## 
##     1     9 
## 63600  3917

TYPE_ANGLE: Tipo del ángulo medido: -C: Calma -N: Normal -V: Variable -9: Defectuoso

table(dat$TYPE_ANGLE)
## 
##     9     C     N     V 
##     1  3607 58547  5362

SPEED.M.S.: Velocidad del viento, se puede observar como la precisión de muestreo es 0.5 unidades

table(dat$SPEED.M.S)
## 
##     0   0.5     1   1.5     2   2.1   2.6   3.1   3.6   4.1   4.6     5   5.1 
##  4770     5  1354  5417     1  5049  5629  5884  3698  6348  3743     1  6007 
##   5.7     6   6.2   6.7   7.2   7.7   8.2   8.7   8.8   9.3   9.8    10  10.3 
##  3480     2  4474  2024  2671  2112  1649   172   444   955   301     1   621 
##  10.8  11.3  11.8  12.3  12.4  12.9  13.4  13.9  14.4  14.9  15.4  16.5    17 
##   157   172    91    15    56    66    39     9     5     1    10     2     3 
##    18  20.6  23.7  25.7  27.8  29.3 999.9 
##     1     1     1     1     1     1    73

1.2.2 Frecuencia de Muestreo

#Filtramos y se obtendrán solo aquellos datos procedentes de la estación fija FM-12
dat = filter(dat, dat$REPORT_TYPE == "FM-12")
dat$Year <- as.factor(year(dat$DATE))
dat$Month <- as.factor(month(dat$DATE))

#Se generan nuevos data set separando los datos por años
dat_2016=dat[dat$Year == "2016",]
dat_2017=dat[dat$Year == "2017",]
dat_2018=dat[dat$Year == "2018",]
dat_2019=dat[dat$Year == "2019",]
dat_2020=dat[dat$Year == "2020",]

En los años 2016, 2017 y 2018 los datos se obtenían cada 3 horas, es 2019 se pretendió cambiar la frecuencia de muestreo a cada hora y en 2020 el muestreo por cada hora se consolidó

table(dat$Year)
## 
## 2016 2017 2018 2019 2020 
## 2888 2908 2872 7774 8633
table(dat_2016$HOUR)
## 
## 00:00:00 03:00:00 06:00:00 09:00:00 12:00:00 15:00:00 18:00:00 21:00:00 
##      358      362      357      361      364      360      365      361
table(dat_2017$HOUR)
## 
## 00:00:00 01:00:00 02:00:00 03:00:00 04:00:00 06:00:00 08:00:00 09:00:00 
##      358        1        1      359        1      360        1      362 
## 10:00:00 11:00:00 12:00:00 13:00:00 14:00:00 15:00:00 16:00:00 17:00:00 
##        1        1      363        1        1      364        1        1 
## 18:00:00 19:00:00 20:00:00 21:00:00 22:00:00 23:00:00 
##      363        1        1      365        1        1
table(dat_2018$HOUR)
## 
## 00:00:00 02:00:00 03:00:00 06:00:00 09:00:00 12:00:00 15:00:00 18:00:00 
##      357        1      354      358      358      363      361      360 
## 21:00:00 
##      360
table(dat_2019$HOUR)
## 
## 00:00:00 01:00:00 02:00:00 03:00:00 04:00:00 05:00:00 06:00:00 07:00:00 
##      364      308      311      364      297      287      360      296 
## 08:00:00 09:00:00 10:00:00 11:00:00 12:00:00 13:00:00 14:00:00 15:00:00 
##      298      358      308      309      363      310      311      363 
## 16:00:00 17:00:00 18:00:00 19:00:00 20:00:00 21:00:00 22:00:00 23:00:00 
##      306      306      363      308      311      362      310      301
table(dat_2020$HOUR)
## 
## 00:00:00 01:00:00 02:00:00 03:00:00 04:00:00 05:00:00 06:00:00 07:00:00 
##      364      357      359      364      359      359      363      356 
## 08:00:00 09:00:00 10:00:00 11:00:00 12:00:00 13:00:00 14:00:00 15:00:00 
##      360      362      361      359      365      354      357      361 
## 16:00:00 17:00:00 18:00:00 19:00:00 20:00:00 21:00:00 22:00:00 23:00:00 
##      356      359      361      359      361      361      360      356

Teniendo en cuenta la calidad del aire como 1, se calcula una funci_on que obtenga los datos válidos

data_valid_error<-function(dat_2016){
  data_Total = dim(dat_2016)[1]
  valid_data = dim(filter(dat_2016, dat_2016$QUALITY_SPEED == "1"))[1] 
  data_Error = data_Total - valid_data
  Final=c(data_Total,valid_data,data_Error)
  return(Final)
}

1.2.3 Calidad anual/mensual y Proporción de datos erróneos/válidos

Teniendo en cuenta la calidad del aire como 1, se calcula una funci_on que obtenga los datos válidos

data_valid_error<-function(dat_2016){
  data_Total = dim(dat_2016)[1]
  valid_data = dim(filter(dat_2016, dat_2016$QUALITY_SPEED == "1"))[1] 
  data_Error = data_Total - valid_data
  Final=c(data_Total,valid_data,data_Error)
  return(Final)
}
#Se aplica la función a los diferentes años
VE_2016 = data_valid_error(dat_2016)
VE_2017 = data_valid_error(dat_2017)
VE_2018 = data_valid_error(dat_2018)
VE_2019 = data_valid_error(dat_2019)
VE_2020 = data_valid_error(dat_2020)

#Datos Válidos
VE_data = data.frame(rbind(VE_2016,VE_2017,VE_2018,VE_2019,VE_2020))
colnames(VE_data) = c("Datos_Totales","Datos_Validos (Quality_SPEED==1)","Datos Eroneos")
rownames(VE_data)= c("2016","2017","2018","2019","2020")

Tabla de datos válidos cuando la calidad de la medida de la velocidad del aire es igual a 1

VE_data
##      Datos_Totales Datos_Validos (Quality_SPEED==1) Datos Eroneos
## 2016          2888                             2888             0
## 2017          2908                             2905             3
## 2018          2872                             2869             3
## 2019          7774                             7771             3
## 2020          8633                             8630             3

Considerando que la frencuancia de muestreo varía a lo largo de los años, se calcula el porcentaje de medidas obtenidas sobre las planteadas

Frec_Muestreo_INF = c("3 h","3 h","3 h","1 h","1 h") 
Frec_Muestreo = c(VE_data[1,1]/2920,VE_data[2,1]/2920,VE_data[3,1]/2920,
                 VE_data[4,1]/8760,VE_data[5,1]/8760)
Frec_Muestreo = Frec_Muestreo * 100
Frec_data = data.frame(cbind(Frec_Muestreo_INF,Frec_Muestreo ))
colnames(Frec_data) = c("Frecuencia Muestreo","Porcentaje sobre los programados")
rownames(Frec_data)= c("2016","2017","2018","2019","2020")
Frec_data
##      Frecuencia Muestreo Porcentaje sobre los programados
## 2016                 3 h                 98.9041095890411
## 2017                 3 h                 99.5890410958904
## 2018                 3 h                 98.3561643835616
## 2019                 1 h                 88.7442922374429
## 2020                 1 h                 98.5502283105023

Se puede observar como en el año 2017 se quiso cambiar a observar los valores horalmente, se estudiará la transición mensual dada en este mes.

dat_2017$horas_2017 = as.numeric(as.factor(dat_2017$HOUR))
dat_2017$horas_2017 = dat_2017$horas_2017 - 1
ggplot(data = dat_2017, aes(horas_2017)) +
  geom_histogram(binwidth=1) +
  stat_bin(binwidth=1, geom='text', color='black', aes(label=round((..count..)*100/365,1)),
           position=position_stack(vjust = 0.5), size = 5) + 
  labs(title = "2017 porcentaje de valores obtenidos") +
  theme_minimal()

table(dat_2017$HOUR)
## 
## 00:00:00 01:00:00 02:00:00 03:00:00 04:00:00 06:00:00 08:00:00 09:00:00 
##      358        1        1      359        1      360        1      362 
## 10:00:00 11:00:00 12:00:00 13:00:00 14:00:00 15:00:00 16:00:00 17:00:00 
##        1        1      363        1        1      364        1        1 
## 18:00:00 19:00:00 20:00:00 21:00:00 22:00:00 23:00:00 
##      363        1        1      365        1        1

Se observa como a las 00:00 existe un mayor porcentaje de fallo a la hora de recabar los datos, a su vez se observa como durante este año se empezaron a realizar pruebas para en 2018 recabar información cada hora

1.3 Análisis estadístico de los datos de viento

Limpiamos los datos y eliminamos aquellas velocidades que no tiene calidad

dat_valid = filter(dat, dat$QUALITY_SPEED == "1" & dat$SPEED.M.S. != 999.9)

dat_2016=dat_valid[dat_valid$Year == "2016",]
dat_2017=dat_valid[dat_valid$Year == "2017",]
dat_2018=dat_valid[dat_valid$Year == "2018",]
dat_2019=dat_valid[dat_valid$Year == "2019",]
dat_2020=dat_valid[dat_valid$Year == "2020",]
#Valores de la velocidad en 2016
ggplot(dat_2016, aes(x = DATE00, y = SPEED.M.S.), color="blue") + geom_line() +
  labs (title = "2016 Speed Values", x="Date", y="Speed [m/s]") + 
    labs(caption = "Mar de Plata (Buenos Aires)")

#Valores de la velocidad del viento desde 2016 hasta 2020
ggplot() + 
  geom_line(data = dat_2016, aes(x = DATE00, y = SPEED.M.S.), color="blue") +
  geom_line(data = dat_2017, aes(x = DATE00, y = SPEED.M.S.), color="red") +
  geom_line(data = dat_2018, aes(x = DATE00, y = SPEED.M.S.), color="purple") +
  geom_line(data = dat_2019, aes(x = DATE00, y = SPEED.M.S.), color="pink") +
  geom_line(data = dat_2020, aes(x = DATE00, y = SPEED.M.S.), color="red") + 
  labs(caption = "Mar de Plata (Buenos Aires)") +
  labs (title = "Speed Values 2016-2020", x="Date", y="Speed [m/s]")

1.3.1 Medias y varianzas

Para la velocidad calculamos para los diferentes años la cantidad de datos, la media, la varianza y la desviación típica.

stable <- desc_statby(data=dat_valid, measure.var = "SPEED.M.S.", grps="Year")
stable <- stable[, c("Year", "length", "mean", "sd","var")]
# Summary table plot, medium orange theme
stable.p <- ggtexttable(stable, rows = NULL) %>%
  tab_add_title(text = "Speed (m/s)", face = "bold", padding = unit(0.1, "line"))

stable.p 

Se puede observar en los siguientes gráficas como la varianza disminuye a medida que avanzan los años, esto puede ser debido a que en los últimos años se recopila mayor cantidad de datos.

pmean <- ggplot(data=stable) + 
  geom_line(aes(y = mean, x = c(2016,2017,2018,2019,2020))) + 
  labs(x="YEARS", title = "MEAN 2016 - 2017")

pvar <-  ggplot(data=stable) + 
  geom_line(aes(y = var, x = c(2016,2017,2018,2019,2020))) + 
  labs(x="YEARS", title = "VAR 2016 - 2017")

ggarrange(pmean,pvar)

1.3.2 Histogramas más significativos

pSpeed2016 <- ggplot(dat_2016, aes(x=SPEED.M.S.)) + geom_histogram() +
  labs(title = "2016 Histogram Speed") + 
  labs(caption = "Mar de Plata (Buenos Aires)")
pSpeed2017 <- ggplot(dat_2017, aes(x=SPEED.M.S.)) + geom_histogram() +
  labs(title = "2017 Histogram Speed") + 
  labs(caption = "Mar de Plata (Buenos Aires)")
pSpeed2018 <- ggplot(dat_2018, aes(x=SPEED.M.S.)) + geom_histogram() +
  labs(title = "2018 Histogram Speed") + 
  labs(caption = "Mar de Plata (Buenos Aires)")
pSpeed2019 <-ggplot(dat_2018, aes(x=SPEED.M.S.)) + geom_histogram() +
  labs(title = "2019 Histogram Speed") + 
  labs(caption = "Mar de Plata (Buenos Aires)")

ggarrange(pSpeed2016,pSpeed2017,pSpeed2018,pSpeed2019)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(data= dat_2020) + geom_histogram(aes(x=SPEED.M.S.),bins = 100)+ 
  labs(title = "2020 Histogram Speed") + 
  labs(caption = "Mar de Plata (Buenos Aires)")

Histogramas Superpuestos

ggplot(dat_valid, aes(x=SPEED.M.S., color=Year)) +
  geom_histogram(fill="white", alpha=0.5)+
  labs(title="Histograma 2016-2020 Superpuestos",x="Speed [m/s]", y = "Cantidad")+
  theme_minimal()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Histogramas Acoplados

ggplot(dat_valid, aes(x=SPEED.M.S., fill = Year)) +
  geom_histogram(position="dodge", bins = 50)+
  scale_fill_brewer(palette="Dark2") +
  labs(title="Histograma 2016-2020 Viento en Mar de Plata",x="Speed [m/s]", y = "Cantidad") +
  scale_x_continuous(breaks = round(seq(0, 20, by = 2),0.1)) +
  theme_minimal()

1.3.3 Rosas de los vientos más significativas

#Rosa de los vientos, quito vientos en calma#
dat_valid_Rosa = filter(dat, (dat$QUALITY_SPEED == "1") & (dat$SPEED.M.S. > 0))
#Rosa de los vientos, quito vientos en calma#
dat_valid_Rosa = filter(dat, (dat$QUALITY_SPEED == "1") & (dat$SPEED.M.S. > 0))

Gráficos Rosa de los Vientos

####Wind Rose###
p1 <- plot.windrose(data = dat_valid_Rosa, spd = dat_valid_Rosa$SPEED.M.S.,
                    dir = dat_valid_Rosa$ANGULAR_DEGREES, spdseq = c(0,3,6,12,20)) +
  labs(title = "Wind Rose", subtitle = "2016-2020") + 
  labs(caption = "Mar de Plata (Buenos Aires)")
## Wind Rose Printed

p1

p_month <- p1 + facet_wrap(~dat_valid_Rosa$Month,
                            ncol = 3) + theme(axis.text.x = element_blank(),
                                                 axis.title.x = element_blank()) + 
  labs(title = "Wind Rose Cada mes", subtitle = "2016-2020") + 
  labs(caption = "Mar de Plata (Buenos Aires)")

p_month

p_year <- p1 + facet_wrap(~dat_valid_Rosa$Year,
                           ncol = 3) + theme(axis.text.x = element_blank(),
                                             axis.title.x = element_blank()) + 
  labs(title = "Wind Rose Cada año", subtitle = "2016-2020") + 
  labs(caption = "Mar de Plata (Buenos Aires)") 
p_year

1.3.4 Ajuste a una distribución de Weibull

#frecuencia acomulada#
 ggplot(dat_valid, aes(SPEED.M.S., colour=Year)) + geom_step(stat = "ecdf") +
  labs(colour = "Year") + xlab("Speed (m/s)") + ylab("Proporcion de casos") +
  ggtitle("Velocidad, frecuencia acomulada") + 
  facet_grid(Year~.) +
  theme_bw()

Comparamos como se ajustan la distribución log-normal, inverse-normal y la de weibull al istograma de velocidades

ggplot(data = dat_valid_Rosa) +
  geom_histogram(aes(x = SPEED.M.S., y =  after_stat(density)),
                 bins = 30,
                 alpha = 0.3, color = "black") +
  geom_rug(aes(x = SPEED.M.S.)) +
  stat_function(fun = function(.x){dml(x = .x, obj = mllnorm(dat_valid_Rosa$SPEED.M.S.))},
                aes(color = "log-normal"),
                size = 1) +
  stat_function(fun = function(.x){dml(x = .x, obj = mlinvgauss(dat_valid_Rosa$SPEED.M.S.))},
                aes(color = "inverse-normal"),
                size = 1) +
  stat_function(fun = function(.x){dml(x = .x, obj = mlweibull(dat_valid_Rosa$SPEED.M.S.))},
                aes(color = "weibull"),
                size = 1) +
  scale_color_manual(breaks = c("log-normal", "inverse-normal","weibull"),
                     values = c("log-normal" = "red", "inverse-normal" = "blue", "weibull"="green")) +
  labs(title = "Distribucion velocidad [m/s]",
       color = "Distribucion") +
  labs(caption = "Mar de Plata (Buenos Aires)")+
  theme_bw() +
  theme(legend.position = "bottom")

Frecuencia acomulada de las diferentes distribuciones, en negro son los datos de la velocidad obtenida en Mar de Plata entre los años 2016 y 2020, se muestran escalonados por el hecho de la tolerancia de medida

ggplot(data = dat_valid_Rosa) +
  stat_ecdf(aes(x = SPEED.M.S.), geom = "step", color = "black", size = 1) +
  geom_rug(aes(x = SPEED.M.S.)) +
  stat_function(fun = function(.x){pml(q = .x, obj = mllnorm(dat_valid_Rosa$SPEED.M.S.))},
                aes(color = "log-normal"),
                size = 1) +
  stat_function(fun = function(.x){pml(q = .x, obj = mlinvgauss(dat_valid_Rosa$SPEED.M.S.))},
                aes(color = "inverse-normal"),
                size = 1) +
  stat_function(fun = function(.x){pml(q = .x, obj = mlweibull(dat_valid_Rosa$SPEED.M.S.))},
                aes(color = "weibull"),
                size = 1) +
  scale_color_manual(breaks = c("log-normal", "inverse-normal","weibull"),
                     values = c("log-normal" = "red", "inverse-normal" = "blue", "weibull"="green")) +
  labs(title = "Distribucion velocidad (m/s)",
       color = "Distribucion",
       y = "CDF") +
  labs(caption = "Mar de Plata (Buenos Aires)")+
  theme_bw() +
  theme(legend.position = "bottom")

¿Cómo de bien ajustan las diferentes distribuciones?

Existen multiples métricas que permiten cuantificar cómo de bien se ajusta una distribucion a los datos observados. Dos de las más empleadas son AIC (Criterio de informacion de Akaike) y BIC (Bayesian information criterion) también conocida como SBC. Ambas tienen en cuenta el log-likelihood y añaden una penalización proporcional el numero de parámetros de la distribucion (grados de libertad). Esto último hace posible comparar el ajuste entre distribuciones con diferente numero de parámetros, ya que, en terminos generales, cuantos más parámetros tenga una distribución, con más facilidad se ajusta a los datos y menor es su log likelihood.

1.3.4.1 Bondad de ajuste

#Global deviance

#Comparar distintos modelos (ajustes) empleando las metricas AIC y BIC.#
#Comparacion distintas distribuciones, cuanto menor sea el valor menor será la penalizació#
comparacion_bic <- BIC(
  mllnorm(dat_valid_Rosa$SPEED.M.S.),
  mlinvgauss(dat_valid_Rosa$SPEED.M.S.),
  mlweibull(dat_valid_Rosa$SPEED.M.S.)
)
comparacion_bic %>% rownames_to_column(var = "distribucion") %>% arrange(BIC)
##                            distribucion df      BIC
## 1  mlweibull(dat_valid_Rosa$SPEED.M.S.)  2 101177.3
## 2    mllnorm(dat_valid_Rosa$SPEED.M.S.)  2 101665.3
## 3 mlinvgauss(dat_valid_Rosa$SPEED.M.S.)  2 101727.2
#Cuanto mas pequeño mayor bondad de ajuste#

comparacion_aic <- AIC(
  mllnorm(dat_valid_Rosa$SPEED.M.S.),
  mlinvgauss(dat_valid_Rosa$SPEED.M.S.),
  mlweibull(dat_valid_Rosa$SPEED.M.S.)
)
comparacion_aic %>% rownames_to_column(var = "distribucion") %>% arrange(AIC)
##                            distribucion df      AIC
## 1  mlweibull(dat_valid_Rosa$SPEED.M.S.)  2 101161.2
## 2    mllnorm(dat_valid_Rosa$SPEED.M.S.)  2 101649.2
## 3 mlinvgauss(dat_valid_Rosa$SPEED.M.S.)  2 101711.1
#Descripcion de la distribución#
descdist(data = dat_valid_Rosa$SPEED.M.S.)

## summary statistics
## ------
## min:  1   max:  27.8 
## median:  4.1 
## mean:  4.492973 
## estimated sd:  2.261194 
## estimated skewness:  0.7599392 
## estimated kurtosis:  3.854234

1.3.4.2 Ajuste final a la distribució de Weibull

#Ajuste de la distribucion de Weibull# 
distribucion <- mlweibull(x = dat_valid_Rosa$SPEED.M.S.)
summary(distribucion)
## 
## Maximum likelihood for the Weibull model 
##  
## Call:  mlweibull(x = dat_valid_Rosa$SPEED.M.S.) 
## 
## Estimates: 
##    shape     scale  
## 2.114913  5.088525  
## 
## Data:            dat_valid_Rosa$SPEED.M.S. (23310 obs.)
## Support:         (0, Inf)
## Density:         stats::dweibull
## Log-likelihood:  -50578.6
distribucion <- fitdist(dat_valid_Rosa$SPEED.M.S., distr = "weibull")
summary(distribucion)
## Fitting of the distribution ' weibull ' by maximum likelihood 
## Parameters : 
##       estimate Std. Error
## shape 2.114858 0.01057780
## scale 5.088133 0.01664785
## Loglikelihood:  -50578.6   AIC:  101161.2   BIC:  101177.3 
## Correlation matrix:
##           shape     scale
## shape 1.0000000 0.3228378
## scale 0.3228378 1.0000000
plot(distribucion)

2 Solar

2.1 Leer datos Mar de Plata - Buenos Aires - Argentina

Se leen los datos de iradiació solar en Mar de Plata

dat_sol <- read_excel("Solar_MarDePlata.xlsx")
dat_sol$DATE = paste( dat_sol$DY, dat_sol$MO, dat_sol$YEAR)
dat_sol$DATE = as.Date( dat_sol$DATE, format =  "%d %m %Y")
dat_sol$ALLSKY_SFC_SW_DWN = as.numeric(dat_sol$ALLSKY_SFC_SW_DWN)
dat_sol$CLRSKY_SFC_SW_DWN = as.numeric(dat_sol$CLRSKY_SFC_SW_DWN)
dat_sol$YEAR = as.factor(dat_sol$YEAR)
dat_sol$MO = as.factor(dat_sol$MO)
dat_sol$DayOfYear = as.numeric( format(dat_sol$DATE, '%j'))

#Eliminamos el 29/2 de los datos
dat_sol = dat_sol[-c(60,1490), ] 
mymonths <- c("Jan","Feb","Mar",
              "Apr","May","Jun",
              "Jul","Aug","Sep",
              "Oct","Nov","Dec")

dat_sol$MO = factor(dat_sol$MO, labels = mymonths)

Se añaden en el set de datos las estaciones que se dan justo en Mar de Plata - Buenos Aires - Argentina

#Adding Seasons
dat_sol$SEASON = "Value"
for(i in 1:dim(dat_sol)[1]){
  if(dat_sol[i,]$MO == "Jan"){dat_sol[i,]$SEASON = "Summer"
  }
  if(dat_sol[i,]$MO == "Feb"){dat_sol[i,]$SEASON = "Summer"
  }
  if(dat_sol[i,]$MO == "Mar" & dat_sol[i,]$DY <= 20 ){dat_sol[i,]$SEASON = "Summer"
  }
  if(dat_sol[i,]$MO == "Mar" & dat_sol[i,]$DY > 20 ){dat_sol[i,]$SEASON = "Autumn"
  }
  if(dat_sol[i,]$MO == "Apr"){dat_sol[i,]$SEASON = "Autumn"
  }
  if(dat_sol[i,]$MO == "May"){dat_sol[i,]$SEASON = "Autumn"
  }
  if(dat_sol[i,]$MO == "Jun" & dat_sol[i,]$DY <= 21 ){dat_sol[i,]$SEASON = "Autumn"
  }
  if(dat_sol[i,]$MO == "Jun" & dat_sol[i,]$DY > 21  ){dat_sol[i,]$SEASON = "Winter"
  }
  if(dat_sol[i,]$MO == "Jul"){dat_sol[i,]$SEASON = "Winter"
  }
  if(dat_sol[i,]$MO == "Aug"){dat_sol[i,]$SEASON = "Winter"
  }
  if(dat_sol[i,]$MO == "Sep" & dat_sol[i,]$DY <= 22 ){dat_sol[i,]$SEASON = "Winter"
  }
  if(dat_sol[i,]$MO == "Sep" & dat_sol[i,]$DY > 22  ){dat_sol[i,]$SEASON = "Spring"
  }
  if(dat_sol[i,]$MO == "Oct"){dat_sol[i,]$SEASON = "Spring"
  }
  if(dat_sol[i,]$MO == "Nov"){dat_sol[i,]$SEASON = "Spring"
  }
  if(dat_sol[i,]$MO == "Dec" & dat_sol[i,]$DY <= 21 ){dat_sol[i,]$SEASON = "Spring"
  }
  if(dat_sol[i,]$MO == "Dec" & dat_sol[i,]$DY > 21  ){dat_sol[i,]$SEASON = "Summer"
  }
}
table(dat_sol$SEASON)
## 
## Autumn Spring Summer Winter 
##    465    450    445    465
#Se convierten en factor las estaciones
dat_sol$SEASON = as.factor(dat_sol$SEASON)

#Se divide el data set en los diferentes años
dat_sol_2016 = dat_sol[dat_sol$YEAR == "2016",]
dat_sol_2017 = dat_sol[dat_sol$YEAR == "2017",] 
dat_sol_2018 = dat_sol[dat_sol$YEAR == "2018",]
dat_sol_2019 = dat_sol[dat_sol$YEAR == "2019",]
dat_sol_2020 = dat_sol[dat_sol$YEAR == "2020",]

Datos Irradiación solar Mar de Plata - Argentina - Buenos Aires [216 - 2020]

head(dat_sol)
## # A tibble: 6 x 8
##   YEAR  MO       DY ALLSKY_SFC_SW_DWN CLRSKY_SFC_SW_DWN DATE       DayOfYear
##   <fct> <fct> <dbl>             <dbl>             <dbl> <date>         <dbl>
## 1 2016  Jan       1              6.3               8.82 2016-01-01         1
## 2 2016  Jan       2              4.63              8.64 2016-01-02         2
## 3 2016  Jan       3              6.4               8.57 2016-01-03         3
## 4 2016  Jan       4              5.54              8.23 2016-01-04         4
## 5 2016  Jan       5              6.99              9.08 2016-01-05         5
## 6 2016  Jan       6              8.28              9.56 2016-01-06         6
## # ... with 1 more variable: SEASON <fct>

2.2 Análisis preliminar de los datos de irradiación

2.2.1 Magnitudes de interés y unidades

head(dat_sol)
## # A tibble: 6 x 8
##   YEAR  MO       DY ALLSKY_SFC_SW_DWN CLRSKY_SFC_SW_DWN DATE       DayOfYear
##   <fct> <fct> <dbl>             <dbl>             <dbl> <date>         <dbl>
## 1 2016  Jan       1              6.3               8.82 2016-01-01         1
## 2 2016  Jan       2              4.63              8.64 2016-01-02         2
## 3 2016  Jan       3              6.4               8.57 2016-01-03         3
## 4 2016  Jan       4              5.54              8.23 2016-01-04         4
## 5 2016  Jan       5              6.99              9.08 2016-01-05         5
## 6 2016  Jan       6              8.28              9.56 2016-01-06         6
## # ... with 1 more variable: SEASON <fct>

NASA/POWER CERES/MERRA2 Native Resolution Daily Data

Elevation from MERRA-2: Average for 0.5 x 0.625 degree lat/lon region = 23.45 meters

ALLSKY_SFC_SW_DWN CERES SYN1deg All Sky Surface Shortwave Downward Irradiance (kW-hr/m^2/day)

CLRSKY_SFC_SW_DWN CERES SYN1deg Clear Sky Surface Shortwave Downward Irradiance (kW-hr/m^2/day)

YE: Año

MO: Mes

DY: Día

DATE: Fecha

DayOfYear: Día del año

SEASON: Estación del año

2.2.2 Frecuencia de muestreo

La frecuencia de muestreo de los datos es diaria, se han anulado los valores de los meses bisiestos

table(dat_sol$YEAR)
## 
## 2016 2017 2018 2019 2020 
##  365  365  365  365  365

2.2.3 Calidad anual/mensual y proporción de datos erróneos/válidos

Distribució histograma de ALLSKY_SFC_SW_DWN y CLRSKY_SFC_SW_DWN

p1_sol <- ggplot(data = dat_sol) + 
  geom_histogram(aes(x=ALLSKY_SFC_SW_DWN), fill = "lightblue")

p2_sol <- ggplot(data = dat_sol) + 
  geom_histogram(aes(x=CLRSKY_SFC_SW_DWN), fill = "lightgreen")

ggarrange(p1_sol,p2_sol)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Se obtienen cada año los datos medidos deseados

v = c(
length(dat_sol_2016$ALLSKY_SFC_SW_DWN),
length(dat_sol_2017$ALLSKY_SFC_SW_DWN),
length(dat_sol_2018$ALLSKY_SFC_SW_DWN),
length(dat_sol_2019$ALLSKY_SFC_SW_DWN),
length(dat_sol_2020$ALLSKY_SFC_SW_DWN))

v1 = c(
length(dat_sol_2016$CLRSKY_SFC_SW_DWN),
length(dat_sol_2016$CLRSKY_SFC_SW_DWN),
length(dat_sol_2016$CLRSKY_SFC_SW_DWN),
length(dat_sol_2016$CLRSKY_SFC_SW_DWN),
length(dat_sol_2016$CLRSKY_SFC_SW_DWN))


validos_sol = data.frame(cbind(v,v1 ))
colnames(validos_sol) = c("ALLSKY_SFC_SW_DWN","CLRSKY_SFC_SW_DWN")
rownames(validos_sol)= c("2016","2017","2018","2019","2020")
validos_sol
##      ALLSKY_SFC_SW_DWN CLRSKY_SFC_SW_DWN
## 2016               365               365
## 2017               365               365
## 2018               365               365
## 2019               365               365
## 2020               365               365

2.3 Discusión de los datos de irradiación

2.3.1 Gráfica irradiació acomulada ALLSKY_SFC_SW_DW por día en todos los años

#Todos los años#
ggplot(dat_sol, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) +
geom_point(aes(color = YEAR), alpha = 0.3) +
labs(x = "Year", y = "ALLSKY_SFC_SW_DW") + 
theme(legend.position="bottom") +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2.3.2 Máximimos y mínimos (interanual)

En las diferentes estaciones del año podemos ver como se distribuyen los m_aximos y los mínimos.

ggplot(dat_sol, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) + 
  geom_point(aes(color = SEASON), size = 1, alpha = 0.7) +
  facet_grid(SEASON~YEAR, scales = 'free') +
  xlab('Años') + 
  ylab('Estaciones') +
  ggtitle('ALLSKY_SFC_SW_DW') + 
  theme_minimal() + 
  theme(axis.text.x=element_blank(),
        axis.ticks.x=element_blank())

Los valores máx se dan en el transcurso de primavera a verano, mientras que los valores mín. Esto es justamente debido a que la transició de las estaciones coincide con los diferentes solsticios.

ggplot(dat_sol, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) +
geom_point(aes(color = SEASON), alpha = 0.3) +
labs(x = "Year", y = "ALLSKY_SFC_SW_DW") + 
theme(legend.position="bottom") +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

2.3.2.1 Máx por año

m = c(
max(dat_sol_2016$ALLSKY_SFC_SW_DWN),
max(dat_sol_2017$ALLSKY_SFC_SW_DWN),
max(dat_sol_2018$ALLSKY_SFC_SW_DWN),
max(dat_sol_2019$ALLSKY_SFC_SW_DWN),
max(dat_sol_2020$ALLSKY_SFC_SW_DWN))

m1 = c(
max(dat_sol_2016$CLRSKY_SFC_SW_DWN),
max(dat_sol_2016$CLRSKY_SFC_SW_DWN),
max(dat_sol_2016$CLRSKY_SFC_SW_DWN),
max(dat_sol_2016$CLRSKY_SFC_SW_DWN),
max(dat_sol_2016$CLRSKY_SFC_SW_DWN))


max_sol = data.frame(cbind(m,m1 ))
colnames(max_sol) = c("MAX ALLSKY_SFC_SW_DWN"," MAX CLRSKY_SFC_SW_DWN")
rownames(max_sol)= c("2016","2017","2018","2019","2020")
max_sol
##      MAX ALLSKY_SFC_SW_DWN  MAX CLRSKY_SFC_SW_DWN
## 2016                  9.26                   9.56
## 2017                  9.21                   9.56
## 2018                  9.70                   9.56
## 2019                  9.55                   9.56
## 2020                  9.43                   9.56

2.3.2.2 Mínimo por año

mi = c(
min(dat_sol_2016$ALLSKY_SFC_SW_DWN),
min(dat_sol_2017$ALLSKY_SFC_SW_DWN),
min(dat_sol_2018$ALLSKY_SFC_SW_DWN),
min(dat_sol_2019$ALLSKY_SFC_SW_DWN),
min(dat_sol_2020$ALLSKY_SFC_SW_DWN))

mi1 = c(
min(dat_sol_2016$CLRSKY_SFC_SW_DWN),
min(dat_sol_2016$CLRSKY_SFC_SW_DWN),
min(dat_sol_2016$CLRSKY_SFC_SW_DWN),
min(dat_sol_2016$CLRSKY_SFC_SW_DWN),
min(dat_sol_2016$CLRSKY_SFC_SW_DWN))


min_sol = data.frame(cbind(mi,mi1 ))
colnames(min_sol) = c("MIN ALLSKY_SFC_SW_DWN"," MIN CLRSKY_SFC_SW_DWN")
rownames(min_sol)= c("2016","2017","2018","2019","2020")
min_sol
##      MIN ALLSKY_SFC_SW_DWN  MIN CLRSKY_SFC_SW_DWN
## 2016                  0.53                   2.17
## 2017                  0.29                   2.17
## 2018                  0.25                   2.17
## 2019                  0.38                   2.17
## 2020                  0.48                   2.17

2.3.3 Irradiación anual promediada

En funció de los diferentes meses se puede ver como existe una evolución en la irradiació anual promediada

2.3.3.1 ALLSKY

#2016/2017/2018/2019#
p2016_col <- ggplot(dat_sol_2016, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('ALLSKY_SFC_SW_DWN') +
                ggtitle('2016') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())
p2017_col <- ggplot(dat_sol_2017, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('ALLSKY_SFC_SW_DWN') +
                ggtitle('2017') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())
p2018_col <- ggplot(dat_sol_2018, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('ALLSKY_SFC_SW_DWN') +
                ggtitle('2018') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())
p2019_col <- ggplot(dat_sol_2019, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('ALLSKY_SFC_SW_DWN') +
                ggtitle('2019') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())

ggarrange(p2016_col, p2017_col,p2018_col,p2019_col + rremove("x.text"),
          ncol = 2, nrow = 2, common.legend = TRUE, legend = "bottom")

#Año 2020#
ggplot(dat_sol_2020, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) + 
  geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
  geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
  xlab('Años') + 
  ylab('ALLSKY_SFC_SW_DWN') +
  ggtitle('2020') + 
  theme_minimal() + 
  theme(axis.text.x=element_blank(),
        axis.ticks.x=element_blank())

#All the years in one graph#
ggplot(dat_sol, aes(DayOfYear, ALLSKY_SFC_SW_DWN)) + 
  geom_point( aes(shape = YEAR , colour = YEAR))

ggplot(dat_sol, aes(DayOfYear, ALLSKY_SFC_SW_DWN)) +
  geom_line(aes(colour = YEAR))  +
  facet_grid(YEAR ~ .)

#Mean Value between all years#
mean_ALLSKY_SFC_SW_DWN = c(1:365)
sum = 0
for(i in c(1:365))
  {
    sum = dat_sol_2016$ALLSKY_SFC_SW_DWN[i] + 
    dat_sol_2017$ALLSKY_SFC_SW_DWN[i] + 
    dat_sol_2018$ALLSKY_SFC_SW_DWN[i] + 
    dat_sol_2019$ALLSKY_SFC_SW_DWN[i] +
    dat_sol_2020$ALLSKY_SFC_SW_DWN[i]
    mean_ALLSKY_SFC_SW_DWN[i] = sum/5
    sum = 0
}

#Mean#
ggplot() + 
  geom_line(data = data.frame(mean_ALLSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_ALLSKY_SFC_SW_DWN, colour = "Media"))+
  labs(title = "Media de los años 2016/2020", x = "DayOfYear")

#All th years with the mean#
ggplot(dat_sol, aes(DayOfYear, ALLSKY_SFC_SW_DWN)) + 
  geom_line( aes(colour = YEAR) )  + 
  geom_line(data = data.frame(mean_ALLSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_ALLSKY_SFC_SW_DWN, colour = "Media"),
            colour = "Black") + 
  labs(title = "Media de los años 2016/2020", x = "DayOfYear")

#Mean vs 2020 (mo)#
ggplot() + 
  geom_line(data = dat_sol_2020, aes(DayOfYear, ALLSKY_SFC_SW_DWN, colour = MO))  + 
  geom_line(data = data.frame(mean_ALLSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_ALLSKY_SFC_SW_DWN, colour = "Media"), size = 1.1 , colour = "Black")+
  labs(title = "Media (black) vs 2020", x = "DayOfYear")

#Mean vs 2020 (SEASON)#
ggplot() + 
  geom_jitter(data = dat_sol_2020, aes(DayOfYear, ALLSKY_SFC_SW_DWN, colour = SEASON))  + 
  geom_line(data = data.frame(mean_ALLSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_ALLSKY_SFC_SW_DWN, colour = "Media"), size = 1.1 , colour = "Black")+
  labs(title = "Media (black) vs 2020", x = "DayOfYear")

2.3.3.2 CLRSKY

#2016/2017/2018/2019#
p2016_col <- ggplot(dat_sol_2016, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('CLRSKY_SFC_SW_DWN') +
                ggtitle('2016') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())
p2017_col <- ggplot(dat_sol_2017, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('CLRSKY_SFC_SW_DWN') +
                ggtitle('2017') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())
p2018_col <- ggplot(dat_sol_2018, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('CLRSKY_SFC_SW_DWN') +
                ggtitle('2018') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())
p2019_col <- ggplot(dat_sol_2019, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) + 
                geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
                geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
                xlab('Años') + 
                ylab('CLRSKY_SFC_SW_DWN') +
                ggtitle('2019') + 
                theme_minimal() + 
                theme(axis.text.x=element_blank(),
                      axis.ticks.x=element_blank())

ggarrange(p2016_col, p2017_col,p2018_col,p2019_col + rremove("x.text"),
          ncol = 2, nrow = 2, common.legend = TRUE, legend = "bottom")

#Año 2020#
ggplot(dat_sol_2020, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) + 
  geom_violin(aes(color = MO), size = 1, alpha = 0.9) +
  geom_jitter(aes(colour =MO), size = 1, alpha = 0.5) +
  xlab('Años') + 
  ylab('CLRSKY_SFC_SW_DWN') +
  ggtitle('2020') + 
  theme_minimal() + 
  theme(axis.text.x=element_blank(),
        axis.ticks.x=element_blank())

#All the years in one graph#
ggplot(dat_sol, aes(DayOfYear, CLRSKY_SFC_SW_DWN)) + 
  geom_point( aes(shape = YEAR , colour = YEAR))

ggplot(dat_sol, aes(DayOfYear, CLRSKY_SFC_SW_DWN)) +
  geom_line(aes(colour = YEAR))  +
  facet_grid(YEAR ~ .)

#Mean Value between all years#
mean_CLRSKY_SFC_SW_DWN = c(1:365)
sum = 0
for(i in c(1:365))
  {
    sum = dat_sol_2016$CLRSKY_SFC_SW_DWN[i] + 
    dat_sol_2017$CLRSKY_SFC_SW_DWN[i] + 
    dat_sol_2018$CLRSKY_SFC_SW_DWN[i] + 
    dat_sol_2019$CLRSKY_SFC_SW_DWN[i] +
    dat_sol_2020$CLRSKY_SFC_SW_DWN[i]
    mean_CLRSKY_SFC_SW_DWN[i] = sum/5
    sum = 0
}

#Mean#
ggplot() + 
  geom_line(data = data.frame(mean_CLRSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_CLRSKY_SFC_SW_DWN, colour = "Media"))+
  labs(title = "Media de los años 2016/2020", x = "DayOfYear")

#All th years with the mean#
ggplot(dat_sol, aes(DayOfYear, CLRSKY_SFC_SW_DWN)) + 
  geom_line( aes(colour = YEAR) )  + 
  geom_line(data = data.frame(mean_CLRSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_CLRSKY_SFC_SW_DWN, colour = "Media"),
            colour = "Black") + 
  labs(title = "Media de los años 2016/2020", x = "DayOfYear")

#Mean vs 2020 (mo)#
ggplot() + 
  geom_line(data = dat_sol_2020, aes(DayOfYear, CLRSKY_SFC_SW_DWN, colour = MO))  + 
  geom_line(data = data.frame(mean_CLRSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_CLRSKY_SFC_SW_DWN, colour = "Media"), size = 1.1 , colour = "Black")+
  labs(title = "Media (black) vs 2020", x = "DayOfYear")

#Mean vs 2020 (SEASON)#
ggplot() + 
  geom_jitter(data = dat_sol_2020, aes(DayOfYear, CLRSKY_SFC_SW_DWN, colour = SEASON))  + 
  geom_line(data = data.frame(mean_CLRSKY_SFC_SW_DWN), 
            aes(x = c(1:365), y = mean_CLRSKY_SFC_SW_DWN, colour = "Media"), size = 1.1 , colour = "Black")+
  labs(title = "Media (black) vs 2020", x = "DayOfYear")

2.3.4 Irradiación anual en panel inclinado Smodule

dat_sol$delta_rad = c (1:dim(dat_sol)[1])
dat_sol$alpha = c (1:dim(dat_sol)[1])
dat_sol$sinc = c (1:dim(dat_sol)[1])
dat_sol$smod = c (1:dim(dat_sol)[1])

#Se define la latitud
latitud_mar_plata = 38


#SMOD and SINC 2016#
ang_def = 60 
ang_def = ang_def * pi/180 
for(i in c(1:dim(dat_sol)[1])){
  dat_sol$delta_rad[i] = 
    23.45 * pi *  sin(2 * pi *
                        (284 + dat_sol$DayOfYear[i])/365)/180
  
  dat_sol$alpha[i] = 0.5 * pi - latitud_mar_plata * pi/180 + dat_sol$delta_rad[i]
  dat_sol$sinc[i] = dat_sol$CLRSKY_SFC_SW_DWN[i] / sin(dat_sol$alpha[i])
  dat_sol$smod[i] = dat_sol$sinc[i] * sin(dat_sol$alpha[i]+ ang_def)
}


p60 <- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) + 
  geom_line(aes(DayOfYear, sinc, color = "SINC"))  + 
  geom_line(aes(DayOfYear, smod, color = "SMOD"))  +
  labs(title = "60 grados", x = "DayOfYear") +
  labs(color='SINC and SMOD 2016')

2.3.5 Adecuación a una aplicación solar

ang_def = 18 
ang_def = ang_def * pi/180 
for(i in c(1:dim(dat_sol)[1])){
  dat_sol$delta_rad[i] = 
    23.45 * pi *  sin(2 * pi *
                        (284 + dat_sol$DayOfYear[i])/365)/180
  
  dat_sol$alpha[i] = 0.5 * pi - latitud_mar_plata * pi/180 + dat_sol$delta_rad[i]
  dat_sol$sinc[i] = dat_sol$CLRSKY_SFC_SW_DWN[i] / sin(dat_sol$alpha[i])
  dat_sol$smod[i] = dat_sol$sinc[i] * sin(dat_sol$alpha[i]+ ang_def)
}

p18 <- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) + 
  geom_line(aes(DayOfYear, sinc, color = "SINC"))  + 
  geom_line(aes(DayOfYear, smod, color = "SMOD"))  +
  labs(title = "18 grados", x = "DayOfYear") +
  labs(color='SINC and SMOD 2016')

ang_def = 45 
ang_def = ang_def * pi/180 
for(i in c(1:dim(dat_sol)[1])){
  dat_sol$delta_rad[i] = 
    23.45 * pi *  sin(2 * pi *
                        (284 + dat_sol$DayOfYear[i])/365)/180
  
  dat_sol$alpha[i] = 0.5 * pi - latitud_mar_plata * pi/180 + dat_sol$delta_rad[i]
  dat_sol$sinc[i] = dat_sol$CLRSKY_SFC_SW_DWN[i] / sin(dat_sol$alpha[i])
  dat_sol$smod[i] = dat_sol$sinc[i] * sin(dat_sol$alpha[i]+ ang_def)
}

p45 <- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) + 
  geom_line(aes(DayOfYear, sinc, color = "SINC"))  + 
  geom_line(aes(DayOfYear, smod, color = "SMOD"))  +
  labs(title = "45 grados", x = "DayOfYear") +
  labs(color='SINC and SMOD 2016')


ang_def = 85 
ang_def = ang_def * pi/180 
for(i in c(1:dim(dat_sol)[1])){
  dat_sol$delta_rad[i] = 
    23.45 * pi *  sin(2 * pi *
                        (284 + dat_sol$DayOfYear[i])/365)/180
  
  dat_sol$alpha[i] = 0.5 * pi - latitud_mar_plata * pi/180 + dat_sol$delta_rad[i]
  dat_sol$sinc[i] = dat_sol$CLRSKY_SFC_SW_DWN[i] / sin(dat_sol$alpha[i])
  dat_sol$smod[i] = dat_sol$sinc[i] * sin(dat_sol$alpha[i]+ ang_def)
}

p85 <- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) + 
  geom_line(aes(DayOfYear, sinc, color = "SINC"))  + 
  geom_line(aes(DayOfYear, smod, color = "SMOD"))  +
  labs(title = "85 grados", x = "DayOfYear") +
  labs(color='SINC and SMOD 2016')

ggarrange(p60, p18, p45, p85,
          ncol = 2, nrow = 2, common.legend = TRUE, legend = "bottom")

El ángulo de inclinación se deberá ir variando a lo largo de las estaciones para aprovechar la inclinación de los rayos solares según la estación de cada año