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")
<- read_excel("2821473_Mar_De_Plata_new.xlsx")
data#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
<- str_split_fixed(data$DATE, "T", 2)
dat_1 colnames(dat_1) <- c('DATE','HOUR')
<- paste(dat_1[,1],dat_1[,2], sep= " ")
DATE00 <- as.POSIXct(DATE00, format="%Y-%m-%d %H:%M:%S",tz="UTC") DATE00
Separamos los valores de la columna WND
<- str_split_fixed(data$WND, ",", 5)
dat2 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
<- as.integer(dat2[,1])
dat20 <- as.factor(dat2[,2])
dat21 <- as.factor(dat2[,3])
dat22 <- as.integer(dat2[,4])
dat23 <- as.factor(dat2[,5])
dat24 <-data.frame(dat20,dat21,dat22,dat23,dat24) dat_2
La velocidad al estar multiplicada por un factor de 10 se divide para obtenerla en [m/s]
4] = dat_2[,4]/10 dat_2[,
Se añaden los nombres a las columnas
colnames(dat_2) <- c('ANGULAR_DEGREES','QUALITY_ANGLE',
'TYPE_ANGLE','SPEED[M/S]','QUALITY_SPEED')
<-data.frame(DATE00,dat_1,data[4],dat_2)
dat 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
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
#Filtramos y se obtendrán solo aquellos datos procedentes de la estación fija FM-12
= filter(dat, dat$REPORT_TYPE == "FM-12")
dat $Year <- as.factor(year(dat$DATE))
dat$Month <- as.factor(month(dat$DATE))
dat
#Se generan nuevos data set separando los datos por años
=dat[dat$Year == "2016",]
dat_2016=dat[dat$Year == "2017",]
dat_2017=dat[dat$Year == "2018",]
dat_2018=dat[dat$Year == "2019",]
dat_2019=dat[dat$Year == "2020",] dat_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
<-function(dat_2016){
data_valid_error= dim(dat_2016)[1]
data_Total = dim(filter(dat_2016, dat_2016$QUALITY_SPEED == "1"))[1]
valid_data = data_Total - valid_data
data_Error =c(data_Total,valid_data,data_Error)
Finalreturn(Final)
}
Teniendo en cuenta la calidad del aire como 1, se calcula una funci_on que obtenga los datos válidos
<-function(dat_2016){
data_valid_error= dim(dat_2016)[1]
data_Total = dim(filter(dat_2016, dat_2016$QUALITY_SPEED == "1"))[1]
valid_data = data_Total - valid_data
data_Error =c(data_Total,valid_data,data_Error)
Finalreturn(Final)
}
#Se aplica la función a los diferentes años
= data_valid_error(dat_2016)
VE_2016 = data_valid_error(dat_2017)
VE_2017 = data_valid_error(dat_2018)
VE_2018 = data_valid_error(dat_2019)
VE_2019 = data_valid_error(dat_2020)
VE_2020
#Datos Válidos
= data.frame(rbind(VE_2016,VE_2017,VE_2018,VE_2019,VE_2020))
VE_data 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
= c("3 h","3 h","3 h","1 h","1 h")
Frec_Muestreo_INF = c(VE_data[1,1]/2920,VE_data[2,1]/2920,VE_data[3,1]/2920,
Frec_Muestreo 4,1]/8760,VE_data[5,1]/8760)
VE_data[= Frec_Muestreo * 100
Frec_Muestreo = data.frame(cbind(Frec_Muestreo_INF,Frec_Muestreo ))
Frec_data 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.
$horas_2017 = as.numeric(as.factor(dat_2017$HOUR))
dat_2017$horas_2017 = dat_2017$horas_2017 - 1
dat_2017ggplot(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
Limpiamos los datos y eliminamos aquellas velocidades que no tiene calidad
= filter(dat, dat$QUALITY_SPEED == "1" & dat$SPEED.M.S. != 999.9)
dat_valid
=dat_valid[dat_valid$Year == "2016",]
dat_2016=dat_valid[dat_valid$Year == "2017",]
dat_2017=dat_valid[dat_valid$Year == "2018",]
dat_2018=dat_valid[dat_valid$Year == "2019",]
dat_2019=dat_valid[dat_valid$Year == "2020",] dat_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]")
Para la velocidad calculamos para los diferentes años la cantidad de datos, la media, la varianza y la desviación típica.
<- desc_statby(data=dat_valid, measure.var = "SPEED.M.S.", grps="Year")
stable <- stable[, c("Year", "length", "mean", "sd","var")]
stable # Summary table plot, medium orange theme
<- ggtexttable(stable, rows = NULL) %>%
stable.p 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.
<- ggplot(data=stable) +
pmean geom_line(aes(y = mean, x = c(2016,2017,2018,2019,2020))) +
labs(x="YEARS", title = "MEAN 2016 - 2017")
<- ggplot(data=stable) +
pvar geom_line(aes(y = var, x = c(2016,2017,2018,2019,2020))) +
labs(x="YEARS", title = "VAR 2016 - 2017")
ggarrange(pmean,pvar)
<- ggplot(dat_2016, aes(x=SPEED.M.S.)) + geom_histogram() +
pSpeed2016 labs(title = "2016 Histogram Speed") +
labs(caption = "Mar de Plata (Buenos Aires)")
<- ggplot(dat_2017, aes(x=SPEED.M.S.)) + geom_histogram() +
pSpeed2017 labs(title = "2017 Histogram Speed") +
labs(caption = "Mar de Plata (Buenos Aires)")
<- ggplot(dat_2018, aes(x=SPEED.M.S.)) + geom_histogram() +
pSpeed2018 labs(title = "2018 Histogram Speed") +
labs(caption = "Mar de Plata (Buenos Aires)")
<-ggplot(dat_2018, aes(x=SPEED.M.S.)) + geom_histogram() +
pSpeed2019 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()
#Rosa de los vientos, quito vientos en calma#
= filter(dat, (dat$QUALITY_SPEED == "1") & (dat$SPEED.M.S. > 0)) dat_valid_Rosa
#Rosa de los vientos, quito vientos en calma#
= filter(dat, (dat$QUALITY_SPEED == "1") & (dat$SPEED.M.S. > 0)) dat_valid_Rosa
Gráficos Rosa de los Vientos
####Wind Rose###
<- plot.windrose(data = dat_valid_Rosa, spd = dat_valid_Rosa$SPEED.M.S.,
p1 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
<- p1 + facet_wrap(~dat_valid_Rosa$Month,
p_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
<- p1 + facet_wrap(~dat_valid_Rosa$Year,
p_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
#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.
#Global deviance
#Comparar distintos modelos (ajustes) empleando las metricas AIC y BIC.#
#Comparacion distintas distribuciones, cuanto menor sea el valor menor será la penalizació#
<- BIC(
comparacion_bic mllnorm(dat_valid_Rosa$SPEED.M.S.),
mlinvgauss(dat_valid_Rosa$SPEED.M.S.),
mlweibull(dat_valid_Rosa$SPEED.M.S.)
)%>% rownames_to_column(var = "distribucion") %>% arrange(BIC) comparacion_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#
<- AIC(
comparacion_aic mllnorm(dat_valid_Rosa$SPEED.M.S.),
mlinvgauss(dat_valid_Rosa$SPEED.M.S.),
mlweibull(dat_valid_Rosa$SPEED.M.S.)
)%>% rownames_to_column(var = "distribucion") %>% arrange(AIC) comparacion_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
#Ajuste de la distribucion de Weibull#
<- mlweibull(x = dat_valid_Rosa$SPEED.M.S.)
distribucion 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
<- fitdist(dat_valid_Rosa$SPEED.M.S., distr = "weibull")
distribucion 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)
Se leen los datos de iradiació solar en Mar de Plata
<- 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'))
dat_sol
#Eliminamos el 29/2 de los datos
= dat_sol[-c(60,1490), ]
dat_sol <- c("Jan","Feb","Mar",
mymonths "Apr","May","Jun",
"Jul","Aug","Sep",
"Oct","Nov","Dec")
$MO = factor(dat_sol$MO, labels = mymonths) dat_sol
Se añaden en el set de datos las estaciones que se dan justo en Mar de Plata - Buenos Aires - Argentina
#Adding Seasons
$SEASON = "Value"
dat_solfor(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
$SEASON = as.factor(dat_sol$SEASON)
dat_sol
#Se divide el data set en los diferentes años
= dat_sol[dat_sol$YEAR == "2016",]
dat_sol_2016 = dat_sol[dat_sol$YEAR == "2017",]
dat_sol_2017 = dat_sol[dat_sol$YEAR == "2018",]
dat_sol_2018 = dat_sol[dat_sol$YEAR == "2019",]
dat_sol_2019 = dat_sol[dat_sol$YEAR == "2020",] dat_sol_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>
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
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
Distribució histograma de ALLSKY_SFC_SW_DWN y CLRSKY_SFC_SW_DWN
<- ggplot(data = dat_sol) +
p1_sol geom_histogram(aes(x=ALLSKY_SFC_SW_DWN), fill = "lightblue")
<- ggplot(data = dat_sol) +
p2_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
= c(
v 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))
= c(
v1 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))
= data.frame(cbind(v,v1 ))
validos_sol 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
#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))
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))
= c(
m 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))
= c(
m1 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))
= data.frame(cbind(m,m1 ))
max_sol 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
= c(
mi 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))
= c(
mi1 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))
= data.frame(cbind(mi,mi1 ))
min_sol 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
En funció de los diferentes meses se puede ver como existe una evolución en la irradiació anual promediada
#2016/2017/2018/2019#
<- ggplot(dat_sol_2016, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) +
p2016_col 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())
<- ggplot(dat_sol_2017, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) +
p2017_col 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())
<- ggplot(dat_sol_2018, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) +
p2018_col 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())
<- ggplot(dat_sol_2019, aes(x = DATE, y = ALLSKY_SFC_SW_DWN)) +
p2019_col 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#
= c(1:365)
mean_ALLSKY_SFC_SW_DWN = 0
sum for(i in c(1:365))
{= dat_sol_2016$ALLSKY_SFC_SW_DWN[i] +
sum $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= sum/5
mean_ALLSKY_SFC_SW_DWN[i] = 0
sum
}
#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")
#2016/2017/2018/2019#
<- ggplot(dat_sol_2016, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) +
p2016_col 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())
<- ggplot(dat_sol_2017, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) +
p2017_col 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())
<- ggplot(dat_sol_2018, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) +
p2018_col 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())
<- ggplot(dat_sol_2019, aes(x = DATE, y = CLRSKY_SFC_SW_DWN)) +
p2019_col 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#
= c(1:365)
mean_CLRSKY_SFC_SW_DWN = 0
sum for(i in c(1:365))
{= dat_sol_2016$CLRSKY_SFC_SW_DWN[i] +
sum $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= sum/5
mean_CLRSKY_SFC_SW_DWN[i] = 0
sum
}
#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")
$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])
dat_sol
#Se define la latitud
= 38
latitud_mar_plata
#SMOD and SINC 2016#
= 60
ang_def = ang_def * pi/180
ang_def for(i in c(1:dim(dat_sol)[1])){
$delta_rad[i] =
dat_sol23.45 * pi * sin(2 * pi *
284 + dat_sol$DayOfYear[i])/365)/180
(
$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)
dat_sol
}
<- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) +
p60 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')
= 18
ang_def = ang_def * pi/180
ang_def for(i in c(1:dim(dat_sol)[1])){
$delta_rad[i] =
dat_sol23.45 * pi * sin(2 * pi *
284 + dat_sol$DayOfYear[i])/365)/180
(
$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)
dat_sol
}
<- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) +
p18 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')
= 45
ang_def = ang_def * pi/180
ang_def for(i in c(1:dim(dat_sol)[1])){
$delta_rad[i] =
dat_sol23.45 * pi * sin(2 * pi *
284 + dat_sol$DayOfYear[i])/365)/180
(
$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)
dat_sol
}
<- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) +
p45 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')
= 85
ang_def = ang_def * pi/180
ang_def for(i in c(1:dim(dat_sol)[1])){
$delta_rad[i] =
dat_sol23.45 * pi * sin(2 * pi *
284 + dat_sol$DayOfYear[i])/365)/180
(
$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)
dat_sol
}
<- ggplot(data = dat_sol[dat_sol$YEAR == "2016",]) +
p85 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