Translate

Renewable Energies as Sources for Reverse Osmosis Purification, Green Hydrogen Generator: Production Capacity and Economic Risk Assessment Using the R Programming Language

  

Abdi-Basid ADAN

"The purpose of this document is to consolidate and improve the various R scripts used to perform the cited analyses."

 

 






Table of Contents

#  1 - WIND DIRECTION & WIND SPEED ANALYSIS : 2

# 2 - WIND POWER DENSITY: 3

# 3 - Vertical Extrapolation Wind Speed (m/s) : 4

# 4 - Turbulence Intensity Diagram : 7

# 5 - VALIDATION SATTELITE DATA  vs Observed: 9

#  6 - Weibull Distribution Method: 12

# 7 - Goodness-of-fit estimation for Accuracy: 19

# 8 - WIND ROSE  FOR WIND DIRECTION DIAGRAM: 21

# 9 - CAPACITY FACTOR or INTERMITTENCE FACTOR MONTHLY : 23

#  10 - Wind Solar geospatial distribution: 24

#  11 - EXTRACTION NETCDF - OPEN GRIB and NETCDF: 24

# 12 -  TECHNO ECONOMIC ANALYSIS: 26

# 13 -  FINANCIAL ANALYSIS: 32

# 14 - COST OF GREEN H2: 34

# 15 - COST OF RO: Reversis Osmosis: 36

# 16 - COST OF Ammonia NH3 Synthesis Loop – Haber Bosch synthesis: 38

# 17 - LH2-COST Liquefaction of hydrogen cycle LHG # LNG = Fischer-Tropsch : 45

# 18 - CO2  -  CORBONE EMISSION SAVED AND ECONOMIC : 48

# 19 - Transport Cost OF NH3/ LH2/ Sea /  Rail/  TRUCK: 49

#  20 - GEOTHERMAL ENERGY ASSESSMENT: 51

# 21 - COST GEOTHERMAL: 62

# 22 - ANNEXE  SCRIPTS: 71

 

 

#  1 - WIND DIRECTION & WIND SPEED ANALYSIS :            

 

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

str(data)

data=data[,-1]

#

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

attach(data)

str(data)

dim(data)

summary(data)

dir()

names(data)

#

# Calculation of annual energy production

require(bReeze)

data("winddata", package="bReeze")

set1 <- set(height=40, v.avg=winddata[,2], v.std=winddata[,5],

            dir.avg=winddata[,14])

set2 <- set(height=30, v.avg=winddata[,6], v.std=winddata[,9],

            dir.avg=winddata[,16])

ts <- timestamp(timestamp=winddata[,1])

neubuerg <- mast(timestamp=ts, set1, set2)

neubuerg <- clean(mast=neubuerg)

# https://search.r-project.org/CRAN/refmans/bReeze/html/aep.html

# https://power-calculation.com/wind-power-energy-calculator.php

 

 

X=1:length(IOMSL); summary(lm(IOMSL~X))

#

U=u10 #Eastward

V=v10 #Northward

#windSpd <-function(U,V){

#  sqrt(U^2+V^2)

#}

#windDir <-function(U,V){

#  (270-atan2(u,v)*180/pi)%%360

#}

WSPE=sqrt(U^2+V^2)

WDIR= (270-atan2(V,U)*180/pi)%%360

#winddirect=atan(V/U);head(winddirect)

write.table(WSPE, "wsp.txt", row.names=FALSE, col.names=FALSE)

write.table(WDIR, "wdi.txt", row.names=FALSE, col.names=FALSE)

 

 

 

# 2 - WIND POWER DENSITY:

 

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

str(data)

data=data[,-1]

#

library(prettyR)

describe(data,num.desc=c("mean","max","min","sd","var","median","valid.n"),xname=NA,horizontal=TRUE)

attach(data)

round(mean(V_80),3); round(mean(V_40),3); round(mean(V_30),3);round(mean(V_20),3)

round(max(V_80),3); round(max(V_40),3); round(max(V_30),3);round(max(V_20),3)

# PD=rho* (sum(v2^3)/length(v2))/2  = PD/A  (W/M2)

cbind(names(data))

rho=1.225                                 #kg/m3

PDA = (rho* (mean(V_80^3)))/2; round(PDA,3)

PDA = (rho* (mean(V_40^3)))/2; round(PDA,3)

PDA = (rho* (mean(V_30^3)))/2; round(PDA,3)

PDA = (rho* (mean(V_20^3)))/2; round(PDA,3)

#

# Intensity Turbulence   IT (%)

TI15=V_80[V_80<=15.1 & V_80>=14.9 ];summary(TI15)#(sd(TI15)/mean(TI15))*100 #((0.75*mean(TI15))+5.6)/mean(TI15)*100

IT= mean(SD_40)/mean(V_40); IT*100

#

library(bReeze)

# data("winddata", package="bReeze")

# View(winddata);dim(winddata)

# set40 <- set(height=40, v.avg=winddata[,2], v.std=winddata[,5],dir.avg=winddata[,14])

cbind(names(data))

set30 <- set(height= 30, v.avg= V_30, v.std= SD_30 ,dir.avg=  DIR_30)

ts <- timestamp(timestamp=data[,1])  #ts <- timestamp(timestamp=winddata[,1])

neubuerg <- mast(timestamp=ts, set30)

neubuerg <- clean(mast=neubuerg)

neubuerg.ti= turbulence(mast=neubuerg, turb.set=1)

plot(neubuerg.ti, cex.axis=0.9, cex.lab=0.9, circles=c(0.05,0.15,0.05),col="blue", col.axis="black",

     col.circle="red", lwd.circle=2, lty.circle= 1)

#

# plot(neubuerg.ti, cex.axis=0.7, cex.lab=0.9, circles=c(0.05,0.20,0.05),

#  col="lightgray", col.axis="darkgray", col.border="gray", col.circle="darkgray",

#  col.cross="darkgray", col.lab="darkgray", fg=TRUE, lty.circle="dotdash",

#  lty.cross="longdash", lwd.border=1.2, lwd.circle=1.2, lwd.cross=1.2,

#  pos.axis=135, sec.space=0.6)

#

boxplot(data, xlab="Month", ylab="Wind speed at 80 m [m/s]",col=rainbow(15))

grid(lty=1,col="black")

abline(v=c(1:12))

par(new=TRUE)

 

 

# 3 - Vertical Extrapolation Wind Speed (m/s) :

 

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

str(data)

data=data[,-1]

#

attach(data)

cbind(names(data))

v1=CFSR

h1=10

h2=80

#

alpha=(0.37-(0.088*log(mean(v1))))/(1-(0.088*log(h1/10)));alpha

v2=v1*((h2/h1)^alpha);mean(v2)

write.table(v2,"data.txt", row.names=FALSE, col.names=FALSE)

#Verification de l'extrapolation

#https://sci-hub.se/https://doi.org/10.1016/j.enconman.2004.12.005

(log(mean(v2))-log(mean(v1)))/(log(h2)-log(h1))-alpha

mean(v1)

mean(v2)

#

# 3D Scatter Plot for Wind analysis

cbind(names(data))

attach(data)

#

x=Pression..Bar.

y=Temperature...C.

z= Wind.speed...m.s.

library("plot3D")

x11()

#b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”

scatter3D(x, y, z, phi = 0.7, bty = "b2",

          pch = 20, cex = 2, ticktype = "detailed") # theta = -25

# Add another point (black color)

scatter3D(x = 7, y = 3, z = 3.5, add = TRUE, colkey = FALSE,

          pch = 18, cex = 3, col = "black")

#

# greyish background for the boxtype (bty = "g")

scatter3D(x, y, z, phi = 0, bty = "g",

          pch = 20, cex = 2, ticktype = "detailed")

# line plot

scatter3D(x, y, z, phi = 0, bty = "g", type = "l",

          ticktype = "detailed", lwd = 4)

# points and lines

scatter3D(x, y, z, phi = 0, bty = "g", type = "b",

          ticktype = "detailed", pch = 20,

          cex = c(0.5, 1, 1.5))

# vertical lines

scatter3D(x, y, z, phi = 0, bty = "b2",  type = "h",

          ticktype = "detailed")

#

#

library(plot3D)

VADeath=data

VADeath=as.matrix(VADeath)

class(VADeath)

hist3D (x = 1:nrow(VADeath), y = 1:ncol(VADeath), z = VADeath,

        bty = "b2", phi = 30,  theta = -65,

        xlab = "", ylab = "", zlab = "", main = "",

        col = "blue", border = "red", shade = 0.5,

        ticktype = "detailed", space = 0.19, d =5, cex.axis = 0.95)

#http://www.sthda.com/english/wiki/impressive-package-for-3d-and-4d-graph-r-software-and-data-visualization

#

#scatter3D(x, y, z, phi = 0, bty = "g",  type = "h",

#           ticktype = "detailed", pch = 19, cex = 0.5)

#https://www.learnbyexample.org/r-scatter-plot-base-graph/

#library(scatterplot3d)

#scatterplot3d(V_80, Temp, Pression,

#             pch = 16,

#              type="h",

#              angle = 45,

#              xlab = "Wind speed (m/s)",

#              ylab = "Temperature (°C)",

#              zlab = "Pression "

#           )

 

library('corrplot')

# http://www.sthda.com/english/wiki/visualize-correlation-matrix-using-correlogram

cor.mtest <- function(mat, ...) {

  mat <- as.matrix(mat)

  n <- ncol(mat)

  p.mat<- matrix(NA, n, n)

  diag(p.mat) <- 0

  for (i in 1:(n - 1)) {

    for (j in (i + 1):n) {

      tmp <- cor.test(mat[, i], mat[, j], ...)

      p.mat[i, j] <- p.mat[j, i] <- tmp$p.value

    }

  }

  colnames(p.mat) <- rownames(p.mat) <- colnames(mat)

  p.mat

}

 

M <- cor(data)

p.mat <- cor.mtest(M)

 

title <- "p-value significance"

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))

corrplot(M, method="color", col=col(200), 

         diag=FALSE, # tl.pos="d",

         type="upper", order="hclust",

         title=title,

         addCoef.col = "black", # Add coefficient of correlation

         # Combine with significance

         p.mat = p.mat, sig.level = 0.05, insig = "blank"

         # hide correlation coefficient on the principal diagonal

)

 

cor(data, method="pearson")

cor(data, method="kendall")

cor(data, method="spearman")

 

 

# 4 - Turbulence Intensity Diagram :

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

str(data)

names(data)

attach(data)

summary(data)

#data=data[,-c(1,2,3)]

which(data[,2] >=0.25  )

View(data)

#data1=subset(data, V_80 >  )

V=V_30

d12=   subset(data, V> 1 &   V < 2)

d23=   subset(data, V> 2 &   V < 3)

d34=   subset(data, V> 3 &   V < 4)

d45=   subset(data, V> 4 &   V < 5)

d56=   subset(data, V> 5 &   V < 6)

d67=   subset(data, V> 6 &   V < 7)

d78=   subset(data, V> 7 &   V < 8)

d89=   subset(data, V> 8 &   V < 9)

d910=  subset(data, V> 9 &   V < 10)

d1011= subset(data, V> 10 &  V < 11)

d1112= subset(data, V> 11 &  V < 12)

d1213= subset(data, V> 12 &  V < 13)

d1314= subset(data, V> 13 &  V < 14)

d1415= subset(data, V> 14 &  V < 15)

d1516= subset(data, V> 15 &  V < 16)

d1617= subset(data, V> 16 &  V < 17)

d1718= subset(data, V> 17 &  V < 18)

d1819= subset(data, V> 18 &  V < 19)

d1920= subset(data, V> 19 &  V < 20)

d2021= subset(data, V> 20 &  V < 21)

d2122= subset(data, V> 21 &  V < 22)

#

c1=sapply(d12,    mean)

c2=sapply(d23,    mean)

c3=sapply(d34,    mean)

c4=sapply(d45,    mean)

c5=sapply(d56,    mean)

c6=sapply(d67,    mean)

c7=sapply(d78,    mean)

c8=sapply(d89,    mean)

c9=sapply(d910,   mean)

c10=sapply(d1011, mean)

c11=sapply(d1112, mean)

c12=sapply(d1213, mean)

c13=sapply(d1314, mean)

c14=sapply(d1415, mean)

c15=sapply(d1516, mean)

c16=sapply(d1617, mean)

c17=sapply(d1718, mean)

c18=sapply(d1819, mean)

c19=sapply(d1920, mean)

c20=sapply(d2021, mean)

c21=sapply(d2122, mean)

#

rbind(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21)

 

 

 

 

# 5 - VALIDATION SATTELITE DATA  vs Observed:

 

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

str(data)

names(data)

attach(data)

summary(data)

require(plotrix)

names(data)

# lwd = 0.9, cex = 1.5

oldpar<-taylor.diagram(V_80,ERA5,pch=19,pos.cor=TRUE,grad.corr.lines=c(0.2,0.4,0.6,0.8,0.9,1),

                       pcex=1,cex.axis=1,normalize=FALSE,show.gamma=TRUE,ngamma=5,gamma.col="green",sd.arcs=5) # show.gamma=TRUE,ngamma=3,gamma.col="blue",sd.arcs=5

#

taylor.diagram(V_80,MERRA2,add=TRUE,pch=19,col="blue")

taylor.diagram(V_80,NCEP,add=TRUE,pch=19,col= "green")

taylor.diagram(V_80,ICOADS,add=TRUE,pch=19,col="cyan")

taylor.diagram(V_80,CFSR,add=TRUE,pch=19,col="orange")

#

par(oldpar)

taylor.diagram(V_80,ERA5,pos.cor=FALSE)

taylor.diagram(V_80,MERRA2,add=TRUE,col="blue")

taylor.diagram(V_80,NCEP,add=TRUE,col= "green")

taylor.diagram(V_80,ICOADS,add=TRUE,col="cyan")

taylor.diagram(V_80,CFSR,add=TRUE,col="orange")

#

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",", row.names=1)

str(data)

require(openair)

names(data)

date1= as.Date(data$date,format='%d/%m/%Y')  # date= as.Date('01/01/2015',format='%d/%m/%Y')

data$date<-date1   

# a <- as.Date(data$date, format = "%d-%b-%y")

TaylorDiagram(data, obs = "obs", mod = "mod", group = "model")

#TaylorDiagram(mod.dat, obs = "obs", mod = "mod", group = "model", type = "season")

# Estimate the accuracy of solar radiation models: VALIDATION SOLAR SATTELITE DATA

#

# Test Parametric and Non Parametric Correlation

data1=na.omit(data)

cor.test(S,O, data=data, method="pearson")  # pearson”, “kendall”, “spearman”

round(cor(data1),3)

#*-*Root-mean-square deviation  (*-mode POURCENTAGE # -mode Unite variable )

rmse=(sqrt(sum((S-O)^2)/sum(O^2)))*100; round(rmse, 3)

#RMSE= sqrt(sum((S-O)^2)/ length(S))

#RRMSEmm = sqrt(sum((weibullmm-F)^2)/ length(F))/(sum(F)/length(F))

#RMSD = RMSE

#

#-*-Mean absolute error

mae=sum(abs(S-O))/length(O); round(mae, 3)

#

# Mean Percentage Error

mpe=(sum(S-O)/sum(O) )*100; round(mpe, 3)

#

# Percentage bias for a 95% confidence intervaL

Us=0.05*100                        # pyranometer ±5% accuracy (http://dx.doi.org/10.1016/j.solener.2015.08.015)

Uctn= -sqrt(Us^2 + mpe^2 +  rmse^2); round(Uctn, 3)

Uctp= +sqrt(Us^2 + mpe^2 +  rmse^2); round(Uctp, 3)

#

# https://sci-hub.st/https://doi.org/10.1016/j.rser.2018.03.003

# https://sci-hub.st/https://doi.org/10.1016/j.solener.2011.02.013

# https://solargis.com/blog/best-practices/improving-accuracy-of-solar-power-forecasts

#

data=read.table(file("clipboard"),header=T, sep="\t", dec=".", row.names=1)

# data=read.table(file("clipboard"),header=T, sep="\t", dec=".")

str(data)

attach(data)

#

#  3D PLOT IN R

#

# install.packages("rgl", dependencies = TRUE) # Change Mirror in R Marseille

require(rgl) 

require(lattice)

require(latticeExtra)

library(plotly)

library(rayshader)

library(ggplot2)

library(av)

#

x= GHI

y= T2m

z= Clear.Index

persp3d(x,y,z,col="blue")

plot3d(x = GHI, y = T2m, z = Clear.Index)

lines3d(x = GHI, y = T2m, z = Clear.Index)

surface3d(x = GHI, y = T2m, z = Clear.Index)

#

plot_ly(x=x,y=y,z=z, type="surface")

#

library(akima)

im <- with(data,interp(x,y,z))

x11();with(im,image(x,y,z))

# https://stackoverflow.com/questions/6720526/plot-3d-data-in-r

#

p <- ggplot(data, aes(X,T2m, fill = GHI)) +

  geom_tile() +

  scale_fill_fermenter(type = "div", palette = "RdYlBu")

plot_gg(p)  # ALT + F4

render_movie(filename = "plot.gif")

# https://stackoverflow.com/questions/26794236/ggplot2-3d-bar-plot

#

attach(data)

dim(data)

names(data)

str(data)

#

x1= data$GHI

y1= data$ClearIndex

z1= data$T2m

library("plot3D")

x11()

#b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”

scatter3D(x1, y1, z1, phi = 0.55, bty = "b2",

          pch = 20, cex = 2, ticktype = "detailed") # theta = -25

#-#-#

library(rgl);require(car)

scatter3d(x1, y1, z1)

scatter3d(x = x1, y = y1, z = z1, point.col = "blue", surface=FALSE,labels = rownames(data), id.n=nrow(data))

scatter3d(x = x1, y = y1, z = z1, groups = as.factor(data$X))

# http://www.sthda.com/english/wiki/amazing-interactive-3d-scatter-plots-r-software-and-data-visualization

 

 

 

#  6 - Weibull Distribution Method:

 

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",", row.names=1)

str(data)

summary(data)

names(data)

#Probabiity Distribution Function(PDF)

#---Statistic Parameter

attach(data)

v2=V_80

#

#--- Test value of K and c weibull parameters

require(MASS)

library(fitdistrplus)

# “mle”, “mme”, “qme”, “mge”, “mse”

fit.weibull <- fitdist( v2, distr = "weibull", method = "mle", lower = c(0, 0));fit.weibull

fit.weibull2 <- fitdist(v2, distr = "weibull", method = "mse", lower = c(0, 0));fit.weibull2

fit.weibull3 <- fitdist(v2, distr = "weibull", method = "mge", lower = c(0, 0));fit.weibull3

gofstat(list(fit.weibull, fit.weibull2))

#fit.gamma <- fitdist(temp, distr = "gamma", method = "mle", lower = c(0, 0), start = list(scale = 1, shape = 1))

#fit.weibull <- fitdist(temp, distr = "weibull", method = "mle", lower = c(0, 0))

#fit.gamma <- fitdist(temp, distr = "gamma", method = "mle", lower = c(0, 0), start = list(scale = 1, shape = 1))

#plot(fit.weibull)

#plot(fit.gamma)

#ESTIMATION OTHER WEIBULL  2 and 3 PARAMETER

#   Distribution Parameter  Weibull:  1)Shape   2)Scale  3)Threshold

#   Distribution Parameter  Rayleigh: 1       or 2 parameter

#Estimating parameters of the Weibull distribution through classical methods

#  "greg1"  (for the method of generalized regression type 1)

#  "greg2"  (for the method of generalized regression type 2)

#  "lm"     (for the method of L-moment)

#  "ml"     (for the method of maximum likelihood (ML)

#  "mlm"    (for the method of logarithmic moment)

#  "moment" (for the method of moment)

#  "pm"     (for the method of percentile)

#  "rank"   (for the method of rank correlation)

#  "reg"    (for the method of least square)

#  "ustat"  (for the method of U-statistic)

#  "wml"    (for the method of weighted ML)

#  "wreg"   (for the method of weighted least square)

#  "mle"    (for the method of ML),

#  "mm1"    (for the method of modified moment (MM) type 1)

#  "mm2"    (for the method of MM type 2)

#  "mm3"    (for the method of MM type 3)

#  "mml1"   (for the method of modified ML type 1)

#  "mml2"   (for the method of modified ML type 2)

#  "mml3"   (for the method of modified ML type 3)

#  "mml4"   (for the method of modified ML type 4)

#  "moment" (for the method of moment)

#  "mps"    (for the method of maximum product spacing)

#  "tlm"    (for the method of T-L moment)

#  "wml"    (for the method of weighted ML)

#if(!require('ForestFit')) {

#  install.packages('ForestFit')

#  library('ForestFit')

#}

#library('ForestFit')

# starts<-c(2,   2  ,0)

#fitWeibull(v2, TRUE, "ml", starts)

#fitWeibull(data, TRUE, "mps", starts)

#fitWeibull(data, TRUE, "wml", starts)

#fitWeibull(data, FALSE, "mlm", starts)

#fitWeibull(data, FALSE, "ustat", starts)

#

v2=V_80

moy=mean(v2)

sd=(sd(v2)*length(v2))/(length(v2)-1)

count=data.frame(table(v2))

# Kurtosis & Skewness

skew=sum((v2-moy)^3/sd^3)/(length(v2)-1)

kurt=sum((((v2-moy)^4)/(sd^4))-3)/(length(v2)-1)

min=min(v2)

max=max(v2)

#

rbind(c("Statistic of v2"),moy,sd,skew,kurt,min,max)

#

# - 1 - Empirical Jestus

#Empirique de Jestus

kej=(sd/moy)^-1.086 

cej=moy/gamma((1+(1/kej)))

kej;cej

 

# - 2 - Maximum Loglikelihood

#kmv=1/(sum(v2^(kej+0.09)*log(v2))/sum(v2^(kej+0.09)) -sum(log(v2))/length(v2))

#cmv=(sum(v2^kmv)/length(v2))^(1/kmv)

library(fitdistrplus);fit.weibull <- fitdist(v2, distr = "weibull", method = "mle", lower = c(0, 0));fit.weibull

#mledist(v2, distr="weibull", start = NULL, fix.arg = NULL, optim.method = "default")$estimate

kmv=3.306007;cmv=11.153787

 

# - 3 - Moment Method

#Empirical method of Justus/ moment method

cej;kej

cmm= 11.188 ;   kmm= 3.258

round(mean(v2),4); round(cmm*gamma(1+(1/kmm)),4); round(sd(v2),4);   round(cmm* sqrt(gamma(1+(2/kmm))-(gamma(1+(1/kmm))^2 )),4)

 

# - 4 - WAsp Method

F=1-exp(-(mean(v2)/(cmm+0.055))^(kmm+0.055))

cwasp=(sum(v2^3)/(length(v2)*gamma((3/(kmm+0.05))+1)))^(1/3)

X=1-mean(F) 

w1=-log(X)

#log(w1)==log((moy/cwasp)^k)#log((moy/cwasp)^k)=k*log(moy)-log(cwasp)=k*log(moy/cwasp)

kwasp = log(w1)/log(moy/cwasp)

kwasp;cwasp

 

# - 5 - Power Density

#Power-Density Method OR  Energy pattern factor method

E=(sum(v2^3)/length(v2))/moy^3

kpd=1+(3.69/E^2)

cpd=moy/gamma((1+(1/kpd)))

kpd;cpd

 

# - 6 - Median and Quartile

library(fitdistrplus);qmedist(v2, "weibull", probs=c(1/3, 2/3))$estimate #Quantile matching

kqm=3.673783;cqm= 11.344275

#

cbind(quantile(v2))

#Q0

Q1 =  7.8357805           # 25%

Q3 =  12.4450632          # 75%

Q2 =  10.2556539          # 50%

#Q4

#kmq=1.573/log(Q3/Q1)

kmq=log(log(1/4)/log(3/4))/log(Q3/Q1)

cmq=Q2/log(2)^(1/kmq)

kmq;cmq

 

# - 7 - Empirical of Lysen

#Empirical method of lysen (EML)

keml=(sd/moy)^-1.086

ceml=moy/gamma(1+(1/keml))

ceml2=mean(v2)*(0.568+(0.433/keml))^(-(1/keml))

keml;ceml

 

#-8-Curving-Fitting Method

kcf=(0.9874/(sd/moy))^1.0983

ccf=moy/gamma((1+(1/kcf)))

kcf;ccf

 

#-9-Modified maximum likelihood Method

frq=hist(v2); dev.off()

#kmml=1/(sum((frq$mids^(kmv+0.09))*log(frq$mids)*frq$density)/sum((frq$mids^(kmv+0.09))*frq$density) -sum(log(frq$mids)*frq$density)/sum(frq$density))#cmml=(sum(frq$mids^kmml*frq$density)/sum(frq$density))^(1/kmml)

kmml=sum(frq$mids^(kmv+0.09)*log(frq$mids)*frq$density)/((sum(frq$mids^(kmv+0.09)*frq$density))- (sum(log(frq$mids)*frq$density)/sum(frq$density)))

cmml=((1/sum(frq$density))*sum(frq$mids^kmml*frq$density))^(1/kmml)

kmml;cmml

 

#-10-Weighted Least Square Method

F=1-exp(-(v2/(cmm+0.09))^(kmm+0.09))

x = log(v2)

y =log(-log(1-F))

w=((1-F)*log(1-F))^2

library(MASS);summary(rlm(y~x,weights = 1/w))

kwls=                    3.758000e+00  

Intercept=              -9.239300e+00

cwls=exp(-(Intercept/kwls))

kwls;cwls

 

#-11-Least square Method      Or    Graphical method

F=1-exp(-(v2/(cmm+0.09))^(kmm+0.09))

x = log(v2)

y =log(-log(1-F))

ls=lm(y~x);summary(ls)

kls=              3.348e+00 

Intercept=       -8.112e+00

cls=exp(-(Intercept/kls))

kls;cls

#

#-12-Probability weighted moments Method (based on power density method)

#sort(x, decreasing = FALSE, na.last = TRUE)

#vi=sort(v2, decreasing = FALSE, na.last = TRUE)

length(v2)

# ATTENTION A TRIER POUR  EVITER L'ERREUR

#Cbar = mean(v2)/      (2/n(n-1))*                 sum(vi*(n-i) ==  A TRIER !

Cbar=moy/( (2/(length(v2)*(length(v2)-1)))  *      1.66994E+11          )

kpwm=log(2)/log(Cbar)

cpwm=(moy^3/gamma(1+(3/kpwm)))^(1/3)

kpwm;cpwm

 

#-l3-Equivalent Energy Method

kee=1/(sum((frq$mids^(kmv+0.09))*log(frq$mids)*frq$density)/sum((frq$mids^(kmv+0.09))*frq$density) -sum(log(frq$mids)*frq$density)/sum(frq$density))

#cee=((moy^3)/gamma(1+(3/kee)))^(1/3)

cee=((moy^3)/gamma(1+(3/kmm)))^(1/3)

kee;cee

 

#-l4-Alternative maximum likelihood method

kaml=((pi/sqrt(6))*((length(v2)*(length(v2)-1))/( (length(v2)*sum(log(v2)^2))-(sum(log(v2))^2))) )^(1/2)

caml=(sum(v2^kaml)/length(v2))^(1/kaml)

kaml;caml

 

#-n-Multi-Objective Moments (MUOM) or Bayesian Method

str(v2)

require(ForestFit)

fitbayesWeibull(V_80, n.burn=5, n.simul=15)

#fitbayesWeibull(V_80, n.burn=2, n.simul=5)alpha|beta|mu       3.217599    11.0072      -0.06914994

#fitbayesWeibull(V_80, n.burn=2, n.simul=7)alpha|beta|mu       3.292163    11.16194     -0.1932478

#fitbayesWeibull(V_80, n.burn=5, n.simul=15)alpha|beta|mu      3.560549    11.81863     -0.728216

#fitbayesWeibull(V_80, n.burn=20, n.simul=50) alpha|beta|mu    4.01669     13.10108     -1.882221

kb1=3.217599; cb1=11.0072 ;kb2=3.292163; cb2=11.16194  ;kb=3.560549; cb=11.81863  ;kb4=4.01669; cb4=13.10108

#

# RESULT OF WEIBULL MODELISATION

y=hist(v2, freq=FALSE, col="blue", main="", xlab="");print(y);dev.off() #breaks=60

#

weibull_ej=(kej/cej)*((y$mids/cej)^(kej-1))*exp(-((y$mids/cej)^kej))  #Short Way

FC_ej=1-exp(-((y$mids/cej)^kej))

#

weibull_mv=(kmv/cmv)*((y$mids/cmv)^(kmv-1))*exp(-((y$mids/cmv)^kmv))  #Short Way

FC_mv=1-exp(-((y$mids/cmv)^kmv))

#

weibull_mm=(kmm/cmm)*((y$mids/cmm)^(kmm-1))*exp(-((y$mids/cmm)^kmm))  #Short Way

FC_mm=1-exp(-((y$mids/cmm)^kmm))

#

weibull_wasp=(kwasp/cwasp)*((y$mids/cwasp)^(kwasp-1))*exp(-((y$mids/cwasp)^kwasp))  #Short Way

FC_wasp=1-exp(-((y$mids/cwasp)^kwasp))

#

weibull_pd=(kpd/cpd)*((y$mids/cpd)^(kpd-1))*exp(-((y$mids/cpd)^kpd))  #Short Way

FC_pd=1-exp(-((y$mids/cpd)^kpd))

#

weibull_mq=(kmq/cmq)*((y$mids/cmq)^(kmq-1))*exp(-((y$mids/cmq)^kmq))  #Short Way

FC_mq=1-exp(-((y$mids/cmq)^kmq))

#

weibull_eml=(keml/ceml)*((y$mids/ceml)^(keml-1))*exp(-((y$mids/ceml)^keml))  #Short Way

FC_eml=1-exp(-((y$mids/ceml)^keml))

#

weibull_cf=(kcf/ccf)*((y$mids/ccf)^(kcf-1))*exp(-((y$mids/ccf)^kcf))  #Short Way

FC_cf=1-exp(-((y$mids/ccf)^kcf))

#

weibull_mml=(kmml/cmml)*((y$mids/cmml)^(kmml-1))*exp(-((y$mids/cmml)^kmml))  #Short Way

FC_mml=1-exp(-((y$mids/cmml)^kmml))

#

weibull_wls=(kwls/cwls)*((y$mids/cwls)^(kwls-1))*exp(-((y$mids/cwls)^kwls))  #Short Way

FC_wls=1-exp(-((y$mids/cwls)^kwls))

#

weibull_ls=(kls/cls)*((y$mids/cls)^(kls-1))*exp(-((y$mids/cls)^kls))  #Short Way

FC_ls=1-exp(-((y$mids/cls)^kls))

#

weibull_pwm=(kpwm/cpwm)*((y$mids/cpwm)^(kpwm-1))*exp(-((y$mids/cpwm)^kpwm))  #Short Way

FC_pwm=1-exp(-((y$mids/cpwm)^kpwm))

#

weibull_ee=(kee/cee)*((y$mids/cee)^(kee-1))*exp(-((y$mids/cee)^kee))  #Short Way

FC_ee=1-exp(-((y$mids/cee)^kee))

#

weibull_aml=(kaml/caml)*((y$mids/caml)^(kaml-1))*exp(-((y$mids/caml)^kaml))  #Short Way

FC_aml=1-exp(-((y$mids/caml)^kaml))

#

weibull_b=(kb/cb)*((y$mids/cb)^(kb-1))*exp(-((y$mids/cb)^kb))  #Short Way

FC_b=1-exp(-((y$mids/cb)^kb))

#

weibull_qm=(kqm/cqm)*((y$mids/cqm)^(kqm-1))*exp(-((y$mids/cqm)^kqm))  #Short Way

FC_qm=1-exp(-((y$mids/cqm)^kqm))

 

 

 

# 7 - Goodness-of-fit estimation for Accuracy: 

 

RMSE     = sqrt(sum((y$density-weibull_qm)^2)/length(y$density))    

R2       = 1-(sum((y$density-weibull_qm)^2)/sum((y$density-mean(y$density) )^2))      

coe      = sum((weibull_qm-mean(y$density))^2)/sum((y$density-mean(y$density))^2)                

IA       = 1-sum(abs(y$density-weibull_qm))/(sum(abs(y$density-mean(weibull_qm))+abs(weibull_qm-mean(weibull_qm))))

Chi2     = sum((y$density-weibull_qm)^2/weibull_qm)

mae      = sum(abs(y$density-weibull_qm))/length(weibull_qm)

RRMSE    = sqrt(sum((y$density-weibull_qm)^2)/length(y$density))  / mean(weibull_qm)

MAPE     = 1*(sum(abs((y$density-weibull_qm)/weibull_qm))/ length(y$density))              

#

#      qm      #STOP REPLACE

rbind(RMSE,R2,coe,IA,Chi2,mae, RRMSE, MAPE)

#

#"mge" for 'maximum goodness-of-fit estimation

#"CvM", "KS", "AD", "ADR", "ADL", "AD2R", "AD2L",

mgedist(V_60, distr="weibull", gof = "ADL", start = NULL, fix.arg = NULL, optim.method = "default")

#  The mgedist function numerically maximizes goodness-of-fit:or minimizes a goodness-of-fit distance coded by the argument gof.

#  One may use one of the classical distances defined in Stephens (1986)

#  the Cramer-von Mises distance ("CvM")

#  the Kolmogorov-Smirnov distance ("KS")

#  the Anderson-Darling distance ("AD")

#  which gives more weight to the tails of the distribution, or one of the variants of this last distance proposed by Luceno (2006).

#  the right-tail AD ("ADR")

#  the left-tail AD  ("ADL")

#

# Distribution and Cumulative Diagram

#POUT=0.5*1.225*(cmm^3)*gamma((kmm+3)/kmm); POUT

# ej   mv   mm   wasp  pd  mq  eml  cf mml  wls  ls  pwm  ee  aml  b

y=hist(v2, freq=FALSE,breaks = "Sturges") #breaks=60

#weibullmm=(kmm/cmm)*((v2/cmm)^(kmm-1))*exp(-((v2/cmm)^kmm))       # Long Way

weibull=(kmq/cmq)*((y$mids/cmq)^(kmq-1))*exp(-((y$mids/cmq)^kmq))  # Short Way

FCmq=1-exp(-((y$mids/cmq)^kmq))

print(y)

cbind(y$density,y$mids)

#

cbind(weibull_ej,weibull_mv,weibull_mm,weibull_wasp,weibull_pd,weibull_mq,weibull_eml,weibull_cf,weibull_mml,weibull_wls,weibull_ls,weibull_pwm,weibull_ee,weibull_aml,weibull_b)

cbind(FC_ej,FC_mv,FC_mm,FC_wasp,FC_pd,FC_mq,FC_eml,FC_cf,FC_mml,FC_wls,FC_ls,FC_pwm,FC_ee,FC_aml,FC_b)

#

# Transform Distribution ti wind speed

o_0.5=rep(0.5,     each=25     )

o_1.5=rep(1.5,     each=404    )

o_2.5=rep(2.5,     each=1460   )

o_3.5=rep(3.5,     each=3371   )

o_4.5=rep(4.5,     each=6205   )

o_5.5=rep(5.5,     each=9872   )

o_6.5=rep(6.5,     each=14084  )

o_7.5=rep(7.5,     each=18331  )

o_8.5=rep(8.5,     each=21932  )

o_9.5=rep(9.5,     each=24170  )

o_10.5=rep(10.5,   each=24494  )

o_11.5=rep(11.5,   each=22732  )

o_12.5=rep(12.5,   each=19211  )

o_13.5=rep(13.5,   each=14677  )

o_14.5=rep(14.5,   each=10055  )

o_15.5=rep(15.5,   each=6121   )

o_16.5=rep(16.5,   each=3279   )

o_17.5=rep(17.5,   each=1529   )

o_18.5=rep(18.5,   each=614    )

o_19.5=rep(19.5,   each=210    )

o_20.5=rep(20.5,   each=60     )

o_21.5=rep(21.5,   each=14     )

#

mids=c(o_0.5,o_1.5,o_2.5,o_3.5,o_4.5,o_5.5,o_6.5,o_7.5,o_8.5,o_9.5,o_10.5,o_11.5,o_12.5,o_13.5,o_14.5,o_15.5,o_16.5,o_17.5,o_18.5,o_19.5,o_20.5,o_21.5)

sd(mids);mean(mids);sd(mids)/mean(mids) #  table(obs)

#

# OTHER CARACTERISTIQUE

weibullmq=(kmq/cmq)*((v2/cmq)^(kmq-1))*exp(-((v2/cmq)^kmq))

#

aa=cbind(table(v2))[1:length(cbind(table(v2)))]  # bb=aa/sum(aa)

cc=cbind(table(weibullmq))[1:length(cbind(table(weibullmq)))]

write.table(aa, "data.txt", row.names=FALSE, col.names=FALSE)

write.table(cc, "data.txt", row.names=FALSE, col.names=FALSE)

cbind(table(v2))

 

 

 

# 8 - WIND ROSE  FOR WIND DIRECTION DIAGRAM:

data1<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

str(data1)

attach(data1)

# data1<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

# "right", "left", "top", "bottom"

names(data1)

#

require(openair)

windRose(data1, ws = "V_40", wd ="DIR_40", ws.int = 2,

         paddle = FALSE, border = FALSE,

         breaks = c(0, 4, 8, 12, 16, 21),

         key.position = "bottom",

         col =c("cyan","green","yellow","orange", "red"),

         grid.line = list(value =5, lty = 1, lwd=3, col = "grey"), annotate = TRUE,

         key.header = "Wind Speed", angle.scale = -45 )

#

#

ir=read.table(file("clipboard"), header=TRUE, sep="\t",dec=",")

#

ir=read.table(file("clipboard"), header=TRUE, sep="\t",dec=",",row.names=1)

#

str(ir); attach(ir);names(ir)

# MONTH HOURS VALUE

X1=Day

X2=Month

X3=V_80

library(ggplot2);ggp <- ggplot(ir, aes(X1, X2)) +  geom_tile(aes(fill = X3),cex=0.01);ggp

ggp + scale_fill_gradient(low = c("blue3","blue","green3","green"), high = c("yellow","red","red3","brown"))   

#https://statisticsglobe.com/heatmap-in-r

#

# example model VADeaths

VADeath=ir

VADeath=as.matrix(VADeath)

class(VADeath)

library(latticeExtra)

# A function generating colors

cols<-function(n) {

  colorRampPalette(c("red", "yellow","green","blue"))(200)                                 # 20 distinct colors

}

# The plot

cloud(VADeath, panel.3d.cloud = panel.3dbars, col="white",                      # white borders for bars

      xbase = 1, ybase = 2, zlim = c(0, max(VADeath)),                              # No space around the bars

      scales = list(arrows = FALSE, just = "right"), main=NULL,xlab = NULL, ylab = NULL,

      col.facet = level.colors(VADeath, at = do.breaks(range(VADeath), 10),       

                               col.regions = cols,                                   # color ramp for filling the bars

                               colors = TRUE),

      colorkey = list(col = cols, at = do.breaks(range(VADeath), 10)),

      screen = list(z = 65, x = -65))  

#

#

# WIND POWER DENSITY MONTHLY

rho=1.225 #kg/m3

#PD=rho* (sum(v2^3)/length(v2))/2  = PD/A  (W/M2)

PDA = (rho* (mean(v2^3)))/2; PDA

 

 

 

 

 

# 9 - CAPACITY FACTOR or INTERMITTENCE FACTOR MONTHLY :

k=kmm; c=cmm

vi=3; vr=11.5; vo=25;

Pout= exp(-((vi/c)^k)) - exp(-((vr/c)^k))

Pr=((vr/c)^k)  -  ((vi/c)^k)

CF = (Pout/Pr) - exp(-(vo/c)^k); CF

#

# MONTLHY CAPACITY FACTOR :

data=read.table(file('clipboard'), header=T, sep="\t", dec=",")

str(data)

View(data)

#

data1=subset(data,data$Time>= 6 & data$Time< 19)

write.table(data1, "data.txt", row.names=FALSE, col.names=FALSE)

#

data2=subset(data,data$Time==  18)

write.table(data2[,5], "data.txt", row.names=FALSE, col.names=FALSE)

summary(data2)

#

data2=subset(data,data$Month==  12 )

write.table(data2[,5], "data.txt", row.names=FALSE, col.names=FALSE)

summary(data2)

#

data=read.table(file('clipboard'), header=T, sep="\t", dec=",")

str(data)

attach(data)

#View(data)

#

v2=V_80

cbind(quantile(v2))

#

Q1 =  5.7616033        # 25%

Q2 =  8.4119409        # 50%

Q3 =  10.4861181       # 75%

# kmq=1.573/log(Q3/Q1)

kmq=log(log(1/4)/log(3/4))/log(Q3/Q1);kmq

cmq=Q2/log(2)^(1/kmq);cmq

 

 

#  10 - Wind Solar geospatial distribution:

 

local_options <- options()

library(sf)

library(dplyr)

library(ggplot2)

library(h3jsr)

options(stringsAsFactors = FALSE)

#

# sCRIPT     : https://cran.r-project.org/web/packages/h3jsr/vignettes/intro-to-h3jsr.html

# WIND DATA  : https://globalwindatlas.info/en

# SOLAR DATA : https://globalsolaratlas.info/map

# SOLAR ENERGY ANALYSIS              

#

#   Data satellite

# https://globalsolaratlas.info/download/djibouti

# https://re.jrc.ec.europa.eu/pvg_tools/en/tools.html#api_5.1

# https://nsrdb.nrel.gov/data-viewer

# https://www.soda-pro.com/web-services/radiation/helioclim-1

# https://cds.climate.copernicus.eu/cdsapp#!/yourrequests?tab=form

# https://re.jrc.ec.europa.eu/pvg_tools/en/tools.html

 

 

#  11 - EXTRACTION NETCDF - OPEN GRIB and NETCDF:

 

library(ncdf4)

library(raster)

library(rgdal)

library(ggplot2)

library(ncdf4)

library(ncdf4.helpers)

 library(PCICt)

library("lubridate")

#

getwd() #

setwd("C:/Abdi-Basid ADAN/0.Doc.OnGoing/2.Energy II/Solar Data CERD/z Djibouti Airort for Data Validataion/ERA5")

#

nc_fname <- "2021ARTA.nc"

nc_ds <- nc_open(nc_fname); print(nc_ds )

#

#  AFTER:  short----

dim_lon <- ncvar_get(nc_ds, "longitude")

dim_lat <- ncvar_get(nc_ds, "latitude")

dim_time <- ncvar_get(nc_ds, "time")

dim_var1 <- ncvar_get(nc_ds, "msdwswrf")

dim_var2 <- ncvar_get(nc_ds, "msdrswrf")

#

# t_units <- ncatt_get(nc_ds, "time", "units")

# t_ustr <- strsplit(t_units$value, " ")

# t_dstr <- strsplit(unlist(t_ustr)[3], "-")

# date <- ymd(t_dstr) + dseconds(dim_time)

# nc_df <- data.frame(cbind(dim_var1, dim_var2))

print(nc_ds)

write.table(dim_var1, "2022- DOW.XLS", row.names=FALSE, sep="\t")

getwd()

#

getwd()

setwd("C:/Abdi-Basid ADAN/0.Doc.OnGoing/2.Energy II/Solar Data CERD/z Djibouti Airort for Data Validataion/ERA5")

#

GRIB<-brick("0f190f5-47ef-4c23-aca7-ba0a2497d9f8.grib")

GRIB<-as.array(GRIB)

write.table(GRIB, "data.xlsx",row.names=FALSE, col.names=FALSE)

#

#

nc_data <- nc_open('adaptor.mars.internal-1676403515.8398063-23591-7-728b49b6-b956-4fff-86f8-d18a466de5ff.nc')

GRIB<-as.array(nc_data)

#

lon <- ncvar_get(GRIB, varid = "longitude")

lat <- ncvar_get(GRIB, varid = "latitude")

GRIB$dim$time$units

#

var1<- ncvar_get(GRIB, "msdrswrf");var1_time <- nc.get.time.series(GRIB,v = "var1",time.dim.name = "time")

var2<- ncvar_get(GRIB, "msdwswrf");var2_time <- nc.get.time.series(GRIB,v = "var2",time.dim.name = "time")

#

write.table(var1, "data.csv",row.names=FALSE, col.names=FALSE)

#https://cran.r-project.org/web/packages/futureheatwaves/vignettes/starting_from_netcdf.html#:~:text=You%20can%20read%20netCDF%20data,connection%20to%20a%20netCDF%20file.

#https://help.marine.copernicus.eu/en/articles/6328012-how-to-convert-netcdf-to-csv-using-r

#https://rpubs.com/boyerag/297592

 

 

 

# 12 -  TECHNO ECONOMIC ANALYSIS:

#

# COST OF PV SOLAR [CRYST SILLICONE]

#

SP = 10*10^3     # Solar Nominal Power in kW

CFS = 0.81       # Capacity Factor

SI =2363.253     # Solar Irradiance

n = 0.152        # Electricity Efficiency

H = 8760

A = (SP*CFS*H) / (n*SI) ; round(A, 3) # AREA_m²

#

Eg=SI*n*CFS*A; round(Eg, 3) # PVoutput_kWh

(10*10^3)*10*365            # Validation Output

#

UP= 2021.30         # 1130 # Cost Unite Price

I0=UP*10*10^3       # Investment expenditures

COM=0.015*I0        # Annual operation cost in $ in year

Eg                  # Annual electricity output in kWh in year

i= 0.095            # Discounting rate # https://banque-centrale.dj/wp-content/uploads/2022/12/Rapport-annuel-2021-BCD.pdf

T= 25               # Economic lifetime in year

#

COMt =   (COM/(1+i)^1) +  (COM/(1+i)^2) +  (COM/(1+i)^3) +  (COM/(1+i)^4) +  (COM/(1+i)^5)      +

  (COM/(1+i)^6) +  (COM/(1+i)^7) +  (COM/(1+i)^8) +  (COM/(1+i)^9) +  (COM/(1+i)^10)     +

  (COM/(1+i)^11) + (COM/(1+i)^12) + (COM/(1+i)^13) + (COM/(1+i)^14) + (COM/(1+i)^15)     +

  (COM/(1+i)^16) + (COM/(1+i)^17) + (COM/(1+i)^18) + (COM/(1+i)^19) + (COM/(1+i)^20)     +

  (COM/(1+i)^21) + (COM/(1+i)^22) + (COM/(1+i)^23) + (COM/(1+i)^24) + (COM/(1+i)^25)

round(COMt,3)

#

deg = 0.9/100

Eg=SI*n*CFS*A; round(Eg, 3)

Egt =   ((Eg*(1-deg)^0)/(1+i)^1) +   ((Eg*(1-deg)^1)/(1+i)^2) +   ((Eg*(1-deg)^2)/(1+i)^3) +   ((Eg*(1-deg)^3)/(1+i)^4) +   ((Eg*(1-deg)^4)/(1+i)^5)    +

  ((Eg*(1-deg)^5)/(1+i)^6) +   ((Eg*(1-deg)^6)/(1+i)^7) +   ((Eg*(1-deg)^7)/(1+i)^8) +   ((Eg*(1-deg)^8)/(1+i)^9) +   ((Eg*(1-deg)^9)/(1+i)^10)   +

  ((Eg*(1-deg)^10)/(1+i)^11) + ((Eg*(1-deg)^11)/(1+i)^12) + ((Eg*(1-deg)^12)/(1+i)^13) + ((Eg*(1-deg)^13)/(1+i)^14) + ((Eg*(1-deg)^14)/(1+i)^15)  +

  ((Eg*(1-deg)^15)/(1+i)^16) + ((Eg*(1-deg)^16)/(1+i)^17) + ((Eg*(1-deg)^17)/(1+i)^18) + ((Eg*(1-deg)^18)/(1+i)^19) + ((Eg*(1-deg)^19)/(1+i)^20)  +

  ((Eg*(1-deg)^20)/(1+i)^21) + ((Eg*(1-deg)^21)/(1+i)^22) + ((Eg*(1-deg)^22)/(1+i)^23) + ((Eg*(1-deg)^23)/(1+i)^24) + ((Eg*(1-deg)^24)/(1+i)^25)

round(Egt,3)

#

LCOEpv= (I0 + COMt)/Egt ;round(LCOEpv,3)

#

# https://sci-hub.st/https://doi.org/10.1016/j.desal.2020.114627

# COST OF CSP SOLAR [CRS]

#

SP = 10*10^3                           # Solar Nominal Power in kW

CFS = 0.86 #(0.45+0.95)/2 # 0.616      # Capacity Factor

SI =2350.833                           # Solar Irradiance

n = (8+24/2) /100                      # Electricity Efficiency

H = 8760

A = (SP*CFS*H) / (n*SI) ; round(A, 3) #AREA_m²

#

Eg=SI*n*CFS*A; round(Eg, 3) # CSPoutput_kWh

(10*10^3)*10*365            # Validation Output

#

#

UP = 3674.36

I0=UP*10*10^3     # Investment expenditures CAPEX

COM=0.02*I0       # Annual operation cost in $ in year

Eg                # Annual electricity output in kWh in year

i= 0.095          # Discounting rate # https://banque-centrale.dj/wp-content/uploads/2022/12/Rapport-annuel-2021-BCD.pdf

T= 25             # Economic lifetime in year

#

COMt =   (COM/(1+i)^1) +  (COM/(1+i)^2) +  (COM/(1+i)^3) +  (COM/(1+i)^4) +  (COM/(1+i)^5)      +

  (COM/(1+i)^6) +  (COM/(1+i)^7) +  (COM/(1+i)^8) +  (COM/(1+i)^9) +  (COM/(1+i)^10)     +

  (COM/(1+i)^11) + (COM/(1+i)^12) + (COM/(1+i)^13) + (COM/(1+i)^14) + (COM/(1+i)^15)     +

  (COM/(1+i)^16) + (COM/(1+i)^17) + (COM/(1+i)^18) + (COM/(1+i)^19) + (COM/(1+i)^20)     +

  (COM/(1+i)^21) + (COM/(1+i)^22) + (COM/(1+i)^23) + (COM/(1+i)^24) + (COM/(1+i)^25)

round(COMt,3)

#

deg = 0.2/100

Eg=SI*n*CFS*A; round(Eg, 3)

Egt =   ((Eg*(1-deg)^0)/(1+i)^1) +   ((Eg*(1-deg)^1)/(1+i)^2) +   ((Eg*(1-deg)^2)/(1+i)^3) +   ((Eg*(1-deg)^3)/(1+i)^4) +   ((Eg*(1-deg)^4)/(1+i)^5)    +

  ((Eg*(1-deg)^5)/(1+i)^6) +   ((Eg*(1-deg)^6)/(1+i)^7) +   ((Eg*(1-deg)^7)/(1+i)^8) +   ((Eg*(1-deg)^8)/(1+i)^9) +   ((Eg*(1-deg)^9)/(1+i)^10)   +

  ((Eg*(1-deg)^10)/(1+i)^11) + ((Eg*(1-deg)^11)/(1+i)^12) + ((Eg*(1-deg)^12)/(1+i)^13) + ((Eg*(1-deg)^13)/(1+i)^14) + ((Eg*(1-deg)^14)/(1+i)^15)  +

  ((Eg*(1-deg)^15)/(1+i)^16) + ((Eg*(1-deg)^16)/(1+i)^17) + ((Eg*(1-deg)^17)/(1+i)^18) + ((Eg*(1-deg)^18)/(1+i)^19) + ((Eg*(1-deg)^19)/(1+i)^20)  +

  ((Eg*(1-deg)^20)/(1+i)^21) + ((Eg*(1-deg)^21)/(1+i)^22) + ((Eg*(1-deg)^22)/(1+i)^23) + ((Eg*(1-deg)^23)/(1+i)^24) + ((Eg*(1-deg)^24)/(1+i)^25)

round(Egt,3)

#

LCOEcrs= (I0 + COMt)/Egt ;round(LCOEcrs,3)

#

# https://sci-hub.st/https://doi.org/10.1016/j.enpol.2010.01.041

# https://sci-hub.st/10.1016/j.rser.2019.109279 (page 5)

# https://sci-hub.st/https://doi.org/10.1016/j.rser.2012.11.082

# https://sci-hub.st/http://dx.doi.org/10.2139/ssrn.2050351

#

# COST OF CSP SOLAR [PTC]

SP = 10*10^3                           # Solar Nominal Power in kW

CFS = 0.80# (0.45+0.95)/2 # 0.616      # Capacity Factor

SI =2350.833                           # Solar Irradiance

n = (10+20/2) /100                     # Electricity Efficiency

H = 8760

A = (SP*CFS*H) / (n*SI) ; round(A, 3) #AREA_m²

#

Eg=SI*n*CFS*A; round(Eg, 3) # CSPoutput_kWh

(10*10^3)*10*365            # Validation Output

#

UP = 3674.36

I0=UP*10*10^3     # Investment expenditures

COM=0.02*I0       # Annual operation cost in $ in year

Eg                # Annual electricity output in kWh in year

i= 0.095          # Discounting rate # https://banque-centrale.dj/wp-content/uploads/2022/12/Rapport-annuel-2021-BCD.pdf

T= 25             # Economic lifetime in year

#

COMt =   (COM/(1+i)^1) +  (COM/(1+i)^2) +  (COM/(1+i)^3) +  (COM/(1+i)^4) +  (COM/(1+i)^5)      +

  (COM/(1+i)^6) +  (COM/(1+i)^7) +  (COM/(1+i)^8) +  (COM/(1+i)^9) +  (COM/(1+i)^10)     +

  (COM/(1+i)^11) + (COM/(1+i)^12) + (COM/(1+i)^13) + (COM/(1+i)^14) + (COM/(1+i)^15)     +

  (COM/(1+i)^16) + (COM/(1+i)^17) + (COM/(1+i)^18) + (COM/(1+i)^19) + (COM/(1+i)^20)     +

  (COM/(1+i)^21) + (COM/(1+i)^22) + (COM/(1+i)^23) + (COM/(1+i)^24) + (COM/(1+i)^25)

round(COMt,3)

#

deg = 0.2/100

Eg=SI*n*CFS*A; round(Eg, 3)

Egt =   ((Eg*(1-deg)^0)/(1+i)^1) +   ((Eg*(1-deg)^1)/(1+i)^2) +   ((Eg*(1-deg)^2)/(1+i)^3) +   ((Eg*(1-deg)^3)/(1+i)^4) +   ((Eg*(1-deg)^4)/(1+i)^5)    +

  ((Eg*(1-deg)^5)/(1+i)^6) +   ((Eg*(1-deg)^6)/(1+i)^7) +   ((Eg*(1-deg)^7)/(1+i)^8) +   ((Eg*(1-deg)^8)/(1+i)^9) +   ((Eg*(1-deg)^9)/(1+i)^10)   +

  ((Eg*(1-deg)^10)/(1+i)^11) + ((Eg*(1-deg)^11)/(1+i)^12) + ((Eg*(1-deg)^12)/(1+i)^13) + ((Eg*(1-deg)^13)/(1+i)^14) + ((Eg*(1-deg)^14)/(1+i)^15)  +

  ((Eg*(1-deg)^15)/(1+i)^16) + ((Eg*(1-deg)^16)/(1+i)^17) + ((Eg*(1-deg)^17)/(1+i)^18) + ((Eg*(1-deg)^18)/(1+i)^19) + ((Eg*(1-deg)^19)/(1+i)^20)  +

  ((Eg*(1-deg)^20)/(1+i)^21) + ((Eg*(1-deg)^21)/(1+i)^22) + ((Eg*(1-deg)^22)/(1+i)^23) + ((Eg*(1-deg)^23)/(1+i)^24) + ((Eg*(1-deg)^24)/(1+i)^25)

round(Egt,3)

#

LCOEptc= (I0 + COMt)/Egt ;round(LCOEptc,3)

#

# COST OF PV-CSP SOLAR [PV-CRS]

#

SPcrs = 5*10^3;SPpv = 5*10^3        # Solar Nominal Power in kW

CFS = 0.9                           # Capacity Factor

DNI =2350.833; GHI=2363.253         # Solar Irradiance

ncrs = (8+24/2) /100;  npv = 0.152  # Electricity Efficiency

H = 8760

A = ((SPcrs+SPpv)*CFS*H) / ((ncrs*DNI)+(npv*GHI)/2) ; round(A, 3) #AREA_m²

#

Eg= ((DNI*ncrs)+(GHI*npv)/2)* CFS*A; round(Eg, 3) # CSPoutput_kWh

(10*10^3)*10*365                                  # Validation Output

#

UPcrs = 3674.36; UPpv = 2021.30

I0crs=(UPcrs*5*10^3); I0pv=(UPpv*5*10^3);I0=I0crs+I0pv     # Investment expenditures

COMcrs=0.02*I0crs;COMpv=0.015*I0pv;COM=COMpv+COMcrs        # Annual operation cost in $ in year

Eg                # Annual electricity output in kWh in year

i= 0.095          # Discounting rate # https://banque-centrale.dj/wp-content/uploads/2022/12/Rapport-annuel-2021-BCD.pdf

T= 25             # Economic lifetime in year

#

COMt =   (COM/(1+i)^1) +  (COM/(1+i)^2) +  (COM/(1+i)^3) +  (COM/(1+i)^4) +  (COM/(1+i)^5)      +

  (COM/(1+i)^6) +  (COM/(1+i)^7) +  (COM/(1+i)^8) +  (COM/(1+i)^9) +  (COM/(1+i)^10)     +

  (COM/(1+i)^11) + (COM/(1+i)^12) + (COM/(1+i)^13) + (COM/(1+i)^14) + (COM/(1+i)^15)     +

  (COM/(1+i)^16) + (COM/(1+i)^17) + (COM/(1+i)^18) + (COM/(1+i)^19) + (COM/(1+i)^20)     +

  (COM/(1+i)^21) + (COM/(1+i)^22) + (COM/(1+i)^23) + (COM/(1+i)^24) + (COM/(1+i)^25)

round(COMt,3)

#

deg = (0.2+0.9)/2/100

Eg= ((DNI*ncrs)+(GHI*npv)/2)* CFS*A; round(Eg, 3)

Egt =   ((Eg*(1-deg)^0)/(1+i)^1) +   ((Eg*(1-deg)^1)/(1+i)^2) +   ((Eg*(1-deg)^2)/(1+i)^3) +   ((Eg*(1-deg)^3)/(1+i)^4) +   ((Eg*(1-deg)^4)/(1+i)^5)    +

  ((Eg*(1-deg)^5)/(1+i)^6) +   ((Eg*(1-deg)^6)/(1+i)^7) +   ((Eg*(1-deg)^7)/(1+i)^8) +   ((Eg*(1-deg)^8)/(1+i)^9) +   ((Eg*(1-deg)^9)/(1+i)^10)   +

  ((Eg*(1-deg)^10)/(1+i)^11) + ((Eg*(1-deg)^11)/(1+i)^12) + ((Eg*(1-deg)^12)/(1+i)^13) + ((Eg*(1-deg)^13)/(1+i)^14) + ((Eg*(1-deg)^14)/(1+i)^15)  +

  ((Eg*(1-deg)^15)/(1+i)^16) + ((Eg*(1-deg)^16)/(1+i)^17) + ((Eg*(1-deg)^17)/(1+i)^18) + ((Eg*(1-deg)^18)/(1+i)^19) + ((Eg*(1-deg)^19)/(1+i)^20)  +

  ((Eg*(1-deg)^20)/(1+i)^21) + ((Eg*(1-deg)^21)/(1+i)^22) + ((Eg*(1-deg)^22)/(1+i)^23) + ((Eg*(1-deg)^23)/(1+i)^24) + ((Eg*(1-deg)^24)/(1+i)^25)

round(Egt,3)

#

LCOEcsp.pv= (I0 + COMt)/Egt ;round(LCOEcsp.pv,3)

# COST OF Wind Turbine

# BEST C and K with RMSE/COR/MBE...etc.

c_scale= 11.42328

k_shape= 3.399165

# Caracteristic Wind Turbine

cutin= 4

cutout= 25

ratedpower= 10

# Capacity Factor

CFW=(exp(-((cutin/c_scale)^k_shape))-exp(-((ratedpower/c_scale)^k_shape)))/((ratedpower/c_scale)^k_shape-(cutin/c_scale)^k_shape)-exp(-((cutout/c_scale)^k_shape)); round(CFW, 3)

# Energy Output

NominalPower = 5200 #kW

TimeW = 20

Egw= 8760*TimeW*NominalPower*CFW; round(Egw, 3)

#

# Cost Analysis

UPw=1600        # $/kW

instCost=0.3    # 30%

COMw=0.25       # 25%

it=0.087        #Interest rate # https://banque-centrale.dj/wp-content/uploads/2022/12/Rapport-annuel-2021-BCD.pdf

LCOEwind=((NominalPower*UPw+(instCost*(UPw*NominalPower)))*(1+(COMw*(((1+it)^TimeW)-1)/(it*(it+1)^TimeW))))/(Egw); round(LCOEwind,3)

 

 

 

 

# 13 -  FINANCIAL ANALYSIS:

 

# https://sci-hub.se/10.1007/3-540-30906-3

#|1] yearly cost of operation of the project NPV  : yearly car/n sinon accumulated

CI =   1600*3400*4           #  initial costs

CAPEX = 28346000  

m =  3.5/100             #  Annual operation and maintenance costs

I=  12.50/100           #  real rate of interest

n = 20                  #  life of the system

#

NPVc = (CAPEX) * ( (1+m)*  ( (((1+I)^n) - 1)  /   (I*((1+I)^n)) )    ); round(NPVc, 3)

#

#

#| Accumulated present value of all benefits :

Ep =  0.117    #   Electricity price  $ per kWh

I1 =  7/100    #   interest rate

I=    5/100    #   real rate of interest

If=   3/100    #   Inflation

es=   2/100    #   real rate of interest

e = (1 + es) * (1 + If) -1;e         # Apparent rate of escalation

Id =  ((1+ I1) / (1+ I) ) -1;Id      # Real rate of discount, adjusted for inflation and escalation

n =   20

cf =  0.25         # capacity factor

PW =  600          # NOMINAL POWER

AEp = PW*8760*cf;AEp   # annual energy production  AEp= 53416220

#

BA = (Ep*AEp) *( ( (((1+Id)^n) - 1)  /   (Id*((1+Id)^n)) )  ); round(BA ,3)

#

#|  Net Present Value :

NPV =  BA  - NPVc; round(NPV,3)

#

#| Benefit cost ratio :

BCR = BA / (NPVc) ; round(BCR,3)

#  A project is acceptable if BCR is greater than 1.

#

#| Pay back period :

m1 = 2/100

Id = 5/100

CI=  2200000

Ep=  7358400

AEp= 0.05

pb = - (log( 1 - ( (Id*CI)/( (Ep*AEp)-(m1*CI) ) )   )  / log(1+Id) )  ; round(pb,3)

#

#|2] TRI IRR #| Internal rate of return :

data = read.table(file("clipboard"),header=TRUE, sep="\t", dec=".", row.names=1)

str(data)

attach(data)

dim(data)

head(data,5)

names(data)

#

# Calculating IRR in R :

#

library(jrvFinance)   # This package has a the irr formula to solve our problem

library(tidyquant)    # general R quant package

library(DT)           # package to display pretty Data tables

library(tibble)

library(dplyr)

#

project1_cf <- tibble(Year = 1:length(Ci),cf = c(Ci) )

project1_cf %>%

  DT::datatable(rownames = FALSE,caption = "Project 1")

 

irr1 <- project1_cf %>%

  select(cf) %>%

  .[[1]] %>%

  irr()

irr_tbl <- tibble(Name = c("Project 1"),

                  IRR = c(irr1))

irr_tbl %>%

  datatable(caption = "Internal rate of returns for the two projects.")

# Newton-Raphson method, IRR : https://rpubs.com/aaronsc32/newton-raphson-method

# https://www.codingfinance.com/post/2018-03-20-irr/

#| Declining balance depreciation

# https://sci-hub.se/10.1007/3-540-30906-3

 

 

 

 

 

# 14 - COST OF GREEN H2:

 

rm(list=ls())

#-

HHV = 39.44 # HHV:MJ = KWh/Kg 142      39.44

LHV = 33.33 # LHV:MJ = KWh/Kg  120       33.33

#-

# Masse dihydrogene H2:

CF_ =  0.7284        # % WIND TURBINE

Eop_=  33182035      # KWh/year 5200 kW/unit

LCOE = 0.054         # $/kWh

Costelty= LCOE*Eop_ ;round(Costelty,3)  # $

#-

Eelzer=    54                                # KWh/Kg

effRect =  0.9                               # rectifier efficiency %

MH2= (Eop_ / Eelzer)*effRect ; round(MH2,3)  # kg/year

MH2/0.08988                                  # Nm3/year | Kg/h = Nm3/h

# Energy Output of the hydrogen production system

H2output= MH2*142           # MJ/Year

AVdenswind=831.1741828      # W/m²

areaswep=12644              # m²

H2input= (AVdenswind*8760/1000)*areaswep

effH2=((H2output/1000)/(H2input* 0.0036 ))*100; round(effH2,3) # %  0.0036GJ/kWh

#-

Eelzer=      54         # KWh/Kg

UCostelzer = 900        # $/KW

RPelzer =    185        # kW

Lfelzer =    20         # year

effelzer=  (LHV/Eelzer);round(effelzer,3)   # %

#-

effRect =  0.9              # rectifier efficiency %

UCostRect= 130*1.19         # $/kW

LftRect=   10               # Years

CostRect=RPelzer*UCostRect; round(CostRect,3) # $

#-

Costelzer = ((UCostelzer*MH2*Lfelzer*Eelzer)/(Lfelzer*8760*CF_*effelzer))+

  ((0.4*UCostelzer*RPelzer)+(0.12*UCostelzer*RPelzer)+(0.04*UCostelzer*RPelzer)+(2*(CostRect+(0.04*CostRect)))) ;round(Costelzer ,3)

#-

LCOEH2= (Costelty + Costelzer)/(Lfelzer*MH2); round(LCOEH2,3)# $/Kg

#

# https://sci-hub.se/http://dx.doi.org/10.1016/j.desal.2017.07.006

# https://sci-hub.st/https://doi.org/10.1016/j.ijhydene.2020.07.050

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2019.05.077

# https://doi.org/10.1016/j.renene.2019.09.079

 

# COST H2 Compressions

# 1Kg H2 = 11.13 NM3  (20°C / 1 atm).

effcomp=0.95    # % compression efficiency

dens=   36      # kg/m3 density of the compressed hydrogen at 800 bar, 25


C

QH2=MH2*effcomp/dens; round(QH2,3) # volume m3/year  of compressed hydrogen

# Totcost=1730000   # $ PLUS Gas holder | 2800 Nm3 capacity

# QH2/2800          # Number of Gas Holder

# 1.05 kWh/kg H2 20 bar to 350 bar  and   1.36 kWh/kg H2 for 700 bar https://www.hydrogen.energy.gov/pdfs/9013_energy_requirements_for_hydrogen_gas_compression.pdf

Ucostcomp= 15000  # $

Scalfact=0.9      #

COMcomp=4/100     # %

Encomp= (0.7+1)/2 # kWh/kg

RPcomp= 10        # kW

effcomp=0.7       # %

liftcoomp= 20     # year

Costcomp= Ucostcomp*  ( ((MH2*Encomp)/8760)/RPcomp )^Scalfact  + (0.04*(Ucostcomp*(((MH2*Encomp)/8760)/RPcomp )^Scalfact));  round(Costcomp,3)

#

# CGH2 storage Hydrogen Storage - above ground type I vessels

capstg= MH2*effcomp                # MH2 kg/year

capstg1= (MH2*142*0.277778)/360    # Mj TO kWh/year

Ucoststg= 15.4                     # $/kWh    (10-19.7)

# Coststg=Ucoststg*(capstg1/2); round(Coststg,3)

Coststg= (14.95*MH2)/2 #  $/kgH2

#  459*capstg   # USD/kg storage

#  800*capstg/2 # USD/kg storage

LCOEH2C=(Costelty + Costelzer + Costcomp+Coststg  )/(Lfelzer*MH2); round(LCOEH2C,3)# $/Kg

# https://www.mdpi.com/1996-1073/15/17/6467

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2006.05.009

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2019.05.077

# https://sci-hub.se/https://doi.org/10.1016/0360-3199(86)90104-7

# https://sci-hub.se/10.1016/j.ijhydene.2010.11.090

# https://sci-hub.se/https://doi.org/10.1016/j.enconman.2021.114125

#https://reader.elsevier.com/reader/sd/pii/S0306261920315750?token=44695E71F9780105912DA4318AA8D47ADE8966578337F50A45CFC055A3FA97AECD491DA1BFB4146EE978EA55D95268B1&originRegion=eu-west-1&originCreation=20230308185325

 

 

 

 

 

 

# 15 - COST OF RO: Reversis Osmosis:

 

FreshH20=((1/0.08988)*MH2)/1000; round(FreshH20,3)  # m3/year

MH2*10.6  # 10.6 kg for 1kg H2

FreshH20/365                      # m3/day

FreshH20/8760                     # m3/day

EltyRO= 4.38*FreshH20             # KWh/m3 to kWh

LftRO= 25                         # Years

# CostRO=81000                    # $

#

UcostRO=  2400           #  ($/m3/d)

Hprod=FreshH20/8760      #  Hourly production in m3/hours

CostRO=24*UcostRO* Hprod; round(CostRO,3)   # $/m3

#

chro =8760*0.03*Hprod     # annual cost of the chemicals

lro =8760*0.05*Hprod      # annual cost of labours

rcro =(0.2*(0.4*CostRO))+(0.1*(0.15*CostRO))+(0.1*(0.15*CostRO)) # annual cost of replacement parts

COMRO=chro+lro+rcro      #

tankcost= 2000           # $ 20m3 tank

FreshH20

#

int=8.7/100       # interest rate % 2021

idp=9.5/100       # discount rate % 2021

ifl=2.5/100       # inflation rate % 2021

i=(idp-ifl)/(1+ifl) # weighted average cost of capital

CRF =(i*((1+i)^LftRO))/((1+i)-1); round(CRF,3) # real discount rate

# https://banque-centrale.dj/wp-content/uploads/2022/12/Rapport-annuel-2021-BCD.pdf

#

CosteltyRO= LCOE*EltyRO   # Cost electricity produced/year

AProd=FreshH20            # annual water production of the plant (m3 /year)

#

LCOERO=((CostRO+tankcost)*CRF +(COMRO+(CosteltyRO)) )/(AProd*LftRO) ; round(LCOERO,3)#$/m3

LCOERO1= (CostRO+COMROT)/AProdT; round(LCOERO1,3)#$/m3

#

COMROT= (COMRO/(1+int)^1)+(COMRO/(1+int)^2)+(COMRO/(1+int)^3)+(COMRO/(1+int)^4)+(COMRO/(1+int)^5) +

  (COMRO/(1+int)^6)+(COMRO/(1+int)^7)+(COMRO/(1+int)^8)+(COMRO/(1+int)^9)+(COMRO/(1+int)^10)      +

  (COMRO/(1+int)^11)+(COMRO/(1+int)^12)+(COMRO/(1+int)^13)+(COMRO/(1+int)^14)+(COMRO/(1+int)^15)  +

  (COMRO/(1+int)^16)+(COMRO/(1+int)^17)+(COMRO/(1+int)^18)+(COMRO/(1+int)^19)+(COMRO/(1+int)^20)  +

  (COMRO/(1+int)^21)+(COMRO/(1+int)^22)+(COMRO/(1+int)^23)+(COMRO/(1+int)^24)+(COMRO/(1+int)^25)

# 

AProdT= (AProd/(1+int)^1)+(AProd/(1+int)^2)+(AProd/(1+int)^3)+(AProd/(1+int)^4)+(AProd/(1+int)^5) +

  (AProd/(1+int)^6)+(AProd/(1+int)^7)+(AProd/(1+int)^8)+(AProd/(1+int)^9)+(AProd/(1+int)^10)      +

  (AProd/(1+int)^11)+(AProd/(1+int)^12)+(AProd/(1+int)^13)+(AProd/(1+int)^14)+(AProd/(1+int)^15)  +

  (AProd/(1+int)^16)+(AProd/(1+int)^17)+(AProd/(1+int)^18)+(AProd/(1+int)^19)+(AProd/(1+int)^20)  +

  (AProd/(1+int)^21)+(AProd/(1+int)^22)+(AProd/(1+int)^23)+(AProd/(1+int)^24)+(AProd/(1+int)^25)

#

Costreverosmo= ((CostRO+tankcost)*CRF +(COMRO+(CosteltyRO) ))

# NegliROcost=   (Costelzer/CostRO)*100; round(NegliROcost,3) # under 1%

CostH2O= LCOERO1*FreshH20; round(CostH2O,3)

LCOEH2C1=(Costelty + Costelzer + Costcomp+Coststg+CostH2O  )/(Lfelzer*MH2); round(LCOEH2C1,3)# $/Kg

#

# http://dx.doi.org/10.1016/j.desal.2017.07.006

# https://www.mdpi.com/2071-1050/11/6/1691

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2018.02.144

 

 

 

 

# 16 - COST OF Ammonia NH3 Synthesis Loop – Haber Bosch synthesis:

#

IH2=  177  # kg of H2  = 1kg NH3  mdpi

IN2=  823  # kg of N2  = 1kg NH3  mdpi

MAH2= MH2/IH2; round(MAH2,3)            # Apport pour transformation  H2

MAN2= (0.823*MAH2)/0.177; round(MAN2,3) # Apport pour transformation  N2

MNH3=round(MAH2,3)            #  kg NH3/year

#

# Synthesis Loop – Haber Bosch synthesis  (HBS) :

MNH3/8760                         # Kg/NH3/h

# TonNH3=IH2*IN2; round(TonNH3,3) #  145,671 kg/H2-N2/ = 1000 kg NH3

UCostNH3= 3500                    #  US$/(kgNH3/h)  # UCostNH3= 378 ($/TON NH3)

h=24

CostNH3=UCostNH3*(MNH3/h) #  US$  CostNH3=UCostNH3*(MNH3/1000)

COMNH3=0.02*CostNH3          #  US$

ELTNH3= 0.64*MNH3            #  kWh/Kg

CosteltyNH3=LCOE*ELTNH3      #  US$

lftHN3=30                    # Year

idp=9.5/100                  # discount rate % 2021

effNH3 = (0.5+0.8)/2         # Capacity factor

#

COMNH3T= (COMNH3/(1+idp)^1)+(COMNH3/(1+idp)^2)+(COMNH3/(1+idp)^3)+(COMNH3/(1+idp)^4)+(COMNH3/(1+idp)^5) +

  (COMNH3/(1+idp)^6)+(COMNH3/(1+idp)^7)+(COMNH3/(1+idp)^8)+(COMNH3/(1+idp)^9)+(COMNH3/(1+idp)^10)      +

  (COMNH3/(1+idp)^11)+(COMNH3/(1+idp)^12)+(COMNH3/(1+idp)^13)+(COMNH3/(1+idp)^14)+(COMNH3/(1+idp)^15)  +

  (COMNH3/(1+idp)^16)+(COMNH3/(1+idp)^17)+(COMNH3/(1+idp)^18)+(COMNH3/(1+idp)^19)+(COMNH3/(1+idp)^20)  +

  (COMNH3/(1+idp)^21)+(COMNH3/(1+idp)^22)+(COMNH3/(1+idp)^23)+(COMNH3/(1+idp)^24)+(COMNH3/(1+idp)^25)  +

  (COMNH3/(1+idp)^26)+(COMNH3/(1+idp)^27)+(COMNH3/(1+idp)^28)+(COMNH3/(1+idp)^29)+(COMNH3/(1+idp)^30) 

#

MNH3T= (MNH3/(1+idp)^1)+(MNH3/(1+idp)^2)+(MNH3/(1+idp)^3)+(MNH3/(1+idp)^4)+(MNH3/(1+idp)^5)  +

  (MNH3/(1+idp)^6)+(MNH3/(1+idp)^7)+(MNH3/(1+idp)^8)+(MNH3/(1+idp)^9)+(MNH3/(1+idp)^10)      +

  (MNH3/(1+idp)^11)+(MNH3/(1+idp)^12)+(MNH3/(1+idp)^13)+(MNH3/(1+idp)^14)+(MNH3/(1+idp)^15)  +

  (MNH3/(1+idp)^16)+(MNH3/(1+idp)^17)+(MNH3/(1+idp)^18)+(MNH3/(1+idp)^19)+(MNH3/(1+idp)^20)  +

  (MNH3/(1+idp)^21)+(MNH3/(1+idp)^22)+(MNH3/(1+idp)^23)+(MNH3/(1+idp)^24)+(MNH3/(1+idp)^25)  +

  (MNH3/(1+idp)^26)+(MNH3/(1+idp)^27)+(MNH3/(1+idp)^28)+(MNH3/(1+idp)^29)+(MNH3/(1+idp)^30) 

#

CosteltyNH3T= (CosteltyNH3/(1+idp)^1)+(CosteltyNH3/(1+idp)^2)+(CosteltyNH3/(1+idp)^3)+(CosteltyNH3/(1+idp)^4)+(CosteltyNH3/(1+idp)^5)  +

  (CosteltyNH3/(1+idp)^6)+(CosteltyNH3/(1+idp)^7)+(CosteltyNH3/(1+idp)^8)+(CosteltyNH3/(1+idp)^9)+(CosteltyNH3/(1+idp)^10)      +

  (CosteltyNH3/(1+idp)^11)+(CosteltyNH3/(1+idp)^12)+(CosteltyNH3/(1+idp)^13)+(CosteltyNH3/(1+idp)^14)+(CosteltyNH3/(1+idp)^15)  +

  (CosteltyNH3/(1+idp)^16)+(CosteltyNH3/(1+idp)^17)+(CosteltyNH3/(1+idp)^18)+(CosteltyNH3/(1+idp)^19)+(CosteltyNH3/(1+idp)^20)  +

  (CosteltyNH3/(1+idp)^21)+(CosteltyNH3/(1+idp)^22)+(CosteltyNH3/(1+idp)^23)+(CosteltyNH3/(1+idp)^24)+(CosteltyNH3/(1+idp)^25)  +

  (CosteltyNH3/(1+idp)^26)+(CosteltyNH3/(1+idp)^27)+(CosteltyNH3/(1+idp)^28)+(CosteltyNH3/(1+idp)^29)+(CosteltyNH3/(1+idp)^30) 

 

# Cryogenic distillation - Air Separation Unit (ASU):

IH2=  177  # kg of H2  = 1kg NH3 mdpi

IN2=  823  # kg of N2  = 1kg NH3 mdpi

# MNH3N2= MH2/IN2; round(MNH3,3)  #  Kg/NH3/Year

MAN2= (0.823*MAH2)/0.177          # Apport pour transformation  N2

MNH3N2=round(MAN2,3)

#

ELTN2= 0.64*MNH3N2              #  kWh/kgNH3

CosteltyN2=LCOE*ELTN2           #  US$

idp=9.5/100                     #  discount rate % 2021

lftN2=30                        #  Year

UCostN2= (3500/2)               #  US$/(kgNH3/h) en considerons le NH3/2 VS 150$ IN  https://authors.library.caltech.edu/113944/1/cost-and-performance-targets-for-fully-electrochemical-ammonia-production-under-flexible-operation.pdf

CostN2=UCostN2*(MNH3N2/h)       #  US$

COMN2=0.02*CostN2               #  US$

# https://www.frontiersin.org/articles/10.3389/fmech.2020.00021/full

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2019.11.028

# https://www.sciencedirect.com/science/article/pii/S2589004222009968

#

COMN2T= (COMN2/(1+idp)^1)+(COMN2/(1+idp)^2)+(COMN2/(1+idp)^3)+(COMN2/(1+idp)^4)+(COMN2/(1+idp)^5) +

  (COMN2/(1+idp)^6)+(COMN2/(1+idp)^7)+(COMN2/(1+idp)^8)+(COMN2/(1+idp)^9)+(COMN2/(1+idp)^10)      +

  (COMN2/(1+idp)^11)+(COMN2/(1+idp)^12)+(COMN2/(1+idp)^13)+(COMN2/(1+idp)^14)+(COMN2/(1+idp)^15)  +

  (COMN2/(1+idp)^16)+(COMN2/(1+idp)^17)+(COMN2/(1+idp)^18)+(COMN2/(1+idp)^19)+(COMN2/(1+idp)^20)  +

  (COMN2/(1+idp)^21)+(COMN2/(1+idp)^22)+(COMN2/(1+idp)^23)+(COMN2/(1+idp)^24)+(COMN2/(1+idp)^25)  +

  (COMN2/(1+idp)^26)+(COMN2/(1+idp)^27)+(COMN2/(1+idp)^28)+(COMN2/(1+idp)^29)+(COMN2/(1+idp)^30) 

#

MNH3N2T= (MNH3N2/(1+idp)^1)+(MNH3N2/(1+idp)^2)+(MNH3N2/(1+idp)^3)+(MNH3N2/(1+idp)^4)+(MNH3N2/(1+idp)^5)  +

  (MNH3N2/(1+idp)^6)+(MNH3N2/(1+idp)^7)+(MNH3N2/(1+idp)^8)+(MNH3N2/(1+idp)^9)+(MNH3N2/(1+idp)^10)      +

  (MNH3N2/(1+idp)^11)+(MNH3N2/(1+idp)^12)+(MNH3N2/(1+idp)^13)+(MNH3N2/(1+idp)^14)+(MNH3N2/(1+idp)^15)  +

  (MNH3N2/(1+idp)^16)+(MNH3N2/(1+idp)^17)+(MNH3N2/(1+idp)^18)+(MNH3N2/(1+idp)^19)+(MNH3N2/(1+idp)^20)  +

  (MNH3N2/(1+idp)^21)+(MNH3N2/(1+idp)^22)+(MNH3N2/(1+idp)^23)+(MNH3N2/(1+idp)^24)+(MNH3N2/(1+idp)^25)  +

  (MNH3N2/(1+idp)^26)+(MNH3N2/(1+idp)^27)+(MNH3N2/(1+idp)^28)+(MNH3N2/(1+idp)^29)+(MNH3N2/(1+idp)^30) 

#

CosteltyN2T= (CosteltyN2/(1+idp)^1)+(CosteltyN2/(1+idp)^2)+(CosteltyN2/(1+idp)^3)+(CosteltyN2/(1+idp)^4)+(CosteltyN2/(1+idp)^5)  +

  (CosteltyN2/(1+idp)^6)+(CosteltyN2/(1+idp)^7)+(CosteltyN2/(1+idp)^8)+(CosteltyN2/(1+idp)^9)+(CosteltyN2/(1+idp)^10)      +

  (CosteltyN2/(1+idp)^11)+(CosteltyN2/(1+idp)^12)+(CosteltyN2/(1+idp)^13)+(CosteltyN2/(1+idp)^14)+(CosteltyN2/(1+idp)^15)  +

  (CosteltyN2/(1+idp)^16)+(CosteltyN2/(1+idp)^17)+(CosteltyN2/(1+idp)^18)+(CosteltyN2/(1+idp)^19)+(CosteltyN2/(1+idp)^20)  +

  (CosteltyN2/(1+idp)^21)+(CosteltyN2/(1+idp)^22)+(CosteltyN2/(1+idp)^23)+(CosteltyN2/(1+idp)^24)+(CosteltyN2/(1+idp)^25)  +

  (CosteltyN2/(1+idp)^26)+(CosteltyN2/(1+idp)^27)+(CosteltyN2/(1+idp)^28)+(CosteltyN2/(1+idp)^29)+(CosteltyN2/(1+idp)^30) 

#

# https://sci-hub.st/https://doi.org/10.1016/j.ijhydene.2020.07.050

# https://reader.elsevier.com/reader/sd/pii/S0196890422011918?token=A7785FFA567B7BFE5F34C496E49417342B715E93B33961256F86B51C894B84662FDDBCA93C60A5720683E967E037D768&originRegion=eu-west-1&originCreation=20230302190319

# https://reader.elsevier.com/reader/sd/pii/S0306261920315750?token=C64A094323493FDA541D94EE5057A3AE54BB3F890BFC8705092E40383E4B84FD63B4C2A313FB3FDF4739C794ABCB60DA&originRegion=eu-west-1&originCreation=20230302185312

# https://sci-hub.se/10.3390/chemengineering3040087

# https://sci-hub.se/https://doi.org/10.1016/j.renene.2020.05.041

# https://sci-hub.st/https://doi.org/10.1016/j.est.2020.102201

# https://doi.org/10.1016/j.apenergy.2019.114135

# https://doi.org/10.1016/j.jclepro.2020.121627

# https://sci-hub.se/https://doi.org/10.1016/j.compchemeng.2020.106785

# https://reader.elsevier.com/reader/sd/pii/S019689042200108X?token=C09A58ACD295C3B3536C09776BB9024F90FF5557B2787E74DFF8DCE9A75432492405ABAC53A8F6B741F50AFFE8A922B5&originRegion=eu-west-1&originCreation=20230228200117

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2021.05.203

#

# COMPRESSION OF NH3 COST AND CAPACITY ANALYSIS

Ucostcomp= 15000  # $

Scalfact=0.9      #

COMcomp=4/100     # %

Encomp= (0.7+1)/2 # kWh/kg

RPcomp= 10        # kW

effcomp=0.7       # %

Costcomp= Ucostcomp*  ( ((MH2*Encomp)/8760)/RPcomp )^Scalfact  + (0.04*Costcomp);  round(Costcomp,3)

# Ammonia Storage Tank – low temperature refrigerated storage

UCostNH3Stg =     82  # USD/TNH3

CosteltyNH3stg=  (0.03*LCOE*(MNH3+MNH3N2) )  #kWh/kg NH3

COMNH3stg=       (0.02*((MNH3+MNH3N2)/1000)*UCostNH3Stg )

# CostNH3Stg = ((MNH3/1000)*UCostNH3Stg) + CosteltyNH3stg + COMNH3stg; round(CostNH3Stg,3)

CostNH3Stg= 0.54*MNH3

#

CostNH3StgT= (CostNH3Stg/(1+idp)^1)+(CostNH3Stg/(1+idp)^2)+(CostNH3Stg/(1+idp)^3)+(CostNH3Stg/(1+idp)^4)+(CostNH3Stg/(1+idp)^5)  +

  (CostNH3Stg/(1+idp)^6)+(CostNH3Stg/(1+idp)^7)+(CostNH3Stg/(1+idp)^8)+(CostNH3Stg/(1+idp)^9)+(CostNH3Stg/(1+idp)^10)      +

  (CostNH3Stg/(1+idp)^11)+(CostNH3Stg/(1+idp)^12)+(CostNH3Stg/(1+idp)^13)+(CostNH3Stg/(1+idp)^14)+(CostNH3Stg/(1+idp)^15)  +

  (CostNH3Stg/(1+idp)^16)+(CostNH3Stg/(1+idp)^17)+(CostNH3Stg/(1+idp)^18)+(CostNH3Stg/(1+idp)^19)+(CostNH3Stg/(1+idp)^20)  +

  (CostNH3Stg/(1+idp)^21)+(CostNH3Stg/(1+idp)^22)+(CostNH3Stg/(1+idp)^23)+(CostNH3Stg/(1+idp)^24)+(CostNH3Stg/(1+idp)^25)  +

  (CostNH3Stg/(1+idp)^26)+(CostNH3Stg/(1+idp)^27)+(CostNH3Stg/(1+idp)^28)+(CostNH3Stg/(1+idp)^29)+(CostNH3Stg/(1+idp)^30) 

 

# 46600*(MNH3^ 0.8636) + 536.9

# 182 day = 0.54$/kg NH3 et 14.95$/kgH2

#

# https://reader.elsevier.com/reader/sd/pii/S0360128517302320?token=F66F9D6F6DE7B21170FF3C07E6565C42054D4773AA7DF24650D4111F20930ED4C3C2042C92C500634EEAECE69783E0BB&originRegion=eu-west-1&originCreation=20230308200723

# https://reader.elsevier.com/reader/sd/pii/S0196890422011918?token=4370033D9407F0EA47D1EDA63800964875414F1656D45067BA68A0FAF42204D0D5A6A065931A74834D21E9DCABFA9F87&originRegion=eu-west-1&originCreation=20230304200434

# https://reader.elsevier.com/reader/sd/pii/S0306261920315750?token=0FA270D57D4552998DC154169C907445F196FC1AAE6ABC12840BD4AB7E92603E8429A0D9699E666378BCE6BB15DC1EFE&originRegion=eu-west-1&originCreation=20230304200644

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2018.06.121

#

LCOENH3=( CostNH3 + CosteltyNH3T + COMNH3T + COMN2T + CostN2 + CosteltyN2T + CostNH3StgT + (2*Costcomp) )/ (MNH3T)

# LCOENH3=( CostNH3 + CosteltyNH3T + COMNH3T + COMN2T + CostN2 + CosteltyN2T + CostNH3Stg + (2*Costcomp) )/ (MNH3*lftHN3)

round(LCOENH3,3)

#  $ 700 - 1400 per tonne a

# https://reader.elsevier.com/reader/sd/pii/S2589004222009968?token=2FB83A58CD910EDBB392DC03F9F1BC7ED0F8FE32529AEC36B706AE03B186BD9A62FA0DE9D5EAB8E901AFE34EBA8273C3&originRegion=eu-west-1&originCreation=20230306123649

# https://energypost.eu/renewable-ammonias-role-in-reducing-dependence-on-gas/#:~:text=Today's%20cost%20of%20renewable%20ammonia,USD%20610%2Ft%20by%202050.

 

 

 

 

 

 

 

 

 

 

 

 

 

# 17 - LH2-COST Liquefaction of hydrogen cycle LHG # LNG = Fischer-Tropsch :

 

EltyLH2= 11*MH2                  #  kWh

CosteltyLH2=LCOE*EltyLH2         #  US$

idp=9.5/100                      #  discount rate % 2021

lftLH2=30                        #  Year

CapacbaseLH2=30000               #  kg/day

capitbaseLH2= 40000000           #  US$

scalfact=0.57                    #

CostLH2= capitbaseLH2*((MH2/365)/CapacbaseLH2)^scalfact  ;  round(CostLH2,3)

COMLH2=(4/100) *(COMLH2*(capitbaseLH2*((MH2/365)/CapacbaseLH2)^scalfact ))

effLH2=(0.3+0.84)/2  # liquefaction efficiency  84- 30 %

ProdLH2=effLH2*MH2

# https://www1.eere.energy.gov/hydrogenandfuelcells/analysis/pdfs/paster_h2_delivery.pdf

# https://global.kawasaki.com/en/corp/rd/magazine/176/pdf/n176en10.pdf

#

CosteltyLH2T= (CosteltyLH2/(1+idp)^1)+(CosteltyLH2/(1+idp)^2)+(CosteltyLH2/(1+idp)^3)+(CosteltyLH2/(1+idp)^4)+(CosteltyLH2/(1+idp)^5) +

  (CosteltyLH2/(1+idp)^6)+(CosteltyLH2/(1+idp)^7)+(CosteltyLH2/(1+idp)^8)+(CosteltyLH2/(1+idp)^9)+(CosteltyLH2/(1+idp)^10)      +

  (CosteltyLH2/(1+idp)^11)+(CosteltyLH2/(1+idp)^12)+(CosteltyLH2/(1+idp)^13)+(CosteltyLH2/(1+idp)^14)+(CosteltyLH2/(1+idp)^15)  +

  (CosteltyLH2/(1+idp)^16)+(CosteltyLH2/(1+idp)^17)+(CosteltyLH2/(1+idp)^18)+(CosteltyLH2/(1+idp)^19)+(CosteltyLH2/(1+idp)^20)  +

  (CosteltyLH2/(1+idp)^21)+(CosteltyLH2/(1+idp)^22)+(CosteltyLH2/(1+idp)^23)+(CosteltyLH2/(1+idp)^24)+(CosteltyLH2/(1+idp)^25)  +

  (CosteltyLH2/(1+idp)^26)+(CosteltyLH2/(1+idp)^27)+(CosteltyLH2/(1+idp)^28)+(CosteltyLH2/(1+idp)^29)+(CosteltyLH2/(1+idp)^30)

#

# COMPRESSION OF LH2 COST AND CAPACITY ANALYSIS

Ucostcomp= 15000  # $

Scalfact=0.9      #

COMcomp= 4/100    # %

Encomp= (0.7+1)/2 # kWh/kg

RPcomp= 10        # kW

effcomp=0.7       # %

Costcomp= Ucostcomp*  ( ((MH2*Encomp)/8760)/RPcomp )^Scalfact  + (0.04*Costcomp);  round(Costcomp,3)

#

# LH2 storage Hydrogen Storage - above ground type I vessels

# capstg= MH2*effcomp                # MH2 kg/year

# capstg1= (MH2*142*0.277778)/360    # Mj TO kWh/year

# Ucoststg= 15.4                     # $/kWh    (10-19.7)

# Coststg=Ucoststg*(capstg1/2); round(Coststg,3)

# STOCKAGE OF LH2

#*#

TankLH2= 650000   #$ LH2 tank cost

LH2stg=  90 # $/kgH2

COMstgLH2=4/100

# coststgLH2=LH2stg*MH2+(LH2stg*MH2*COMstgLH2); round(coststgLH2,3)

coststgLH2 = 1.2* (ProdLH2*142*0.277778)/360

#

coststgLH2T= (coststgLH2/(1+idp)^1)+(coststgLH2/(1+idp)^2)+(coststgLH2/(1+idp)^3)+(coststgLH2/(1+idp)^4)+(coststgLH2/(1+idp)^5) +

  (coststgLH2/(1+idp)^6)+(coststgLH2/(1+idp)^7)+(coststgLH2/(1+idp)^8)+(coststgLH2/(1+idp)^9)+(coststgLH2/(1+idp)^10)      +

  (coststgLH2/(1+idp)^11)+(coststgLH2/(1+idp)^12)+(coststgLH2/(1+idp)^13)+(coststgLH2/(1+idp)^14)+(coststgLH2/(1+idp)^15)  +

  (coststgLH2/(1+idp)^16)+(coststgLH2/(1+idp)^17)+(coststgLH2/(1+idp)^18)+(coststgLH2/(1+idp)^19)+(coststgLH2/(1+idp)^20)  +

  (coststgLH2/(1+idp)^21)+(coststgLH2/(1+idp)^22)+(coststgLH2/(1+idp)^23)+(coststgLH2/(1+idp)^24)+(coststgLH2/(1+idp)^25)  +

  (coststgLH2/(1+idp)^26)+(coststgLH2/(1+idp)^27)+(coststgLH2/(1+idp)^28)+(coststgLH2/(1+idp)^29)+(coststgLH2/(1+idp)^30)

#

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2012.07.019

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2021.05.203

# https://www.mdpi.com/1996-1073/15/17/6467

# https://sci-hub.st/https://doi.org/10.1016/S0360-3199(97)00101-8

# https://sci-hub.st/https://doi.org/10.1016/j.ijhydene.2020.07.050

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2006.05.009

# https://sci-hub.se/https://doi.org/10.1016/j.ijrefrig.2019.11.004

# https://www.idealhy.eu/uploads/documents/IDEALHY_XX_Energie-Symposium_2013_web.pdf

# https://iea.blob.core.windows.net/assets/a02a0c80-77b2-462e-a9d5-1099e0e572ce/IEA-The-Future-of-Hydrogen-Assumptions-Annex.pdf

#

COMLH2T= (COMLH2/(1+idp)^1)+(COMLH2/(1+idp)^2)+(COMLH2/(1+idp)^3)+(COMLH2/(1+idp)^4)+(COMLH2/(1+idp)^5) +

  (COMLH2/(1+idp)^6)+(COMLH2/(1+idp)^7)+(COMLH2/(1+idp)^8)+(COMLH2/(1+idp)^9)+(COMLH2/(1+idp)^10)      +

  (COMLH2/(1+idp)^11)+(COMLH2/(1+idp)^12)+(COMLH2/(1+idp)^13)+(COMLH2/(1+idp)^14)+(COMLH2/(1+idp)^15)  +

  (COMLH2/(1+idp)^16)+(COMLH2/(1+idp)^17)+(COMLH2/(1+idp)^18)+(COMLH2/(1+idp)^19)+(COMLH2/(1+idp)^20)  +

  (COMLH2/(1+idp)^21)+(COMLH2/(1+idp)^22)+(COMLH2/(1+idp)^23)+(COMLH2/(1+idp)^24)+(COMLH2/(1+idp)^25)  +

  (COMLH2/(1+idp)^26)+(COMLH2/(1+idp)^27)+(COMLH2/(1+idp)^28)+(COMLH2/(1+idp)^29)+(COMLH2/(1+idp)^30)

#

#

ProdLH2T= (ProdLH2/(1+idp)^1)+(ProdLH2/(1+idp)^2)+(ProdLH2/(1+idp)^3)+(ProdLH2/(1+idp)^4)+(ProdLH2/(1+idp)^5)  +

  (ProdLH2/(1+idp)^6)+(ProdLH2/(1+idp)^7)+(ProdLH2/(1+idp)^8)+(ProdLH2/(1+idp)^9)+(ProdLH2/(1+idp)^10)      +

  (ProdLH2/(1+idp)^11)+(ProdLH2/(1+idp)^12)+(ProdLH2/(1+idp)^13)+(ProdLH2/(1+idp)^14)+(ProdLH2/(1+idp)^15)  +

  (ProdLH2/(1+idp)^16)+(ProdLH2/(1+idp)^17)+(ProdLH2/(1+idp)^18)+(ProdLH2/(1+idp)^19)+(ProdLH2/(1+idp)^20)  +

  (ProdLH2/(1+idp)^21)+(ProdLH2/(1+idp)^22)+(ProdLH2/(1+idp)^23)+(ProdLH2/(1+idp)^24)+(ProdLH2/(1+idp)^25)  +

  (ProdLH2/(1+idp)^26)+(ProdLH2/(1+idp)^27)+(ProdLH2/(1+idp)^28)+(ProdLH2/(1+idp)^29)+(ProdLH2/(1+idp)^30) 

#

# LCOELH2= ( CostLH2 + coststgLH2+ CosteltyLH2+ COMLH2T )/(ProdLH2T) ; round(LCOELH2,3)

LCOELH2= ( CostLH2 + coststgLH2T + CosteltyLH2T + COMLH2T )/(ProdLH2T) ; round(LCOELH2,3)

#  cost of LH2 cargo USD$30/kg

#  $ 14.25 per kilogram of hydrogen

# PURIFICATION SYSTEM   H2 NH3 LH2

#

H2purification= 1.1 # kWh/kgH2

#https://iea.blob.core.windows.net/assets/a02a0c80-77b2-462e-a9d5-1099e0e572ce/IEA-The-Future-of-Hydrogen-Assumptions-Annex.pdf

 

 

 

# 18 - CO2  -  CORBONE EMISSION SAVED AND ECONOMIC :

 

EFfuel= 0.277          # CO2_fuel-oil kCO2/kWh

EFngas= 0.20           # CO2_natural gas  kCO2/kWh

EFcoal=0.8             # CO2_coal t/MWh

Prodtotkwh=            # Yearly production in kWh

  Totemfuel= (EFfuel*Prodtotkwh )/1000  # TonnesCO2/Year

#

PxCO2_2017= 5     # 2017 CO2 prices (USD/tCO2)

PxCO2_2030= 100   # 2030 CO2 prices (USD/tCO2)

PTCO2_2017= PxCO2_2017* Totemfuel   # USD CO2

PTCO2_2030= PxCO2_2030* Totemfuel   # USD CO2

#

# https://iea.blob.core.windows.net/assets/a02a0c80-77b2-462e-a9d5-1099e0e572ce/IEA-The-Future-of-Hydrogen-Assumptions-Annex.pdf

# https://sci-hub.se/https://doi.org/10.1016/j.renene.2019.09.079

# https://reader.elsevier.com/reader/sd/pii/S0360319922016019?token=E9EEE5B9DEB8EB04524A6903FE2F24E1AED1A971306E8F07C54F604FE192B8BF1A6D54C55601BB498F1F6CE5870D5926&originRegion=eu-west-1&originCreation=20230307183207

 

 

 

 

# 19 - Transport Cost OF NH3/ LH2/ Sea /  Rail/  TRUCK:

 

CostTrucks= (4+12)/2         #  4 - 12$/kg

CostTruckDistrbLH2 =  0.13   #  Distribution US$/(kg*100km)

CostTruckDistrbNH3 =  0.12   #  Distribution US$/(kg*100km)

CostPipeline = 4             # <  2     $/kg

RailcostGH2= 21681           # Rail shipment to staging area ($/km)

RailcostlH2= 4152

#

int=8.7/100         # interest rate % 2021

idp=9.5/100         # discount rate % 2021

ifl=2.5/100         # inflation rate % 2021

i=(idp-ifl)/(1+ifl) # weighted average cost of capital

CRF=(i*((1+i)^shiplife))/((1+i)-1); round(CRF,3) # real discount rate/ annuity factor

#

shipcpcost=  39.2*10^6  # EURO

shipopex=  3.5/100      # %

unload_upoadtime=  2    # day

avaibilifacrtor=   0.95 # %

speed=   16             # KNOTS

fuelconsm= 0.0082       # kWhth/DWT-km

fuelprice=(20+80)/2     # €EURO/MWhth  20-80

cargoshare=  0.9        # %

distance= 1000          # km

shiplife= 25            # year

Shipcapacity = 20600    # m3

#

LCOEshipNH3= ( (shipcpcost*(CRF+shipopex))/(365*avaibilifacrtor*Shipcapacity)/(2*distance+(unload_upoadtime*speed)/speed)   )  + ( (fuelconsm*2*distance*fuelprice)/cargoshare )

round(LCOEshipNH3,3) *1.06    # $/tonnes NH3

#  1 € = 1.06                 # (07/03/2023)

#

# JAMILA LH2 carrier ship

shipcpcost1=  500*10^6  # EURO

shipopex1=  2/100       # %

unload_upoadtime1=  1    # day

avaibilifacrtor1=   0.95 # %

speed1=   20             # KNOTS

fuelconsm1= 0.0082       # kWhth/DWT-km

fuelprice1=(20+80)/2     # €EURO/MWhth  20-80

cargoshare1=  0.9        # %

distance1= 1000          # km

shiplife1= 30            # year

Shipcapacity1 = (1136000/1000)*11.126 # tonne to m3 LH2 tanker ship

#

LCOEshipLH2= ( (shipcpcost1*(CRF+shipopex1))/(365*avaibilifacrtor1*Shipcapacity1)/(2*distance1+(unload_upoadtime1*speed1)/speed1)   )  + ( (fuelconsm1*2*distance1*fuelprice1)/cargoshare1 )

round(LCOEshipLH2,3) *1.06    # $/tonnes NH3

# CargoshipLH2= 6    # USD$/kg

#

# https://reader.elsevier.com/reader/sd/pii/S0306261920315750?token=9E119D358BBF9F9935E10039D15435B83C0811AFDE0AED6A8761B47BC3B9F0A74358E047096B65408529EF6C1CF32976&originRegion=eu-west-1&originCreation=20230307184433

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2021.05.002

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2021.05.203

# https://reader.elsevier.com/reader/sd/pii/S0360319922028038?token=AB7838DD3E2866AE23C6804236873880FAC598F888A89DCF166E2DFD0A36748A972FE5C3D4DC7D0E1554E11C2051E9F1&originRegion=eu-west-1&originCreation=20230307182317

# https://www1.eere.energy.gov/hydrogenandfuelcells/analysis/pdfs/paster_h2_delivery.pdf

# https://sci-hub.st/https://doi.org/10.1016/j.ijhydene.2020.07.050

# https://reader.elsevier.com/reader/sd/pii/S0360319922016019?token=5FCE186935791E627AA17267A617E55237367543CE46E25052D7E89E2787884DAECFAC677CB891F2F023BF1D3611E148&originRegion=eu-west-1&originCreation=20230302185054

# https://doi.org/10.1016/j.ijhydene.2022.06.168

# https://sci-hub.st/https://doi.org/10.1016/j.apenergy.2019.114135

# https://reader.elsevier.com/reader/sd/pii/S036031992203659X?token=3124A5D1ADC71A4112A734F2012D0A2D41D99B6984C6A1F5F210BF577D498B20655FC98163C6C09CEB341278AA667F37&originRegion=eu-west-1&originCreation=20230307185136

#  Pipeline capital costs ($/km) $1869 #

#

DiamPip=                     #  0-20 inch diameter in inches

costpip=  1869 (DiamPip)^2   #  USD $/km

round(costpip,3)

# https://sci-hub.se/https://doi.org/10.1016/j.ijhydene.2006.05.009

# NH3 and H2 Fuel Cell Power Generator

# BENEFIT and Economic Risk OF TRANSPORT NH3/LN2

 

 

 

 

#  20 - GEOTHERMAL ENERGY ASSESSMENT:

 

#   USGS VOLUMETRIC METHOD WITH MONTE CARLO SIMULATION

#Interpolation lineaire

#http://www.iotafinance.com/Formule-Interpolation-Lineaire.html

rm(list=ls())

x=276.8;         x1=275;      x2=280;     y1=5946.4;    y2=6416.4

y= (y1+ ((x-x1)/(x2-x1))* (y2-y1)) ;y

rm(list=ls())

# Initial Condition

A=       3.25*10e+5

h=       1175

piw=     973

cw=      4500

pir=     2500

cr=      875

p=       0.0505

ti=      306

tf=      110

rf=      0.125

lf=      0.935

ls=      25  * 365.25 *24*3600

eff=     0.255

#

#  USGS VOLUMETRIC METHOD FOR CAPACITY

#Diametre of Well                 m           300

#Area  m?         70 685.835  #Triangular

#Thickness     m            2 000                                                #Triangular

#Fluid Density                       kg/m3   890 

#Fluid specific Heat Capacity                       J/kg?C  4 800 

#Rock Density           kg/m3                           2 670 

#Rock Specific Heat Capacity                       J/kg?C 900                # Triangular

#ReferenceTemperature       ?C           280                                             # Triangular

#Final Temperature  ?C          40

#Pororsity      --                                    0.1                 #Lognormal

#Well Volum                                                  m3                                 141 371 669.412 

#Rock Volumetric Heat specific       J/m3?C           2 403 000.000 

#Fluid Volumetric Heat specific       J/m3?C    4 272 000.000 

#Temperature of Well                       ?C            240.000

#Rock Energy                                    MJ           73 378 682 264.721 

#Fluid Energy                                                MJ           14 494 554 521.426 

#Total Energy                                                MJ           87 873 236 786.148 

#Recovery Factor                                          %           0.20    # Uniform

#Conversion Efficiency         %         0.110

#Load Factor              %           0.950                       # Triangular

#Life time       yr        25

#Life time                   s          788 940 000 

#Potential Geothermal Capacity      MW       2.579

#

#A=70685.835; h=2000; piw=890; cw=4800; pir=2670; cr=900; p=0.1; ti=280; tf=40;rf=0.2;lf=0.95; ls=25*365.25*24*3600; eff=0.11

#Qr = A*h*(ti-tf)*((1-p)*pir*cr);  Qw = A*h*(ti-tf)*(p*piw*cw)

#Qt=((Qr+Qw)/1000000); Qt

#PPG=(Qt*rf*eff)/(lf*ls); PPG

#A=1146681; h=800; piw=1126; cw=4500; pir=2750; cr=875; p=0.03; ti=320; tf=105;rf=0.175;lf=0.925; ls= 25  * 365.25 *24*3600; eff=0.12

#Qr = A*h*(ti-tf)*((1-p)*pir*cr);  Qw = A*h*(ti-tf)*(p*piw*cw)

#Qt=((Qr+Qw)/1000000); Qt

#PPG=(Qt*rf*eff)/(lf*ls); PPG

#

# RESULTAT METHODE VOLUMETRQIUE:

#*-*-*- 10^6 = 10e+5 = 1e+6

A=3.25*10e+5; h=1175; piw=973; cw=4500; pir=2500; cr=875; p=0.0505; ti=306; tf=110;rf=0.125;lf=0.935; ls= 25  * 365.25 *24*3600; eff=0.255

Qr = A*h*(ti-tf)*((1-p)*pir*cr);  Qw = A*h*(ti-tf)*(p*piw*cw)

Qt=((Qr+Qw)/1000000); Qt

PPG=(Qt*rf*eff)/(lf*ls); PPG

 

w=(Qw/1000000) /Qt;w*100  ; round(w*PPG,3)

r=(Qr/1000000) /Qt;r*100  ; round(r*PPG,3)

PPG=(((Qt))*rf*eff)/(lf*ls); PPG

#

#SIMULATION

#set.seed(123)

set.seed(12345)

# 1

area=runif(1000000, min=2.5 , max=4)

mode <- function(v1) {

  uniqv <- unique(v1)

  uniqv[which.max(tabulate(match(v1, uniqv)))]

}; v1 <-area 

require(EnvStats); sarea=rtri(1000000, min = min(v1), max = max(v1), mode = mode(v1))

round(summary(sarea),3)

#

set.seed(12345)

#  2

thickness=runif(1000000, min=850 , max=1500)

mode <- function(v2) {

  uniqv <- unique(v2)

  uniqv[which.max(tabulate(match(v2, uniqv)))]

}; v2 <-thickness  

require(EnvStats); sthickness=rtri(1000000, min = min(v2), max = max(v2), mode = mode(v2))

round(summary(sthickness),3)

# 3

#Fluid Density kg/m3 : Constant

973

# 4

# Fluid specific Heat Capacity J/kg?C: Constant

4500

# 5

# Rock Density kg/m3 : Constant

2500

#

set.seed(12345)

# 6

rockheat=runif(1000000, min=850 , max=900)

mode <- function(v3) {

  uniqv <- unique(v3)

  uniqv[which.max(tabulate(match(v3, uniqv)))]

}; v3 <-rockheat 

require(EnvStats); srockheat=rtri(1000000, min = min(v3), max = max(v3), mode = mode(v3))

round(summary(srockheat),3)

 

set.seed(12345)

# 7

reftemp=runif(1000000, min=253 , max=359)

mode <- function(v5) {

  uniqv <- unique(v5)

  uniqv[which.max(tabulate(match(v5, uniqv)))]

}; v5 <-reftemp

require(EnvStats); sreftemp=rtri(1000000, min = min(v5), max = max(v5), mode = mode(v5))

round(summary(sreftemp),3)

#

# 8

#Final Temperature ?C : Constant

110

set.seed(12345)

# 9

require(stats)

por=runif(1000000, min=0.01, max=0.1)    # 0.001 to 0.1  max =3 en porosity

spor=rlnorm(1000000, meanlog = mean(log(por)), sdlog = sd(log(por)))

round(summary(spor),3)

#

set.seed(12345)

# 10

recovfact=runif(1000000, min=0.05 , max=0.2)

mode <- function(v4) {

  uniqv <- unique(v4)

  uniqv[which.max(tabulate(match(v4, uniqv)))]

}; v4 <-recovfact 

require(EnvStats); srecovfact=rtri(1000000, min = min(v4), max = max(v4), mode = mode(v4))

round(summary(recovfact),3)

#

set.seed(12345)

# 11

reconff=runif(1000000, min=0.11 , max=0.40)

mode <- function(v8) {

  uniqv <- unique(v8)

  uniqv[which.max(tabulate(match(v8, uniqv)))]

}; v8 <-reconff

require(EnvStats); sreconff=rtri(1000000, min = min(v8), max = max(v8), mode = mode(v8))

round(summary(sreconff),3)

#

set.seed(12345)

# 12

loadfac=runif(1000000, min=0.92 , max=0.95)

mode <- function(v7) {

  uniqv <- unique(v7)

  uniqv[which.max(tabulate(match(v7, uniqv)))]

}; v7 <-loadfac

require(EnvStats); sloadfac=rtri(1000000, min = min(v7), max = max(v7), mode = mode(v7))

round(summary(sloadfac),3)

ANOMLALY SIMULATION| GRAPHICS ANALYSIS OF MONTE CARLO|

#   1

sar=hist(sarea,freq=FALSE, breaks = 139, col = "steelblue", xlab="Area m?", ylab="Distribution Probvability (%)", main=NA);dev.off()   #cbind(sar$mids,sar$density)

cbind(quantile(sarea, probs = c(0.05, 0.95)))

cuts <- cut(sar$breaks, c(-Inf,2.616823,  3.686680  ,Inf))

plot(sar,freq=F, border = "green", col=c("red","blue","red")[cuts],xlab="Area  of  Geothermal in m?", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(sar,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Area  of  Geothermal in m?", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~sarea,breaks = 1390, col = "blue", xlab=NA, ylab=NA, main=NA)

#grid(col="black", lwd=1, lty= 1)

 

#   2

sth=hist(sthickness,freq=FALSE, breaks = 139, col = "steelblue", xlab=NA, ylab=NA, main=NA);dev.off()

cbind(quantile(sthickness, probs = c(0.05, 0.95)))

cuts <- cut(sth$breaks, c(-Inf,  9800.1583   , 14306.6290  ,Inf))

plot(sth, freq=F, border = "green", col=c("red","blue","red")[cuts],xlab="Thickness of  Geothermal in m", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(sth,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Thickness of  Geothermal in m", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~sthickness,breaks = 1309, col = "blue", xlab=NA, ylab=NA, main=NA)

#grid(col="black", lwd=1, lty= 1)

#cbind(sth$mids,sth$density)

 

#   3

srec=hist(recovfact ,freq=FALSE, breaks = 139, col = "steelblue", xlab=NA, ylab=NA, main=NA);dev.off()

cbind(quantile(recovfact, probs = c(0.05, 0.95)))

cuts <- cut(srec$breaks, c(-Inf,  0.050750115  ,  0.19249012  ,Inf))

plot(srec, freq=F, border = "green", col=c("red","blue","red")[cuts],xlab="Recovery Factor of  Geothermal", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(srec, freq=F, border = "green", col=c("red","blue","red")[cuts],xlab="Recovery Factor of  Geothermal", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~recovfact,breaks = 139, col = "blue", xlab=NA, ylab=NA, main=NA)

#grid(col="black", lwd=1, lty= 1)

#cbind(sth$mids,sth$density)      cbind(srec$mids,sro$density)

#

 

4

sro=hist(srockheat,freq=FALSE, breaks = 139, col = "steelblue", xlab=NA, ylab=NA, main=NA);dev.off()

cbind(quantile(srockheat, probs = c(0.05, 0.95)))

cuts <- cut(sro$breaks, c(-Inf,  8013.5114  ,   882.1791  ,Inf))

plot(sro,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Heat Specific of Rock of  Geothermal in J/kg?C", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(sro,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Heat Specific of Rock of  Geothermal in J/kg?C", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~srockheat,breaks = 139, col = "blue", xlab=NA, ylab=NA, main=NA)

#cbind(sro$mids,sro$density)

 

#   5

sref=hist(sreftemp,freq=FALSE, breaks = 139, col = "steelblue", xlab=NA, ylab=NA, main=NA);dev.off()

cbind(quantile(sreftemp, probs = c(0.05, 0.95)))

cuts <- cut(sref$breaks, c(-Inf,2606.3791 , 3309.4234 ,Inf))

plot(sref,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Reference Temperature of  Geothermal in ?C", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(sref,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Reference Temperature of  Geothermal in ?C", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~srockheat,breaks = 1309, col = "blue", xlab=NA, ylab=NA, main=NA)

#cbind(sref$mids,sref$density)

 

#   6

sporo=hist(spor,freq=FALSE, breaks = 1390, col = "steelblue", xlab=NA, ylab=NA, main=NA);dev.off()

cbind(quantile(spor, probs = c(0.05, 0.95)))

cuts <- cut(sporo$breaks, c(-Inf, 0.01806123     ,  0.12488512  ,Inf))

plot(sporo, freq=F, border = "green", col=c("red","blue","red")[cuts],xlab="Porosity for  Geothermal", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(sporo,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Porosity for  Geothermal", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~spor,breaks = 139, col = "blue", xlab=NA, ylab=NA, main=NA)

#cbind(sporo$mids,sporo$density)

 

#   7

slfact=hist(sloadfac,freq=FALSE, breaks = 139, col = "steelblue", xlab=NA, ylab=NA, main=NA);dev.off()

cbind(quantile(sloadfac, probs = c(0.05, 0.95)))

cuts <- cut(slfact$breaks, c(-Inf,  0.9264786  ,   0.9482947  ,Inf))

plot(slfact,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Load Factor for  Geothermal", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(slfact,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="Load Factor for  Geothermal", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~sloadfac,breaks = 139, col = "blue", xlab=NA, ylab=NA, main=NA)

#cbind(sporo$mids,sporo$density)

#cbind(slfac$mids,slfac$density)

 

#   8

ssreconff=hist(sreconff,freq=FALSE, breaks = 139, col = "steelblue", xlab=NA, ylab=NA, main=NA);dev.off()

cbind(quantile(sreconff, probs = c(0.05, 0.95)))

cuts <- cut(ssreconff$breaks, c(-Inf,  0.15074837   ,   0.35059197   ,Inf))

plot(ssreconff,freq=F,  border = "green", col=c("red","blue","red")[cuts],xlab="conversion Efficiency for  Geothermal", ylab="Distribution Probvability (%)", main=NA)

par(new=TRUE);plot(ssreconff, freq=F, border = "green", col=c("red","blue","red")[cuts],xlab="conversion Efficiency for  Geothermal", ylab="Distribution Probvability (%)", main=NA)

 

library(lattice); histogram(~sreconff,breaks = 139, col = "blue", xlab=NA, ylab=NA, main=NA)

#cbind(ssreconff,sporo$density)

#cbind(ssreconff,slfac$density)

 

#SGS VOLUMETRIC | MONTE CARLO METHOD FOR CAPACITY    *

set.seed(12345)

SQr = sarea*(10e5)*sthickness*(sreftemp-tf)*((1-spor)*pir*srockheat);  SQw = sarea*sthickness*(sreftemp-tf)*(spor*piw*cw)

SQt=((SQr+SQw)/1000000)

summary(SQr)

summary(SQw)

summary(SQt)

 

SPPG=(SQt*recovfact*            sreconff   )/(sloadfac*ls)   # sreconff    #eff

round(cbind(summary(SPPG)), 3)

round(kurtosis(SPPG), 3)

round(skewness(SPPG),3)

round(sd(SPPG), 3)

round(var(SPPG), 3)

round(cbind(quantile(SPPG, probs = c(0.05,0.10,0.15,0.20,0.25,0.30,0.324,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,0.85, 0.90,0.95))), 3)

# DENSITY GEOTHERMAL

quantile(SPPG, probs = 0.10)

p10=28.385

p10=28.761

mostlikelyarea =3.25

p10/mostlikelyarea

summary(data.frame(SPPG,sarea,sthickness,sreftemp,spor,srockheat,recovfact,sloadfac,sreconff))

#

# Histogram uni/biways

#https://www.r-bloggers.com/2014/09/5-ways-to-do-2d-histograms-in-r/

#https://stackoverflow.com/questions/21858394/partially-color-histogram-in-r

 

smw=hist(SPPG, freq=FALSE, breaks = 139, xlab=NA, ylab=NA, main=NA, col ="blue",border = "red", plot=T) # density = 10

lines(density(SPPG),lwd = 1, col = "green")

cbind(smw$mids,smw$density)

cbind(quantile(SPPG, probs = c(0.05, 0.95)))

cuts <- cut(smw$breaks, c(-Inf,  203.46199  , 1108.80007  ,Inf))

 

plot(smw,freq=FALSE, border = "green", col=c("red","blue","red")[cuts], main=NA)

par(new=TRUE); plot(smw,freq=FALSE, border = "green", col=c("red","blue","red")[cuts], main=NA)

par(new=TRUE); plot(smw$mids,freq=FALSE,smw$density,type="b", lty=1, lwd=0.5, axe=FALSE, pch=20, xlab=NA, ylab=NA, main=NA, col="red", cex=1)

#  LEGEND

plot(smw$mids,freq=FALSE,smw$density,type="b", lty=1, lwd=0.5, axe=FALSE, pch=20, xlab=NA, ylab=NA, main=NA, col="white", cex=1)

legend("topright", legend=c("Density Function (%)"),text.font=15,

       col=c("red"), lty=1, pch=15, lwd =1, cex=1,

       box.lty=2, box.lwd=2, box.col="white",bg="white" )

legend("topleft", legend=c("Range: 5%-95%","Range: 0%-5% and 95%-100%"),text.font=15,

       fill=c("blue","red"),border = "green", box.lty=2, box.lwd=2, box.col="white",bg="white" )

 

# Method 2 Histogram

#abline(v=c(0.8530387,5.6167172))

x11()

library(lattice)

histogram(~SPPG,breaks = 139, col = "blue", xlab=NA, ylab=NA, main=NA)

 

# Method 3 Histogram

smw=hist(SPPG, freq=FALSE, breaks = 139, xlab=NA, ylab=NA, main=NA, col ="purple3",border = "yellow", plot=T) # density = 10

cbind(quantile(SPPG, probs = c(0.1, 0.5,0.90)))

 

abline(v=28.76130, lwd=0.5, col="darkgreen",lty=1) #legend( 13.48386,  0.018  ,"5%= 13.48", cex=0.65,bg="white")

abline(v=69.36526, lwd=0.5, col="darkgreen",lty=1)

abline(v=140.76479, lwd=0.5, col="darkgreen",lty=1)

 

#Cumulative Distribution

#https://www.jarad.me/courses/stat587Eng/labs/lab03/lab03.html

#csppg=ecdf(SPPG)  cumsum(x) cumprod(x) cummax(x) cummin(x)

#hist(cumsum(smw$density), freq=FALSE, breaks = 139, xlab=NA, ylab=NA, main=NA, col ="blue",border = "red", plot=T)

#X11()

plot(rev(sort(smw$mids)),rev(sort(cumsum(smw$density)))/10)

plot(sort(smw$mids),sort(cumsum(smw$density))/10)

plot(sort(smw$mids),rev(sort(cumsum(smw$density)))/10,type='b', lty=1, pch=15, col='red')

cbind(sort(smw$mids),rev(sort(cumsum(smw$density)))/10)

cbind(quantile(SPPG, probs = c(0.05, 0.90)))

 

# SENSITIVITY OF MONTE CARLO METHOD

data=data.frame(SPPG,sarea,sthickness,sreftemp,spor,srockheat,recovfact,sloadfac,sreconff)

summary(data)

cbind(cor(data)[, 1])

 

require('Ternary'); require(ggplot2); require(ggtern)

#data1=sample(1:5,data, replace =FALSE)

data1=data[1:5000,]

#data2=scale(data1)

data3=data.frame(data1)

summary(data3)

# TERNARY PLOT SENSITIVITY

#https://stackoverflow.com/questions/32390466/ternary-plot-and-filled-contour-ggtern

 

library(ggtern)

ggtern(data = data3,aes(x = sarea,y =sthickness, z = recovfact)) +

  geom_interpolate_tern(aes(value=SPPG,colour=..level..),bins=95) +

  geom_point(aes(color=SPPG),size=25) +

  geom_text(aes(label=round(SPPG,0)),size=1) +

  theme_bw() +

  theme(legend.position=c(0,1),

        legend.justification=c(0,1)) +

  scale_colour_gradient(low='green',high='red') +

  labs( title = "", colour = "")

#

library(ggtern)

plot <- ggtern(data = data1, aes(x = spor , y = sreftemp , z =  sloadfac)) +

  geom_point(aes(fill = SPPG),

             size = 6,

             shape = 22,

             color = "red") +

  ggtitle("SPPG") +

  labs(fill = "SPPG") +

  theme_rgbw() +

  theme(legend.position = c(0,1),

        legend.justification = c(1, 1))

plot

 

df = data.frame(x     = sarea,

                y     = sthickness,

                z     = recovfact,

                value = SPPG )

ggtern(df,aes(x,y,z)) +

  geom_hex_tern(bins=5,aes(value=value,fill=..count..))

 

library(ggtern)

library(ggalt)    

data("Fragments")

base = ggtern(Fragments,aes(Qm,Qp,Rf+M,fill=GrainSize,shape=GrainSize)) +

  theme_bw() +

  theme_legend_position('tr') +

  geom_encircle(alpha=0.5,size=1) +

  geom_point() +

  labs(title    = "Example Plot",

       subtitle = "using geom_encircle")

print(base)

 

library(ggtern)

set.seed(1)

df = data.frame(x=data1$spor,y=data1$sreftemp,z=data1$sloadfac)

base  = ggtern(data=df,aes(x,y,z)) + geom_point()

base1 = base + geom_Tmark(color='red') + labs(title="Tmark")

base2 = base + geom_Lmark(color='blue') + labs(title="Lmark")

base3 = base + geom_Rmark(color='green') + labs(title="Rmark")

base4 = base + geom_crosshair_tern(color='black') + labs(title="Crosshair")

grid.arrange(base1,base2,base3,base4)

#SPIDER PLOT SENSITIVITY

data=data.frame(SPPG,sarea,sthickness,sreftemp,spor,srockheat,recovfact,sloadfac,sreconff)

round(cbind(quantile(data$SPPG, probs = c(0.10))), 3)

#TORNADO PLOT SENSITIVITY

# data3=data.frame(data1); summary(data3)

#EXCEL/MATLAB BETTER VISUALIZE

 

 

 

 

# 21 - COST GEOTHERMAL:

 

# SUBSURFACE COST ANALYSIS OG GETHERMAL

#Drilling Cost

5.355*10^5*1*log(  25000  ) + (0.2414*1*(  25000^2  )) + (1.061*10^6)

 

#Completion Cost

((1.072*(10^-7))*(   25000^2   ) )  +((2.3*(10^-3)*  25000  )-0.62)

 

library(psych)

describe(g)

# item name ,item number, nvalid, mean, sd,

# median, mad, min, max, skew, kurtosis, se

#library(Hmisc)

#describe(data)

sapply(g,quantile)

sapply(g,range)

sapply(g,sd)

# MONTE CARLO SIMULATION LCOE 6CENTRALES ROD

#Overnight Capital Cost / Investissement Cost ($/KW)

rm(list=ls())

rm(list=ls())

set.seed(2021)

 

IC=94743327.5163 

ICs=runif(1000000, min=(IC+(IC*-0.3)), max=(IC+(IC*+0.3)))

sIC <- rnorm(ICs, mean = mean(ICs) , sd = sd(ICs) )

 

#Operation&Maintenance Cost ($)

OM=c(4899024.70,4354688.62,3870834.33,3440741.63,3058437.00,2718610.67,2416542.82,2148038.06,1909367.16,1697215.26,1508635.78,1341009.58,1192008.52,1059563.13,941833.89,837185.68,744165.05,661480.04,587982.26,522650.90,464578.58,412958.74,367074.43,326288.38,290034.12  )

OMs=runif(1000000, min= min(OM), max=max(OM))

sOM<- rnorm(OMs, mean = mean(OMs) , sd = sd(OMs) )

 

#Interest Rate (%)

IR=0.1087

sIR=runif(1000000, min=(IR+(IR*-0.3)), max=(IR+(IR*+0.3)))

 

#Load Factor (%)

LF= 0.9

sLF=runif(1000000,min=(LF+(LF*-0.3)), max=(LF+(LF*+0.10)))

 

#Life Time (yr)

LT=25

sLT=runif(1000000, min=(LT+(LT*-0.3)),max=(LT+(LT*+0.3)))

 

#Eouput

E=c(212302061.95,188712943.96,167744839.07,149106523.62,132539132.11,117812561.87,104722277.22,93086468.64,82743527.68,73549802.38,65377602.12,58113424.10,51656376.98,45916779.54,40814915.15,36279924.57,32248821.84,28665619.42,25480550.59,22649378.30,20132780.72,17895805.08,15907382.29,14139895.37,12568795.89)

Es=runif(1000000, min=    min(E), max=max(E))

sE<- rnorm(Es, mean = mean(Es) , sd = sd(Es) )

 

#Results of Simulation Monte Carlo

sLCOE = (sIC+((sOM/(1+0.125)^sLF)))/(30294.244*8760*sLF); summary(sLCOE)

 

#prop.table(sLCOE)

#d=data.frame(sLCOE);  getwd()

#write.table(d, file="data.txt", sep="\t")

 

#Graphic Anaysis

#Test Histogramme MC avec possibilit? changement simulation pour une bonne repart

require(ggplot2);    g=sLCOE

hist(g,prob=TRUE, breaks=139,xalb=NA, ylab=NA, main=NA)

h=hist(g,breaks=139,prob=TRUE, xalb=NA, ylab=NA, main=NA);h

 

#5 TIMES   ,xaxt="n", yaxt="n"

plot(-1,-1,xlab=NA,ylab=NA,xlim=c(0.015,0.105), ylim=c(0,30.20) )

#Ecart la fenetre

grid(col="grey2", lty="solid", lwd=0.1);par(new=T)  #grid(NULL, NA)

 

#ECARTER LE GRAPH POUR AFFICHAGE #breaks="FD"

par(new=T);{hist(g,add=TRUE, breaks=139,prob=T,border="yellow",col="blue3", main=NA,xlab="n",ylab="n",axes=F)}

lines(density(g), col='red', lty=1, lwd=1)

 

#QUANTILE MONTE CARLO LCOE RESULT 

round(cbind(quantile(g,c(0.05,0.50,0.95))) , 5)

numb1 <- cbind(quantile(g,c(0.05,0.50,0.95))); library(scales);cbind(scientific(numb1, digits = 3))

 

q1=   0.0248;    q2=  0.0424;   q3= 0.0716

abline(v=q1, lwd=0.5, col="darkred",lty=6)   #legend(q1,  9e-04 ,     "5%=1.31e+03",cex=0.75,bg="white")

#abline(v=q2, lwd=0.5, col="darkblue",lty=6) #legend(q2,   70    ,"50%=2.04e+03"  ,cex=0.75,bg="white")

abline(v= q3, lwd=0.5, col="darkgreen",lty=6)   #legend(q3, 70    ,"95%=3.18e+03",cex=0.75,bg="white")

round(summary(g),5);round(sd(g),5)

 

#2ND POSS

barplot(h$density~h$mids, col="blue3", xlab="", ylab="")

d=data.frame(h$density,h$mids)

write.table(d, "d.txt", sep="\t")

 

#Recuperer le Graphique

#

#require (dplyr)

#g%>%count()

#h=hist(g , prob=T, xalb=NA, ylab=NA, main=NA); dev.off(); h

 

round(cbind(median (sIC)),3)

round(cbind(median(sOM)),3)

round(cbind(median(sIR)),3)

round(cbind(median(sCF)),3)

round(cbind(median(sLT)),3)

g=sLCOE; round(cbind(summary(g)), 3); round(sd(g), 3)

 

# CORRELATION ANALYSIS

data=data.frame(sIC, sOM, sIR, sCF, sLT, sLCOE)

#cor(data, na.rm=T,use="complete.obs","pairwise.complete.obs",method="pearson")

cor(data, method = c("pearson", "kendall", "spearman"))

mcor=cor(data, use = "complete.obs")

mcor=cor(data)#[,1:20]

dim(data)

x = mcor

library(corrplot)

#?full?, ?lower?, ?upper?

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))

corrplot(mcor, method="color", col=col(200) ,

         type="full",

         addCoef.col = "black", order="hclust")

#library(corrr)

#library(tidyverse)

#mcor2%>%

#correlate() %>%

#network_plot(min_cor = .2)

 

sLCOE =     (sIC * (1+(sOM*(((1+sIR)^sLT)-1)/(IR*(1+IR)^sLT))))  / (Rp*sCF*8760*sLT)     ; summary(sLCOE)

cor(data.frame(sIC, sOM, sIR, sCF, sLT, sLCOE))

 

#          sLCOE

#sIC    0.4246583

#sOM    0.2866273

#sIR    0.6175135

#sCF   -0.4351828

#sLT   -0.3119388

#INCERTITUDE QUANTITATIF

cbind(sapply(data.frame(sIC, sOM, sIR, sCF, sLT, sLCOE), FUN=sd))

res.aov <- aov(sLCOE ~ sIC+sOM+sIR+sCF+sLT);summary(res.aov)

59.71+26.39 +13.07+62.71 +38.04+9.98

 

38.04/ (59.71+26.39 +13.07+62.71 +38.04+9.98)

 

# sensitivity Analysis

#1 - True value with percentage variation between -20% to +20% Linear graph

#2 - Tornado Graph  -20% to +20%

#https://www.youtube.com/watch?v=U3hTbYnTGGM

 

#3- Contour Graph Boostrapping Sample

# sI  sOM  sIR  sCF  sLT

#https://plotly.com/r/contour-plots/

 

x=sample(sIC ,5 , replace=F)

y=sample(sIR ,5, replace=F)

z=sample(sLCOE ,5 , replace=F)

 

#data.frame(sIC, sOM, sIR, sCF, sLT, sLCOE)

quantile(sCF)

quantile(sIC)

quantile(sLCOE)

 

x=c(0.5947349,0.7219041,0.8490959,0.9767852,1.1045023)

y=c(399127.8,4593045.4,5200151.7,5809260.4,9527693.8)

z=c(0.003743991,0.032106886,0.042723404,0.056482419,0.182222300 )

 

#'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'meta', 'hoverinfo', 'hoverlabel', 'stream', 'transforms', 'uirevision', 'z', 'x', 'x0', 'dx', 'y', 'y0', 'dy', 'xperiod', 'yperiod', 'xperiod0', 'yperiod0', 'xperiodalignment', 'yperiodalignment', 'text', 'hovertext', 'transpose', 'xtype', 'ytype', 'zhoverformat', 'hovertemplate', 'hoverongaps', 'connectgaps', 'fillcolor', 'autocontour', 'ncontours', 'contours', 'line', 'zauto', 'zmin', 'zmax', 'zmid', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'coloraxis', 'xcalendar', 'ycalendar', 'xaxis', 'yaxis', 'idssrc', 'customdatasrc', 'metasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'hovertextsrc', 'hovertemplatesrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'

df <- data.frame(x=x,y=y,z=z);library(plotly);p <- plot_ly(data = df, x=~x,y=~y, z=~z, type = "contour", colorscale='Jet',cex=0.5,contours = list(showlabels = T));p

#

BIC=sample(sIC , 30, replace=F)

BIR=sample(sIR , 30, replace=F)

BLCOE=sample(sLCOE ,900 , replace=F)

 

library(plotly)

fig <- plot_ly(

  x = BIC,

  y = BIR,

  z = matrix(BLCOE, nrow = 30, ncol = 30), colorscale = 'Jet',

  type = "contour" , contours = list(showlabels = F), line = list(smoothing = 2),autocontour = T

)

fig <- fig %>% colorbar(title = "LCOE ($/KWh)")

fig

#

BLCOE=sample(sLCOE ,25 , replace=FALSE)

library(plotly)

fig <- plot_ly(

  type = 'contour',

  z = matrix(c(BLCOE), nrow=5, ncol=5),

  colorscale = 'Jet',

  autocontour = F,

  contours = list(

    start = 0,

    end = 8,

    size = 2

  )

)

fig

#

#http://www.sthda.com/french/wiki/ggplot2-couleurs-changer-les-couleurs-automatiquement-et-manuellement-logiciel-r-et-visualisation-de-donnees

abline(v=c(4.5,5,5.5,6),col='red',lwd=2)

 

hp<-qplot(x =g, bins=139,fill=..density.., geom="histogram"); hp

hp+scale_fill_gradient(low="blue", high="red")

hp+theme(panel.background = element_rect())

 

require(lattice)

histogram(~ sIC,breaks=139,col="blue",border = "yellow",main="",xlab="Monte Carlo Simulation of Capital Cost ($)")

rm(list=ls())

r=read.table(file("clipboard"), header=T, sep="\t",dec=",",row.names=1)

str(r); summary(r)

 

#Interpolation Lineaire ou affine   #FORMULE TAYLOR-YOUNG:  y1+ ( (xr-x1) * ( (y2-y1)/(x1-x2)))

#geothermal gradient:

xr=5000; x1=1187; x2=650; y1=86.23;y2=39.27

yr =  y1 + (y2-y1)  * ( (xr-x1)/(x2-x1) ); yr

#  ENTRY VALUE/PARAMETER

#low-temperature geothermal: Volumetric method, and low enthalpy

#Thermal energy for a liquid dominated reservoir is as follows:

#it can be assumed that the heat capacity and temperature are homogeneous in the xy plane and are only dependent on depth

#

# THERMAL ENERGY CALCULATION

# Total thermal energy (kJ/kg)                              | QT(kJ/kg)

# Heat in rock Or Water (kJ/kg)                             | Q(kJ/kg)

# Area of the reservoir(m2)                                 | Ar(m2)        3

# Average thickness of the reservoir (m)                    | H(m)          1500

# Specific heat of rock at reservoir conditions(kJ/kgK)     | CR(J/kg)      900

# Specific heat of water at reservoir conditions(kJ/kgK)    | CW(J/kg)      4800

# Porosity                                                  | P             0.10

# Average temperature of the reservoir(?C)                  | Ti(?C)        323.70

# Final or abandonment temperature (?C)                     | Tf            40

# Rock or Water density (kg/m3)                             | Phir(kg/m3)   2870  /  890

# Degre Celsisu en Kelvin 0?C = 273.15K    |    0?C =255.372?F (D?gr? Fahrenheit)

 

Ar=3000000 ;Hr=1500; PhiR=2870; CR=900; PhiW=890;CW=4800;P=0.10;Ti=280; Tf=40

#

Qr = Ar*Hr*((PhiR*CR)*(1-P)*(Ti-Tf));Qr

Qw = Ar*Hr*((PhiW*CW)*(P)*(Ti-Tf))  ;Qw

 

# POTENTIAL GEOTHERMAL  #1KJ=0.000277778 KWh

QT = Qr + Qw; QT     

 

#POWER PLANT SIZE

#Power potential (MWe)   |  P

#Recovery factor         |  Rf

#Conversion efficiency   |  Ce

#Plant factor            |  Pf

#Economic life           |  Lf

 

Rf=0.1;Ce=0.4;Pf=0.95;Lf=25

PG=   ((QT/1000000)*Rf*Ce)/(Pf*(Lf*8760*3600));PG

# GEOTHERMAL SIMULATION MONTE CARLO   :

set.seed(2021)

#require(triangle)

library(metRology); require(graphics)

 

Ars=runif(1000000, min=2000000,max=8000000)

getmode <- function(v) {

  uniqv <- unique(v)

  uniqv[which.max(tabulate(match(v, uniqv)))]}

v <-Ars; a=min(v); b=max(v); c=getmode(v)

 

Ars1=rtri(1000000,a,b,c) ;Ar;summary(Ars1)

Hrs=runif(1000000, min=1000,max=2000)

getmode1 <- function(v1) {

  uniqv1 <- unique(v1)

  uniqv1[which.max(tabulate(match(v1, uniqv1)))]}

v1 <-Hrs; a1=min(v1); b1=max(v1); c1=getmode1(v1)

Hrs1=rtri(1000000,a1,b1,c1);Hr;summary(Hrs1)

 

Tis=runif(1000000, min=265,max=290)

getmode2 <- function(v2) {

  uniqv2 <- unique(v2)

  uniqv2[which.max(tabulate(match(v2, uniqv2)))]}

v2 <-Tis; a2=min(v2); b2=max(v2); c2=getmode2(v2)

Tis1=rtri(1000000,a2,b2,c2) ;Ti;summary(Tis1)

 

Rfs=runif(1000000, min=0.05,max=0.2)

getmode3 <- function(v3) {

  uniqv3 <- unique(v3)

  uniqv3[which.max(tabulate(match(v3, uniqv3)))]}

v3 <-Rfs; a3=min(v3); b3=max(v3); c3=getmode3(v3)

Rfs1=rtri(1000000,a3,b3,c3) ;Rf;summary(Rfs1)

 

CRs=runif(1000000, min=800,max=1000)

getmode4 <- function(v4) {

  uniqv4 <- unique(v4)

  uniqv4[which.max(tabulate(match(v4, uniqv4)))]}

v4 <-CRs; a4=min(v4); b4=max(v4); c4=getmode4(v4)

CRs1=rtri(1000000,a4,b4,c4) ;CR;summary(CRs1)

#Tfs    =runif(10000, min=(Tf+(Tf*-0.999)),max=(Tf+(Tf*+0.999)))

#LFs    =runif(10000, min=(Lf+(Lf*-0.999)),max=(Lf+(Lf*+0.999)))

#PhiWs  =runif(10000, min=(PhiW+(PhiW*-0.999)),max=(PhiW+(PhiW*+0.999)))

#PhiRs  =runif(10000, min=(PhiR+(PhiR*-0.999)),max=(PhiR+(PhiR*+0.999)))

#CWs    =runif(10000, min=(CW+(CW*-0.999)),max=(CW+(CW*+0.999)))

#Ps     =runif(10000, min=(P+(P*-0.999)),max=(P+(P*+0.999)))

#Ces    =runif(10000, min=(Ce+(Ce*-0.999)),max=(Ce+(Ce*+0.999)))

#Pfs    =runif(10000, min=(Pf+(Pf*-0.999)),max=(Pf+(Pf*+0.999)))

#RESULTS

Qrs1 = Ars1*Hrs1*((PhiR*CRs1)*(1-P)*(Tis1-Tf));Qws1 = Ars1*Hrs1*((PhiW*CW)*(P)*(Tis1-Tf))

QTs1=Qrs1+Qws1

#POTENTIAL GEOTHERMAL  #1KJ=0.000277778 KWh

PGs=   ((QTs1/1000000)*Rfs1*Ce)/(Pf*Lf*8760*3600)

summary(PGs)

 

#Graphic Anaysis

#Test Histogramme MC avec possibilit? changement simulation pour une bonne repart

require(ggplot2);    g=PGs

hist(g,prob=TRUE, breaks=139,xalb=NA, ylab=NA, main=NA)

h=hist(g,breaks=139,prob=TRUE, xalb=NA, ylab=NA, main=NA);h

 

#5 TIMES   ,xaxt="n", yaxt="n"

plot(-1,-1,xlab=NA,ylab=NA,xlim=c(0.015,0.105), ylim=c(0,30.20) )

#Ecart la fenetre

grid(col="grey2", lty="solid", lwd=0.1);par(new=T)  #grid(NULL, NA)

 

#ECARTER LE GRAPH POUR AFFICHAGE #breaks="FD"

par(new=T);{hist(g,add=TRUE, breaks=139,prob=T,border="yellow",col="blue3", main=NA,xlab="n",ylab="n",axes=F)}

lines(density(g), col='red', lty=1, lwd=1)

 

#QUANTILE MONTE CARLO LCOE RESULT 

#numb1 <- cbind(quantile(g,c(0.05,0.50,0.95))); library(scales);cbind(scientific(numb1, digits = 3))

round(cbind(quantile(g,c(0.05,0.50,0.95))) , 5)

q1=   0.0248;    q2=  0.0424;   q3= 0.0716

abline(v=q1, lwd=0.5, col="darkred",lty=6)   #legend(q1,  9e-04 ,     "5%=1.31e+03",cex=0.75,bg="white")

#abline(v=q2, lwd=0.5, col="darkblue",lty=6) #legend(q2,   70    ,"50%=2.04e+03"  ,cex=0.75,bg="white")

abline(v= q3, lwd=0.5, col="darkgreen",lty=6)   #legend(q3, 70    ,"95%=3.18e+03",cex=0.75,bg="white")

round(summary(g),5);round(sd(g),5)

 

#2ND POSS

barplot(h$density~h$mids, col="blue3", xlab="", ylab="")

d=data.frame(h$density,h$mids)

write.table(d, "d.txt", sep="\t")

 

 

 

 

 

# 22 - ANNEXE  SCRIPTS:

 

# MONTE CARLO SIMULATION LCOE 6CENTRALES ROD

#

# CAPITAL COST LOG NORMAL

IC=41600000; IC

ICs=runif(1000000, min=(IC+(IC*-0.3)), max=(IC+(IC*+0.3)) )

sIC <- rlnorm(ICs, mean = mean(log(ICs)) , sd = sd(log(ICs))   )

 

# INFLATION RATE   NORMAL

ir = 0.033

irs=runif(1000000, min=(ir+(ir*-0.3)), max=(ir+(ir*+0.3)) )

sir <- rnorm(irs, mean = mean(irs) , sd = sd(irs)   )

 

# DISCOUNT RATE  NORMAL

dr = 0.125

drs=runif(1000000, min=(dr+(dr*-0.3)), max=(dr+(dr*+0.3)) )

sdr <- rnorm(drs, mean = mean(drs) , sd = sd(drs)   )

 

# OM COST LOGNORMAL

# SIMULATION UNE ET UNE SEULE FOIS PAR PARAMETRE DANS LEQUATION

 

OM=

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^1)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^2)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^3)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^4)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^5)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^6)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^7)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^8)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^9)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^10)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^11)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^12)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^13)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^14)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^15)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^16)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^17)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^18)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^19)+

  (0.06*IC)/( ((1+sample(sir,1, replace =F) )/(1+sample(sdr,1, replace =F)) )^20); OM

 

OMs=runif(1000000, min=(OM+(OM*-0.3)), max=(OM+(OM*+0.3)) )

sOM <- rnorm(OMs, mean = mean((OMs)) , sd = sd((OMs)) )

 

# CAPACITY FACTOR   UNIFORM

CF=0.387121134174565 ; CF

sCF=runif(1000000, min=(CF+(CF*-0.3)) , max=(CF+(CF*+0.3)) )

 

# DEAGRADATION  UNIFORM

DR=0.04; DR

sDR=runif(1000000, min=(DR+(DR*-0.3)) , max=(DR+(DR*+0.3)) )

 

# ENERGY OUTPUT

EO1=

  ((sCF *20000*8760 )/ (1+0)^1)  +

  ((sCF *20000*8760 )/ (1+0)^2)  +

  ((sCF *20000*8760 )/ (1+0)^3)  +

  ((sCF *20000*8760 )/ (1+0)^4)  +

  ((sCF *20000*8760 )/ (1+0)^5)  +

  ((sCF *20000*8760 )/ (1+0)^6)  +

  ((sCF *20000*8760 )/ (1+0)^7)  +

  ((sCF *20000*8760 )/ (1+0)^8)  +

  ((sCF *20000*8760 )/ (1+0)^9)  +

  ((sCF *20000*8760 )/ (1+0)^10) +

  ((sCF *20000*8760 )/ (1+0)^11) +

  ((sCF *20000*8760 )/ (1+0)^12) +

  ((sCF *20000*8760 )/ (1+0)^13) +

  ((sCF *20000*8760 )/ (1+0)^14) +

  ((sCF *20000*8760 )/ (1+0)^15) +

  ((sCF *20000*8760 )/ (1+0)^16) +

  ((sCF *20000*8760 )/ (1+0)^17) +

  ((sCF *20000*8760 )/ (1+0)^18) +

  ((sCF *20000*8760 )/ (1+0)^19) +

  ((sCF *20000*8760 )/ (1+0)^20)

 

EO2=

  ((sCF *20000*8760 )/ (1+sDR )^1)  +

  ((sCF *20000*8760 )/ (1+sDR )^2)  +

  ((sCF *20000*8760 )/ (1+sDR )^3)  +

  ((sCF *20000*8760 )/ (1+sDR )^4)  +

  ((sCF *20000*8760 )/ (1+sDR )^5)  +

  ((sCF *20000*8760 )/ (1+sDR )^6)  +

  ((sCF *20000*8760 )/ (1+sDR )^7)  +

  ((sCF *20000*8760 )/ (1+sDR )^8)  +

  ((sCF *20000*8760 )/ (1+sDR )^9)  +

  ((sCF *20000*8760 )/ (1+sDR )^10) +

  ((sCF *20000*8760 )/ (1+sDR )^11)  +

  ((sCF *20000*8760 )/ (1+sDR )^12)  +

  ((sCF *20000*8760 )/ (1+sDR )^13)  +

  ((sCF *20000*8760 )/ (1+sDR )^14)  +

  ((sCF *20000*8760 )/ (1+sDR )^15)  +

  ((sCF *20000*8760 )/ (1+sDR )^16)  +

  ((sCF *20000*8760 )/ (1+sDR )^17)  +

  ((sCF *20000*8760 )/ (1+sDR )^18)  +

  ((sCF *20000*8760 )/ (1+sDR )^19)  +

  ((sCF *20000*8760 )/ (1+sDR )^20) 

 

# IMPACT ENVIRONNEMENT COST SCENARIOS

# LIFE TIME  UNIFORM

#LF=20;LF

#LFs=runif(1000000, min=(LF+(LF*-0.3)) , max=(LF+(LF*+0.3)) )

#sLF=runif(1000000, min=(LF+(LF*-0.3)) , max=(LF+(LF*+0.3)) )

# EQUATION DECOMPOSITE

 

# IMPACT ENVIRONNEMENTAL  UNIFORM

IE=36.3; IE

sIE=runif(1000000, min=(IE+(IE*-0.3)) , max=(IE+(IE*+0.3)) )

 

# EMISSION FACTOR DIESEL  UNIFORM

EFD=0.277; EFD

sEFD=runif(1000000, min=(EFD+(EFD*-0.3)) , max=(EFD+(EFD*+0.3)) )

 

# EMISSION FACTOR GAS UNIFORM

EFG=0.2; EFG

sEFG=runif(1000000, min=(EFG+(EFG*-0.3)) , max=(EFD+(EFG*+0.3)) )

 

#GARDANT LE CAS D NUL POUR LE COUT ENVIRONNEMENT

IED=

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^1)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^2)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^3)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^4)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^5)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^6)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^7)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^8)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^9)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^10) +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^11) +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^12) +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^13) +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^14)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^15)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^16)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^17)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^18)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^19)  +

  (((sEFD*EO1)/1000)*sIE) /((1+sir)/(1+sdr) ^20)

 

IEG=

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr)^1)   +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^2)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^3)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^4)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^5)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^6)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^7)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^8)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^9)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^10) +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^11)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^12)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^13)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^14)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^15)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^16)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^17)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^18)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^19)  +

  (((sEFG*EO2)/1000)*sIE) /((1+sir)/(1+sdr) ^20)

# Non Reutilistion dans une simulation

# PARAMETRE FIXED CONSIDERED

# Turbine Capacity

# Rotor diameter

# Number of Turbine

# Tower concept

# Weibull k factor

# shear exponent

# Altitude

# Air density

# Cut in wind speed

# Cut out wind speed

# Energy loses

# Availability

# Net aep MWh/year

 

#_____________________________________________________________________________________________________________

#                                LCOE SIMULATION MONTE CARLO

#-------------------------------------------------------------------------------------------------------------

 

sLCOE1 =(sIC + sOM)      / EO1

#

sLCOE2 =(sIC + sOM)      / EO2

sLCOE3 =(sIC + sOM-IED)  / EO1

sLCOE4 =(sIC + sOM-IED)  / EO2

sLCOE5 =(sIC + sOM-IEG)  / EO1

sLCOE6 =(sIC + sOM-IEG)  / EO2

#UNE et UNE seule fois pour eviter un effet de camouflage dans la distribution des autres parametres

 

#library(psych)

#describe(sLCOE1)

#c("item", "name" ,"item number", "nvalid", "mean", "sd","median", "mad", "min", "max", "skew", "kurtosis", "se"))

#sLCOE1=runif(1000000, min=min(LCOE1s), max=max(LCOE1s) )

#VERIFICATION

cbind(summary(sIC)) #appartenance 41 600 000   

cbind(summary(sOM)) #appartenance 137 611 390   

cbind(summary(EO1)) #appartenance 1 457 709 447   

 

cbind(summary(sLCOE1))  

cbind(summary(sLCOE2))  

cbind(summary(sLCOE3))    

cbind(summary(sLCOE4))   

cbind(summary(sLCOE5))  

 

#a= sIC+ (   (0.06*ICs)/(((1+sir)/(1+sdr))^1) +

(0.06*ICs)/(((1+sir)/(1+sdr))^2)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^3)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^4)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^5)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^6)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^7)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^8)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^9)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^10)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^11)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^12)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^13)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^14)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^15)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^16)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^17)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^18)+

  (0.06*ICs)/(((1+sir)/(1+sdr))^19)+

  #(0.06*ICs)/(((1+sir)/(1+sdr))^20)  )

  #b= (sCF*20000*8760) /((1+0)^1) +

  (sCF*20000*8760) /((1+0)^2)+

  (sCF*20000*8760) /((1+0)^3)+

  (sCF*20000*8760) /((1+0)^4)+

  (sCF*20000*8760) /((1+0)^5)+

  (sCF*20000*8760) /((1+0)^6)+

  (sCF*20000*8760) /((1+0)^7)+

  (sCF*20000*8760) /((1+0)^8)+

  (sCF*20000*8760) /((1+0)^9)+

  (sCF*20000*8760) /((1+0)^10)+

  (sCF*20000*8760) /((1+0)^11)+

  (sCF*20000*8760) /((1+0)^12)+

  (sCF*20000*8760) /((1+0)^13)+

  (sCF*20000*8760) /((1+0)^14)+

  (sCF*20000*8760) /((1+0)^15)+

  (sCF*20000*8760) /((1+0)^16)+

  (sCF*20000*8760) /((1+0)^17)+

  (sCF*20000*8760) /((1+0)^18)+

  (sCF*20000*8760) /((1+0)^19)+

  #(sCF*20000*8760) /((1+0)^20)

  #k=a/b

 

  # GRAPH RESULT  LCOE SIMATION 1000 000 ITERATION BY DEFAULT

  require(ggplot2)

#hp<-qplot(x =sLCOE1, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() #  +geom_density(alpha=.2, fill="#FF6666")     +theme_linedraw()       +theme_light()

hist(sLCOE1 , prob=T, xalb=NA, ylab=NA, main=NA)

#Qualité de l'histogramme MC avec possibilité changement simulation pour une bonne repart.

 

plot(-1,-1,xlim=c(0.05,0.29), ylim=c(0,13),xlab="YOBOKI Wind LCOE ($/KWh)",ylab="Probability density function (%)")

#Ecart la fenetre

grid(col="grey2", lty="solid", lwd=0.1)  #grid(NULL, NA)

 

#5 TIMES

par(new=T)

plot(-1,-1,xlim=c(0.05,0.29), ylim=c(0,13),xlab="YOBOKI Wind LCOE ($/KWh)",ylab="Probability density function (%)")

 

#ECARTER LE GRAPH POUR AFFICHAGE

#breaks="FD"

par(new=T)

{hist(sLCOE1,add=TRUE, prob=T,border="yellow", breaks=50,col="blue3", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sLCOE1), col='red', lty=1, lwd=1)

 

#QUANTILE MONTE CARLO LCOE RESULT

cbind(quantile(sLCOE1,c(0.05,0.50,0.95)))

numb1 <- cbind(quantile(sLCOE1,c(0.05,0.50,0.95))); library(scales);scientific(numb1, digits = 3)

 

q1=0.09896579

abline(v=q1, lwd=0.5, col="darkred",lty=6)

#legend(q1,  70 ,"5%= 3.718e-4",cex=0.75,bg="white")

 

q2= 0.14247902

#abline(v=q2, lwd=0.5, col="darkblue",lty=6)

#legend(q2,   70    ,"50%= 2.342e-3"  ,cex=0.75,bg="white")

 

q3=0.20895879

abline(v= q3, lwd=0.5, col="darkgreen",lty=6)

#legend(q3, 70    ,"95%=4.314e-3",cex=0.75,bg="white")

 

cbind(round(summary(sLCOE1),4));round(sd(sLCOE1),4)

 

#LEGEND GRAPH

plot(-1,-1,xlim=c(0.05,0.25), ylim=c(0,30),xlab="YOBOKI Wind LCOE ($/KWh)",ylab="Probability density function (%)")

legend("topright",c("Degrdataion (%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=3,  bty="n"  )

#library(wesanderson); names(wes_palettes)

#wes_palette("Zissou1", 10, type = "continuous")) #heat.colors(n), terrain.colors(n), topo.colors(n), et cm.colors(n)

#hist(sLCOE,xlim=c(0,0.10), ylim=c(0,75),breaks=170, prob=T, main=NA,xlab="   LCOE ($/KW) ", ylab=NA, col= heat.colors(70),border="darkslategrey")

#require(lattice)

#histogram(~sLCOE,xlim=c(0,0.10),breaks=170, prob=T, main=NA,xlab="   LCOE ($/KW) ", ylab=NA, col= heat.colors(70),border="darkslategrey")

#

# GRAPH RANK CORRELATION SENSITIVITY

#

rc=data.frame(sLCOE1,sIC, sir, sdr, sCF, sDR, sOM, sIE, sEFD, sEFG)

sp=cor(rc,rc$sLCOE1,method="spearman");sp #method="spearman", alternative="two.sided"

# Non log ni centrée reduire

# Graph avec Matlab

#

colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue")) #COLORATION

plot(-100,100, xlim=c(-10, 10), xlab= "Rank Correlation", yaxt="n",xaxt="n" ,ylab=NA)

par(new=TRUE)

# barplot(c(sp),horiz=T, col=colfunc(7))

# grid(NULL,NA, col = "gray", lty = "dotted", lwd = par("lwd"), equilogs = TRUE) # NULL OR NA OR c()

#CAN USE EXCEL GRAPH

#  GRAPH  PLOT LINE SENSITYVITY

pl=data.frame(median(sIC),median(sir),median(sdr),median(sCF),median(sDR),median(sOM));cbind(pl)

median(sIC)+ (  median(sIC)*-0.15 )

median(sir)+ (  median(sir)*-0.15 )

median(sdr)+ (  median(sdr)*-0.15 )

median(sDR)+ (  median(sDR)*-0.15 )

median(sCF)+ (  median(sCF)*-0.15 )

#CAN USE EXCEL Determinist(BETTER) or Stochastic

# Better use mean in the literrature

 

 

#apply(), lapply(), sapply(), tapply()

cbind(sapply(rc, median))

 

# TORNADO DIAGRAM SENSITYVITY

# With Standard Deviation

library(ggplot2)

library(plyr)

library(dplyr)

library(tidyverse)

library(likert)

data(pisaitems) #items28 <- pisaitems[, substr(names(pisaitems), 1, 5) == "ST24Q"]

p <- likert(items28) ; plot(p)

 

sd(sIC)

sd(sir)

sd(sdr)

sd(sDR)

sd(sCF)

sd(sOM)

 

#https://www.youtube.com/watch?v=U3hTbYnTGGM

#https://www.youtube.com/watch?v=J9RZWI9cq4Y

#  COUNTOUR DIAGRAM SENSITYVITY

# sIC, sir, sdr, sCF, sDR, sOM

a =     sdr

b =     sir

c =     sLCOE1

x=c(min(a),min(a),min(a),median(a),median(a),median(a),max(a),max(a),max(a))

y=c(min(b),min(b),min(b),median(b),median(b),median(b),max(b),max(b),max(b))

z=c(min(c),min(c),min(c),median(c),median(c),median(c),max(c),max(c),max(c))

df <- data.frame(x=x,y=y,z=z)

library(plotly)

p <- plot_ly(data = df, x=~x,y=~y, z=~z, type = "contour", colorscale='Jet');p

 

# BASELINE CASE

rm(list=ls())

data= read.table(file('clipboard'),header=T, sep="\t",dec=',')

str(data)

# View(data)

summary(data)

data2=data[data$W90>=1 ,]

summary(data2)

 

library(ggplot2)

library(ggthemes)

library(viridis)

library(scales)

library(tidyr)

 

attach(data)

gg <- ggplot(data , aes(x=hour, y=month, fill = W85)) +

  geom_tile(color = "white", size = 0.1) +

  scale_x_discrete(expand=c(0,0)) +

  scale_y_discrete(expand=c(0,0)) +

  scale_fill_viridis(name="# of calls", option = "magma") +

  coord_equal() +

  labs(x="hour", y=NULL, title=sprintf("",stationid)) +

  theme_tufte(base_family="Helvetica") +

  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

gg

#infemo viridis cividis rocket mako plasma    magma   turbo 

 

library(ggplot2)

p <- ggplot(data2, aes(hour,month, fill = W90)) +

  geom_tile(colour = "white")  + scale_fill_gradient(low="blue", high="green") +  xlab("") + ylab("") + ggtitle("") + labs(fill = "wind speed (m/s)")

p

#low=red medium=purple high = blue

#http://www.columbia.edu/~sg3637/blog/Time_Series_Heatmaps.html

 

#method 2 ggplot

p <- ggplot(data,aes(x=hour,y=month,fill=W90))+

  geom_tile()

p

#save plot to working directory ggsave(p,filename="measles-basic.png")

#https://www.royfrancis.com/a-guide-to-elegant-tiled-heatmaps-in-r-2019/

 

ggp <- ggplot(data2, aes(hour, month)) +                       

  geom_tile(aes(fill = W90))

ggp + scale_fill_gradient(low = "green", high = "blue")

#https://statisticsglobe.com/heatmap-in-r

 

 

library(ggplot2)

library(viridis)

# plot

ggplot(data, aes(hour, month, fill=w80m)) +

  geom_raster() +

  coord_fixed(expand = TRUE) +

  scale_fill_viridis()

X11()

ggplot(data, aes(hour, month, fill=w80m)) +

  geom_raster(interpolate = TRUE) +

  coord_fixed(expand = FALSE) +

  scale_fill_viridis()

 

statno <-unique(data$stationid)

library(ggplot2)

library(dplyr) # easier data wrangling

library(viridis) # colour blind friendly palette, works in B&W also

library(Interpol.T) #  will generate a large dataset on initial load

library(lubridate) # for easy date manipulation

library(ggExtra) # because remembering ggplot theme options is beyond me

library(tidyr)

names(data)

p <-ggplot(data,aes(day,hour,fill=W90))+

  geom_tile(color= "white",size=0.1) +

  scale_fill_viridis(name="",option ="C")

p <-p + facet_grid(year~month)

p <-p + scale_y_continuous(trans = "reverse", breaks = unique(data$hour))

p <-p + scale_x_continuous(breaks =c(1,10,20,31))

p <-p + theme_minimal(base_size = 7)

p <-p + labs(title= paste(""), x="Day", y="Hour")

p <-p + theme(legend.position = "bottom")+

  theme(plot.title=element_text(size = 14))+

  theme(axis.text.y=element_text(size=6)) +

  theme(strip.background = element_rect(colour="white"))+

  theme(plot.title=element_text(hjust=0))+

  theme(axis.ticks=element_blank())+

  theme(axis.text=element_text(size=7))+

  theme(legend.title=element_text(size=7))+

  theme(legend.text=element_text(size=6))+

  removeGrid()

p

 

library(ggplot2)

library(dplyr) # easier data wrangling

library(viridis) # colour blind friendly palette, works in B&W also

library(Interpol.T) #  will generate a large dataset on initial load

library(lubridate) # for easy date manipulation

library(ggExtra) # because remembering ggplot theme options is beyond me

library(tidyr)

 

data <- data(Trentino_hourly_T,package = "Interpol.T")

 

names(h_d_t)[1:5]<- c("stationid","date","hour","temp","flag")

df <- tbl_df(h_d_t) %>%

  filter(stationid =="T0001")

 

df <- df %>% mutate(year = year(date),

                    month = month(date, label=TRUE),

                    day = day(date))

 

df$date<-ymd(df$date) # not necessary for plot but

#useful if you want to do further work with the data

 

#cleanup

rm(list=c("h_d_t","mo_bias","Tn","Tx",

          "Th_int_list","calibration_l",

          "calibration_shape","Tm_list"))

#create plotting df

df <-df %>% select(stationid,day,hour,month,year,temp)%>%

  fill(temp) #optional - see note below

View(df)

statno <-unique(df$stationid)

 

# Plotting starts here

p <-ggplot(df,aes(day,hour,fill=temp))+

  geom_tile(color= "white",size=0.1) +

  scale_fill_viridis(name="Hrly Temps C",option ="C")

p <-p + facet_grid(year~month)

p <-p + scale_y_continuous(trans = "reverse", breaks = unique(df$hour))

p <-p + scale_x_continuous(breaks =c(1,10,20,31))

p <-p + theme_minimal(base_size = 8)

p <-p + labs(title= paste("Hourly Temps - Station",statno), x="Day", y="Hour Commencing")

p <-p + theme(legend.position = "bottom")+

  theme(plot.title=element_text(size = 14))+

  theme(axis.text.y=element_text(size=6)) +

  theme(strip.background = element_rect(colour="white"))+

  theme(plot.title=element_text(hjust=0))+

  theme(axis.ticks=element_blank())+

  theme(axis.text=element_text(size=7))+

  theme(legend.title=element_text(size=8))+

  theme(legend.text=element_text(size=6))+

  removeGrid()#ggExtra

 

p #awesomeness

library("lattice")

# Dummy data

data <- expand.grid(X=hour, Y=month)

## Try it out

levelplot(w80m ~ X*Y, data=data  ,xlab="X",main="")

 

# 3) Air Passengers #3

heatmap.2(air_data,

          trace = "none",

          xlab = "month",

          ylab = "year",

          main = "Air Passengers #3",

          density.info = "histogram",

          dendrogram = "column",

          keysize = 1.8)

#

# BIG Manipulation Data

# https://rpubs.com/justmarkham/dplyr-tutorial

# load packages

suppressMessages(library(dplyr))

library(hflights)

# explore data

data(hflights)

head(hflights)

# convert to local data frame

flights <- tbl_df(hflights)

# printing only shows 10 rows and as many columns as can fit on your screen

flights

# youcan specify that you want to see more rows

print(flights, n=20)

 

# convert to a normal data frame to see all of the columns

data.frame(head(flights))

 

# base R approach to view all flights on January 1

flights[flights$Month==1 & flights$DayofMonth==1, ]

# dplyr approach

 

# note: you can use comma or ampersand to represent AND condition

filter(flights, Month==1, DayofMonth==1)

 

# use pipe for OR condition

filter(flights, UniqueCarrier=="AA" | UniqueCarrier=="UA")

 

# you can also use %in% operator

filter(flights, UniqueCarrier %in% c("AA", "UA"))

 

 

# base R approach to select DepTime, ArrTime, and FlightNum columns

flights[, c("DepTime", "ArrTime", "FlightNum")]

 

# dplyr approach

select(flights, DepTime, ArrTime, FlightNum)

 

# use colon to select multiple contiguous columns, and use `contains` to match columns by name

# note: `starts_with`, `ends_with`, and `matches` (for regular expressions) can also be used to match columns by name

select(flights, Year:DayofMonth, contains("Taxi"), contains("Delay"))

 

# nesting method to select UniqueCarrier and DepDelay columns and filter for delays over 60 minutes

filter(select(flights, UniqueCarrier, DepDelay), DepDelay > 60)

 

# chaining method

flights %>%

  select(UniqueCarrier, DepDelay) %>%

  filter(DepDelay > 60)

 

# create two vectors and calculate Euclidian distance between them

x1 <- 1:5; x2 <- 2:6

sqrt(sum((x1-x2)^2))

 

# chaining method

(x1-x2)^2 %>% sum() %>% sqrt()

 

# base R approach to select UniqueCarrier and DepDelay columns and sort by DepDelay

flights[order(flights$DepDelay), c("UniqueCarrier", "DepDelay")]

 

# dplyr approach

flights %>%

  select(UniqueCarrier, DepDelay) %>%

  arrange(DepDelay)

 

# use `desc` for descending

flights %>%

  select(UniqueCarrier, DepDelay) %>%

  arrange(desc(DepDelay))

 

# base R approach to create a new variable Speed (in mph)

flights$Speed <- flights$Distance / flights$AirTime*60

flights[, c("Distance", "AirTime", "Speed")]

 

# dplyr approach (prints the new variable but does not store it)

flights %>%

  select(Distance, AirTime) %>%

  mutate(Speed = Distance/AirTime*60)

 

# store the new variable

flights <- flights %>% mutate(Speed = Distance/AirTime*60)

 

# base R approaches to calculate the average arrival delay to each destination

head(with(flights, tapply(ArrDelay, Dest, mean, na.rm=TRUE)))

head(aggregate(ArrDelay ~ Dest, flights, mean))

 

# dplyr approach: create a table grouped by Dest, and then summarise each group by taking the mean of ArrDelay

flights %>%

  group_by(Dest) %>%

  summarise(avg_delay = mean(ArrDelay, na.rm=TRUE))

 

# for each carrier, calculate the percentage of flights cancelled or diverted

flights %>%

  group_by(UniqueCarrier) %>%

  summarise_each(funs(mean), Cancelled, Diverted)

 

# for each carrier, calculate the minimum and maximum arrival and departure delays

flights %>%

  group_by(UniqueCarrier) %>%

  summarise_each(funs(min(., na.rm=TRUE), max(., na.rm=TRUE)), matches("Delay"))

 

# for each day of the year, count the total number of flights and sort in descending order

flights %>%

  group_by(Month, DayofMonth) %>%

  summarise(flight_count = n()) %>%

  arrange(desc(flight_count))

 

# rewrite more simply with the `tally` function

flights %>%

  group_by(Month, DayofMonth) %>%

  tally(sort = TRUE)

 

# for each destination, count the total number of flights and the number of distinct planes that flew there

flights %>%

  group_by(Dest) %>%

  summarise(flight_count = n(), plane_count = n_distinct(TailNum))

 

# for each destination, show the number of cancelled and not cancelled flights

flights %>%

  group_by(Dest) %>%

  select(Cancelled) %>%

  table() %>%

  head()

 

# for each carrier, calculate which two days of the year they had their longest departure delays

# note: smallest (not largest) value is ranked as 1, so you have to use `desc` to rank by largest value

flights %>%

  group_by(UniqueCarrier) %>%

  select(Month, DayofMonth, DepDelay) %>%

  filter(min_rank(desc(DepDelay)) <= 2) %>%

  arrange(UniqueCarrier, desc(DepDelay))

 

# rewrite more simply with the `top_n` function

flights %>%

  group_by(UniqueCarrier) %>%

  select(Month, DayofMonth, DepDelay) %>%

  top_n(2) %>%

  arrange(UniqueCarrier, desc(DepDelay))

# for each month, calculate the number of flights and the change from the previous month

flights %>%

  group_by(Month) %>%

  summarise(flight_count = n()) %>%

  mutate(change = flight_count - lag(flight_count))

# rewrite more simply with the `tally` function

flights %>%

  group_by(Month) %>%

  tally() %>%

  mutate(change = n - lag(n))

 

# randomly sample a fixed number of rows, without replacement

flights %>% sample_n(5)

 

# randomly sample a fraction of rows, with replacement

flights %>% sample_frac(0.25, replace=TRUE)

 

# base R approach to view the structure of an object

str(flights)

# dplyr approach: better formatting, and adapts to your screen width

glimpse(flights)

# connect to an SQLite database containing the hflights data

my_db <- src_sqlite("my_db.sqlite3")

 

# connect to the "hflights" table in that database

flights_tbl <- tbl(my_db, "hflights")

 

# example query with our data frame

flights %>%

  select(UniqueCarrier, DepDelay) %>%

  arrange(desc(DepDelay))

 

# identical query using the database

flights_tbl %>%

  select(UniqueCarrier, DepDelay) %>%

  arrange(desc(DepDelay))

 

# send SQL commands to the database

tbl(my_db, sql("SELECT * FROM hflights LIMIT 100"))

 

# ask dplyr for the SQL commands

flights_tbl %>%

  select(UniqueCarrier, DepDelay) %>%

  arrange(desc(DepDelay)) %>%

  explain()

#

# https://rpubs.com/justmarkham/dplyr-tutorial

# Annexe of R programm Excution    

 

attach(data)

names(data)

library(plot3D)

x <- Temperature...C.

y <- Wind.speed..80m.

z <- Pression

#using rgl

scatter3D(x=x, y=y, z=z, bty = "b2",   pch = 20, cex = 2, ticktype = "detailed")

#“b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”

#DIURNAL MEAN HOURS PER MONTH

#     J1(31)  F(28/29) M1(31) A1(30) M2(31) J2(30) J3(31) A2(31) S(30) O(31) N(30) D(31)

jan=c(dj1,dj2,dj3,dj4,dj5,dj6,dj7,dj8,dj9,dj10,dj11,dj12,dj13,dj14,dj15,dj16,dj17,dj18,dj19,dj20,dj21,dj22,dj23,dj24,dj25,dj26,dj27,dj28,dj29,dj30,dj31)

feb=c(df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12,df13,df14,df15,df16,df17,df18,df19,df20,df21,df22,df23,df24,df25,df26,df27,df28)

mar=c(dm1,dm2,dm3,dm4,dm5,dm6,dm7,dm8,dm9,dm10,dm11,dm12,dm13,dm14,dm15,dm16,dm17,dm18,dm19,dm20,dm21,dm22,dm23,dm24,dm25,dm26,dm27,dm28,dm29,dm30,dm31)

apr=c(da1,da2,da3,da4,da5,da6,da7,da8,da9,da10,da11,da12,da13,da14,da15,da16,da17,da18,da19,da20,da21,da22,da23,da24,da25,da26,da27,da28,da29,da30)

mai=c(dmm1,dmm2,dmm3,dmm4,dmm5,dmm6,dmm7,dmm8,dmm9,dmm10,dmm11,dmm12,dmm13,dmm14,dmm15,dmm16,dmm17,dmm18,dmm19,dmm20,dmm21,dmm22,dmm23,dmm24,dmm25,dmm26,dmm27,dmm28,dmm29,dmm30,dmm31)

jun=c(djj1,djj2,djj3,djj4,djj5,djj6,djj7,djj8,djj9,djj10,djj11,djj12,djj13,djj14,djj15,djj16,djj17,djj18,djj19,djj20,djj21,djj22,djj23,djj24,djj25,djj26,djj27,djj28,djj29,djj30)

jul=c(jd1,jd2,jd3,jd4,jd5,jd6,jd7,jd8,jd9,jd10,jd11,jd12,jd13,jd14,jd15,jd16,jd17,jd18,jd19,jd20,jd21,jd22,jd23,jd24,jd25,jd26,jd27,jd28,jd29,jd30,jd31)

aou=c(da1,da2,da3,da4,da5,da6,da7,da8,da9,da10,da11,da12,da13,da14,da15,da16,da17,da18,da19,da20,da21,da22,da23,da24,da25,da26,da27,da28,da29,da30,da31)

sep=c(dsep1,dsep2,dsep3,dsep4,dsep5,dsep6,dsep7,dsep8,dsep9,dsep10,dsep11,dsep12,dsep13,dsep14,dsep15,dsep16,dsep17,dsep18,dsep19,dsep20,dsep21,dsep22,dsep23,dsep24,dsep25,dsep26,dsep27,dsep28,dsep29,dsep30)

oct=c(do1,do2,do3,do4,do5,do6,do7,do8,do9,do10,do11,do12,do13,do14,do15,do16,do17,do18,do19,do20,do21,do22,do23,do24,do25,do26,do27,do28,do29,do30,do31)

nov=c(dn1,dn2,dn3,dn4,dn5,dn6,dn7,dn8,dn9,dn10,dn11,dn12,dn13,dn14,dn15,dn16,dn17,dn18,dn19,dn20,dn21,dn22,dn23,dn24,dn25,dn26,dn27,dn28,dn29,dn30)

dec=c(dd1,dd2,dd3,dd4,dd5,dd6,dd7,dd8,dd9,dd10,dd11,dd12,dd13,dd14,dd15,dd16,dd17,dd18,dd19,dd20,dd21,dd22,dd23,dd24,dd25,dd26,dd27,dd28,dd29,dd30,dd31)

rbind(mean(jan),mean(feb),mean(mar),mean(apr),mean(mai),mean(jun),mean(jul),mean(aou),mean(sep),mean(oct),mean(nov),mean(dec))

mean(data$w80)

rbind(min(jan),min(feb),min(mar),min(apr),min(mai),min(jun),min(jul),min(aou),min(sep),min(oct),min(nov),min(dec))

min(data$w80)

rbind(max(jan),max(feb),max(mar),max(apr),max(mai),max(jun),max(jul),max(aou),max(sep),max(oct),max(nov),max(dec))

max(data$w80)

var=c(jan,feb,mar,apr,mai,jun,jul,aou,sep,oct,nov,dec)

sea=c(mean(jan),mean(feb),mean(mar),mean(apr),mean(mai),mean(jun),mean(jul),mean(aou),mean(sep),mean(oct),mean(nov),mean(dec))

write.table(jan,"jan.txt")

write.table(feb,"feb.txt")

write.table(mar,"mar.txt")

write.table(apr,"apr.txt")

write.table(mai,"mai.txt")

write.table(jun,"jun.txt")

write.table(jul,"jul.txt")

write.table(aou,"aou.txt")

write.table(sep,"sep.txt")

write.table(oct,"oct.txt")

write.table(nov,"nov.txt")

write.table(dec,"dec.txt")

plot(var, type="l")

plot(sea, type="l")

boxplot(jan,feb,mar,apr,mai,jun,jul,aou,sep,oct,nov,dec, col=rainbow(12) )

qj=cbind(quantile(jan, probs = c(0.1,0.25,0.75, 0.9)))

qf=cbind(quantile(feb, probs = c(0.1,0.25,0.75, 0.9)))

qm=cbind(quantile(mar, probs = c(0.1,0.25,0.75, 0.9)))

qa=cbind(quantile(apr, probs = c(0.1,0.25,0.75, 0.9)))

qm1=cbind(quantile(mai, probs = c(0.1,0.25,0.75, 0.9)))

qj=cbind(quantile(jun, probs = c(0.1,0.25,0.75, 0.9)))

qjj=cbind(quantile(jul, probs = c(0.1,0.25,0.75, 0.9)))

qaa=cbind(quantile(aou, probs = c(0.1,0.25,0.75, 0.9)))

qs=cbind(quantile(sep, probs = c(0.1,0.25,0.75, 0.9)))

qo=cbind(quantile(oct, probs = c(0.1,0.25,0.75, 0.9)))

qn=cbind(quantile(nov, probs = c(0.1,0.25,0.75, 0.9)))

qd=cbind(quantile(dec, probs = c(0.1,0.25,0.75, 0.9)))

q=cbind(c(qj,qf,qm,qa,qm1,qj,qjj,qaa,qs,qo,qn,qd));q

quan=read.csv(file("clipboard"),header=T,sep="\t", dec=".",row.names=1);str(quan)

plot(sea, type="l")

plot(-1,-1,xlim=c(0,12), ylim=c(5,15),xlab="Month",ylab="Average Wind speed(m/s)")

grid(col="black", lty="solid", lwd=1.5)

par(new=TRUE);plot(sea,lwd=1.5,lty=1,pch=20,type="b", axes=F,ylab=NA,xlab=NA)

par(new=TRUE);plot(quan$q0.1, type="l",lty=2,lwd=3,col="red", axes=F, ylab=NA,xlab=NA);par(new=TRUE);plot(quan$q0.9,  type="l",lty=2,lwd=3,col="red", axes=F,ylab=NA,xlab=NA)

par(new=TRUE);plot(quan$q0.25, type="l",lty=3,lwd=3,col="blue", axes=F, ylab=NA,xlab=NA);par(new=TRUE);plot(quan$q0.75,  type="l",lty=3,lwd=3,col="blue", axes=F,ylab=NA,xlab=NA)

#TIMES SERIES ANALYSIS

ts <- ts(var, frequency=30, start=c(2015))

plot.ts(ts)

tsdec<- decompose(ts)

plot(tsdec)

wmjan=c(mean(c(dj1,dj2,dj3,dj4,dj5,dj6,dj7)),mean(c(dj8,dj9,dj10,dj11,dj12,dj13,dj14)),mean(c(dj15,dj16,dj17,dj18,dj19,dj20,dj21)),mean(c(dj22,dj23,dj24,dj25,dj26,dj27,dj28,dj29,dj30,dj31)))

wmfeb=c(mean(c(df1,df2,df3,df4,df5,df6,df7)),mean(c(df8,df9,df10,df11,df12,df13,df14)),mean(c(df15,df16,df17,df18,df19,df20,df21)),mean(c(df22,df23,df24,df25,df26,df27,df28)))

wmmar=c(mean(c(dm1,dm2,dm3,dm4,dm5,dm6,dm7)),mean(c(dm8,dm9,dm10,dm11,dm12,dm13,dm14)),mean(c(dm15,dm16,dm17,dm18,dm19,dm20,dm21)),mean(c(dm22,dm23,dm24,dm25,dm26,dm27,dm28,dm29,dm30,dm31)))

wmapr=c(mean(c(da1,da2,da3,da4,da5,da6,da7)),mean(c(da8,da9,da10,da11,da12,da13,da14)),mean(c(da15,da16,da17,da18,da19,da20,da21)),mean(c(da22,da23,da24,da25,da26,da27,da28,da29,da30)))

wmmai=c(mean(c(dmm1,dmm2,dmm3,dmm4,dmm5,dmm6,dmm7)),mean(c(dmm8,dmm9,dmm10,dmm11,dmm12,dmm13,dmm14)),mean(c(dmm15,dmm16,dmm17,dmm18,dmm19,dmm20,dmm21)),mean(c(dmm22,dmm23,dmm24,dmm25,dmm26,dmm27,dmm28,dmm29,dmm30,dmm31)))

wmjun=c(mean(c(djj1,djj2,djj3,djj4,djj5,djj6,djj7)),mean(c(djj8,djj9,djj10,djj11,djj12,djj13,djj14)),mean(c(djj15,djj16,djj17,djj18,djj19,djj20,djj21)),mean(c(djj22,djj23,djj24,djj25,djj26,djj27,djj28,djj29,djj30)))

wmjul=c(mean(c(jd1,jd2,jd3,jd4,jd5,jd6,jd7)),mean(c(jd8,jd9,jd10,jd11,jd12,jd13,jd14)),mean(c(jd15,jd16,jd17,jd18,jd19,jd20,jd21)),mean(c(jd22,jd23,jd24,jd25,jd26,jd27,jd28,jd29,jd30,jd31)))

wmaou=c(mean(c(da1,da2,da3,da4,da5,da6,da7)),mean(c(da8,da9,da10,da11,da12,da13,da14)),mean(c(da15,da16,da17,da18,da19,da20,da21)),mean(c(da22,da23,da24,da25,da26,da27,da28,da29,da30,da31)))

wmsep=c(mean(c(dsep1,dsep2,dsep3,dsep4,dsep5,dsep6,dsep7)),mean(c(dsep8,dsep9,dsep10,dsep11,dsep12,dsep13,dsep14)),mean(c(dsep15,dsep16,dsep17,dsep18,dsep19,dsep20,dsep21)),mean(c(dsep22,dsep23,dsep24,dsep25,dsep26,dsep27,dsep28,dsep29,dsep30)))

wmoct=c(mean(c(do1,do2,do3,do4,do5,do6,do7)),mean(c(do8,do9,do10,do11,do12,do13,do14)),mean(c(do15,do16,do17,do18,do19,do20,do21)),mean(c(do22,do23,do24,do25,do26,do27,do28,do29,do30,do31)))

wmnov=c(mean(c(dn1,dn2,dn3,dn4,dn5,dn6,dn7)),mean(c(dn8,dn9,dn10,dn11,dn12,dn13,dn14)),mean(c(dn15,dn16,dn17,dn18,dn19,dn20,dn21)),mean(c(dn22,dn23,dn24,dn25,dn26,dn27,dn28,dn29,dn30)))

wmdec=c(mean(c(dd1,dd2,dd3,dd4,dd5,dd6,dd7)),mean(c(dd8,dd9,dd10,dd11,dd12,dd13,dd14)),mean(c(dd15,dd16,dd17,dd18,dd19,dd20,dd21)),mean(c(dd22,dd23,dd24,dd25,dd26,dd27,dd28,dd29,dd30,dd31)))

wmvar=c(wmjan,wmfeb,wmmar,wmapr,wmmai,wmjun,wmjul,wmaou,wmsep,wmoct,wmnov,wmdec)

plot(wmvar, type="l")

plot(-1,-1,xlim=c(0,60), ylim=c(0,16),xlab="Month",ylab="Average Wind speed(m/s)")

grid(col="black", lty="solid", lwd=1.5)

par(new=TRUE);plot(wmvar,lwd=1.5,lty=1,pch=20,type="b",col="red", axes=F,ylab=NA,xlab=NA)

# J1(31) F(28/29) M1(31) A1(30) M2(31) J2(30) J3(31) A2(31) S(30) O(31) N(30) D(31)

dim(data)  # NEED 52560

j1=data[c(1:4464),]

f2=data[c(4465:8497),]

m3=data[c(8498:12962),]

a4=data[c(12963:17283),]

m5=data[c(17284:27748),]

wsj=data[c(1:4464),]

wsjj=data[c(1:4320),]

wsao=data[c(1:4464),]

wssep=data[c(1:4464),]

wso=data[c(1:4320),]

wsn=data[c(1:4464),]

wsd=data[c(1:4320),]

write.table(j1,"j1.txt")

#

# WIND ROSE DIAGRAM :

goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

#goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

# "right", "left", "top", "bottom"

summary(w60)

require(openair)

windRose(data, ws = "w60", wd ="d60",

         paddle = F, border = T,

         breaks = c(0, 4, 8, 12, 16, 21),

         key.position = "bottom",

         col =c( "blue", "purple", "pink","red", "darkred"),

         grid.line = list(value = 5, lty = 1, lwd=3, col = "black"), annotate = TRUE,

         key.header = "Wind Speed", angle.scale = 35)

 

#WindRose.R

# POTENTIAL AREA ASSESSMENT

#WIND DENSITY POWER

rho=1.225 #kg/m3

#PD=rho* (sum(v2^3)/length(v2))/2  = PD/A  (W/M2)

PDA = (rho* (mean(v2^3)))/2; PDA

Radius=sqrt(10024/pi);Radius

Diam= 2*Radius; Diam  # 112.9732

#POWER CAPTUTRED

cp=(0.35+0.45)/2

PC=0.5*rho*Radius^2*cp*(v2^3)

plot(PC, type="l")

#

pot<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

str(pot)

dim(pot)

summary(pot)

cbind(summary(pot1$Extract_tif12_Band_1))

attach(pot)

names(pot)

#400-500       6.8 - 7.3

#500-600       7.3 - 7.7

#600-800       7.7 – 8.5

#> 800           > 8.5

#23703  # dim(pot)

 

a=WS[WS> 6.8 & WS < 7.29 ]

b=WS[WS> 7.299 & WS < 7.69 ]

c=WS[WS> 7.699 & WS <  8.499 ]

d=WS[WS> 85  ]

z=WS[WS<6.8]

 

A=PD[PD> 400 & PD< 499 ]

B=PD[PD> 499.9 & PD< 599.9]

C=PD[PD> 500.9 & PD< 800 ]

D=PD[PD> 800  ]

1825.99  #km2 ARTA

 

 

 

#CAPACITY FACTOR INTERMITTENCE FACTOR

k=kmm; c=cmm

vi=3; vr=11.5; vo=25;

Pout= exp(-((vi/c)^k)) - exp(-((vr/c)^k))

Pr=((vr/c)^k)  -  ((vi/c)^k)

CF = (Pout/Pr) - exp(-(vo/c)^k); CF

#

#  WEIBULL DISTRIBUTION

#EXTRAPOLATION WIND SPEED | WIND SHEAR COEFICCIENT

 

#names(data)

#v1=w60

#length(v1)

#h1=60; h2=90

#Methodology 1:

#alpha=(0.37-(0.088*log(mean(v1))))/(1-(0.088*log(h1/10)));alpha

#v2=v1*((h2/h1)^alpha);mean(v2)

#write.table(v2,"data.txt")

#Methodology 2 :

#v2=(v1*((h2/h1)^(1/7)));  ko=2.93 ; co=10.07

#c80=co*(80/40)^(0.37-(0.088*log(co)))/(1-0.088*log(80/10)); c80

#k80=ko*( (1-(0.088*log(40/10)))/(1-(0.088*log(80/10))) ); k80 ;c80

 

 

#WEIBULL AND RAYLEIGH DISTRIBUTION :

moy=mean(v2)

sd=(sd(v2)*length(v2))/(length(v2)-1)

count=data.frame(table(v2))

# Kurtosis & Skewness

skew=sum((v2-moy)^3/sd^3)/(length(v2)-1)

kurt=sum((((v2-moy)^4)/(sd^4))-3)/(length(v2)-1)

min=min(v2)

max=max(v2)

rbind(c("Statistic of v2"),moy,sd,skew,kurt,min,max)

 

# After Result of Paralmeter find it                                                 

#Wind Speed Probability WEIBULL          

k;kmm;kmv;kwasp                                                                                                   

c;cmm;cmv;cwasp                                                                                                    

kp=k; cp=c                                                                                                               

vmp=cp* ((1-(1/kp))^(1/kp))      ;round(vmp,3)                                               

vmaxe=cp* ((1+(2/kp))^(1/kp))    ;round(vmaxe,3)                            

vmw=cp*gamma((1+(1/kp)))         ;round(vmw,3)                                            

#

#GRAPHIQUE POWER/ENERGY DENSITY TURBINE  WITH R LIBRARY             #

#doi:10.3390/app8101757                                                                         #

k;kmm;kmv;kwasp                                                                                                    #

c;cmm;cmv;cwasp                                                                                                     #

kp=k; cp=c                                                                                                                #

#

# DENSITY in term of area m²                                                                                 #

rho=1.225 #kg/m3                                                                                                   #

PDW = (rho* (cp^3)*gamma((kp+3)/kp) ) /2; PDW                                          #

PDA = (rho* (mean(v2^3)))/2; PDA                                                                      #

 

# -2First Group Estimation Weibull Distribution

#Empirique de Jestus

kej=(sd/moy)^-1.086 

cej=moy/gamma((1+(1/kej)))

#Maximum-Likelihood Method

kmv=1/(sum(v2^(kej+0.09)*log(v2))/sum(v2^(kej+0.09)) -sum(log(v2))/length(v2))

cmv=(sum(v2^kmv)/length(v2))^(1/kmv)

#Power-Density Method OR  Energy pattern factor method

E=(sum(v2^3)/length(v2))/moy^3

kpd=1+(3.69/E^2)

cpd=moy/gamma((1+(1/kpd)))

#Curving-Fitting Method

kcf=(0.9874/(sd/moy))^1.0983

ccf=moy/gamma((1+(1/kcf)))

 

#require(ForestFit)

#n<-100; alpha<-2; beta<-2; theta<-3

#data<-rweibull(n,shape=alpha,scale=beta)+theta

#

rbind(kej,kmv,kpd,kcf,cej,cmv,cpd,ccf)

 

#Empirical method of Justus/ moment method

cej;kej

cmm=11.391 ;   kmm=2.681

mean(v2); cmm*gamma(1+(1/kmm)); sd(v2);   cmm* sqrt(gamma(1+(2/kmm))-(gamma(1+(1/kmm))^2 ))

 

 

#Multi-Objective Moments (MUOM)

#kmm=(sd/moy)^-1.086 

#cmm=moy/gamma((1+(1/kmm)))

#L1=1/3;L2=1/3;L3=1/3

#k=2.645224; c=10.2183

#L1*(c*gamma(1+(1/k))-mean(v2))^2 + L2*(c^2*gamma(1+(2/k))-mean(v2^2))^2   +   L3*(c^3*gamma(1+(3/k))-mean(v2^3))^2

#k=2.68012; c=10.2201

#L1*(c*gamma(1+(1/k))-mean(v2))^2 + L2*(c^2*gamma(1+(2/k))-mean(v2^2))^2   +   L3*(c^3*gamma(1+(3/k))-mean(v2^3))^2

#k=2.69; c=10.20

#L1*(c*gamma(1+(1/k))-mean(v2))^2 + L2*(c^2*gamma(1+(2/k))-mean(v2^2))^2   +   L3*(c^3*gamma(1+(3/k))-mean(v2^3))^2

 

 

 

 

 

 

# -3-> > > Second Group Estimation Weibull Distribution

#Median and Quartiles Method

cbind(quantile(v2))

Q0

Q1 =  7.0880821           # 25%

Q3 =  13.2096076          # 75%

Q2 =  10.3099377          # 50%

Q4

#kmq=1.573/log(Q3/Q1)

kmq=log(log(1/4)/log(3/4))/log(Q3/Q1)

cmq=Q2/log(2)^(1/kmq)

 

 

#*====================*Least square Method      Or    Graphical method

F=1-exp(-(v2/(cmm+0.09))^(kmm+0.09))

x = log(v2)

y =log(-log(1-F))

ls=lm(y~x);summary(ls)

kls=              2.781e+00 

Intercept=       -6.752e+00

cls=exp(-(Intercept/kls))

 

#Modified maximum likelihood Method

frq=hist(v2); dev.off()

#kmml=1/(sum((frq$mids^(kmv+0.09))*log(frq$mids)*frq$density)/sum((frq$mids^(kmv+0.09))*frq$density) -sum(log(frq$mids)*frq$density)/sum(frq$density))

#cmml=(sum(frq$mids^kmml*frq$density)/sum(frq$density))^(1/kmml)

kmml=sum(frq$mids^(kmv+0.09)*log(frq$mids)*frq$density)/((sum(frq$mids^(kmv+0.09)*frq$density))- (sum(log(frq$mids)*frq$density)/sum(frq$density)))

cmml=((1/sum(frq$density))*sum(frq$mids^kmml*frq$density))^(1/kmml)

 

 

#Empirical method of lysen (EML)

keml=(sd/moy)^-1.086

ceml=moy/gamma(1+(1/keml))

ceml2=mean(v2)*(0.568+(0.433/keml))^(-(1/keml))

#__________________________________________

rbind(kmq,keml,kls,kmml,k, cmq,ceml,cls,cmml,c)

 

#-3-> > > Third Group Estimation Weibull Distribution

#Equivalent Energy Method

kee=1/(sum((frq$mids^(kmv+0.09))*log(frq$mids)*frq$density)/sum((frq$mids^(kmv+0.09))*frq$density) -sum(log(frq$mids)*frq$density)/sum(frq$density))

#cee=((moy^3)/gamma(1+(3/kee)))^(1/3)

cee=((moy^3)/gamma(1+(3/kmm)))^(1/3)

#Probability weighted moments Method(based on power density method)

#sort(x, decreasing = FALSE, na.last = TRUE)

#vi=sort(v2, decreasing = FALSE, na.last = TRUE)

# ATTENTION A TRIER POUR  EVITER L'ERREUR

#Cbar = mean(v2)/      (2/n(n-1))*      sum(vi*(n-i) ==  A TRIER !

Cbar=moy/( (2/(length(v2)*(length(v2)-1)))  *      1.05801E+11          )

kpwm=log(2)/log(Cbar)

cpwm=(moy^3/gamma(1+(3/kpwm)))^(1/3)

#*====================*WAsP Method

F=1-exp(-(mean(v2)/(cmm+0.05))^(kmm+0.05))

cwasp=(sum(v2^3)/(length(v2)*gamma((3/(kmm+0.05))+1)))^(1/3)

X=1-mean(F) 

w1=-log(X)

#log(w1)==log((moy/cwasp)^k)

#log((moy/cwasp)^k)=k*log(moy)-log(cwasp)=k*log(moy/cwasp)

kwasp = log(w1)/log(moy/cwasp)

 

#z=1-F; w=-log(z);w

#x=(mean(v2)/((sum(v2^3))/(length(v2)*gamma((3/kmm)+1))^(1/3)))^2.61; x

#*====================*Weighted Least Square Method

F=1-exp(-(v2/(cmm+0.09))^(kmm+0.09))

x = log(v2)

y =log(-log(1-F))

w=((1-F)*log(1-F))^2

library(MASS)

summary(rlm(y~x,weights = 1/w))

kwls=                    2.780600e+00  

Intercept=              -6.752000e+00

cwls=exp(-(Intercept/kwls))

#

rbind(kee,kpwm,kwasp,kwls,cee,cpwm,cwasp,cwls)

#OTHER POSSIBILITY OF WEIBULL

#temp <- dput(temp)

#"mle", "mme", "qme", "mge", "mse"

# Fitting method:

#"mme" for 'moment matching estimation'

#mmedist(v2, "weibull", order, start = NULL, fix.arg = NULL, optim.method = "default")

library(fitdistrplus)

x3 <- rbeta(v2,shape1=cmq, shape2=kmq)

mmedist(x3, "beta")$estimate

 

#    "mse" for 'maximum spacing estimation

fitdist(v2, distr = "weibull", method = "mle")

 

#------------"mle" for 'maximum likelihood estimation

mledist(v2, distr="weibull", start = NULL, fix.arg = NULL, optim.method = "default")$estimate

fitdist(v2, distr = "weibull", method = "mle")

 

 

#-------------"qme" for 'quantile matching estimation

qmedist(V_60, "weibull", probs=c(1/3, 2/3))$estimate

 

#------------"mge" for 'maximum goodness-of-fit estimation

#"CvM", "KS", "AD", "ADR", "ADL", "AD2R", "AD2L",

mgedist(V_60, distr="weibull", gof = "ADL", start = NULL, fix.arg = NULL, optim.method = "default")

#  The mgedist function numerically maximizes goodness-of-fit:or minimizes a goodness-of-fit distance coded by the argument gof.

#  One may use one of the classical distances defined in Stephens (1986)

#  the Cramer-von Mises distance ("CvM")

#  the Kolmogorov-Smirnov distance ("KS")

#  the Anderson-Darling distance ("AD")

#which gives more weight to the tails of the distribution, or one of the variants of this last distance proposed by Luceno (2006).

#  the right-tail AD ("ADR")

#  the left-tail AD  ("ADL")

 

require(MASS)

library(fitdistrplus)

 

fit.weibull <- fitdist(V_60, distr = "weibull", method = "mle", lower = c(0, 0))

fit.weibull2 <- fitdist(V_60, distr = "weibull", method = "mse", lower = c(0, 0))

#fit.gamma <- fitdist(temp, distr = "gamma", method = "mle", lower = c(0, 0), start = list(scale = 1, shape = 1))

 

#fit.weibull <- fitdist(temp, distr = "weibull", method = "mle", lower = c(0, 0))

#fit.gamma <- fitdist(temp, distr = "gamma", method = "mle", lower = c(0, 0), start = list(scale = 1, shape = 1))

plot(fit.weibull)

#plot(fit.gamma)

gofstat(list(fit.weibull, fit.weibull2))

#    ESTIMATION OTHER WEIBULL  2

#https://rdrr.io/cran/Temporal/man/fit.Weibull.html

#library(Temporal)

# Generate Weibull data with 20% censoring

#data = genData(n=1e3,dist="weibull",theta=c(2,2),p=0.2);

# Estimate

#fit = fitParaSurv(time=data$time,status=data$status,dist="weibull")

#BOOSTRAPE SUIMULATION ESTIMATION

#Boodist

 

 

#CREATION OF FREQUENCYS RELATIVE OF  WIND SPEED M/S

#using Excel lead to replace by element specific and not by number

#data$Variable[data$Variable<=100]<-1

#data$Variable[data$Variable %in% c("maison","appart","truc")]<-"habitat"

goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

str(goubet); attach(goubet); names(goubet)

 

effectif<-table(V_60); cbind(effectif)

frequence<-(effectif)/length(V_60); cbind(frequence)

#   data$V_60[data$V_60==            ]<- 

 

 

# GOBAAD STATION

#################

 

data$v2[data$v2==  0.4     ]<-  1.113932e-02

data$v2[data$v2==  0.5     ]<-  3.970328e-03

data$v2[data$v2==  0.6     ]<-  3.708959e-03

data$v2[data$v2==  0.7     ]<-  4.007667e-03

data$v2[data$v2==  0.8     ]<-  4.468175e-03

data$v2[data$v2==  0.9     ]<-  4.455729e-03

data$v2[data$v2==  1       ]<-  4.754437e-03

data$v2[data$v2==  1.1     ]<-  5.015807e-03

data$v2[data$v2==  1.2     ]<-  5.351853e-03

data$v2[data$v2==  1.3     ]<-  6.111070e-03

data$v2[data$v2==  1.4     ]<-  7.106763e-03

data$v2[data$v2==  1.5     ]<-  6.795609e-03

data$v2[data$v2==  1.6     ]<-  7.704179e-03

data$v2[data$v2==  1.7     ]<-  7.803749e-03

data$v2[data$v2==  1.8     ]<-  8.027780e-03

data$v2[data$v2==  1.9     ]<-  8.239365e-03

data$v2[data$v2==  2       ]<-  8.674981e-03

data$v2[data$v2==  2.2     ]<-  1.030543e-02

data$v2[data$v2==  2.3     ]<-  9.409305e-03

data$v2[data$v2==  2.4     ]<-  1.026809e-02

data$v2[data$v2==  2.5     ]<-  1.061658e-02

data$v2[data$v2==  2.6     ]<-  1.044234e-02

data$v2[data$v2==  2.7     ]<-  1.138825e-02

data$v2[data$v2==  2.8     ]<-  1.145048e-02

data$v2[data$v2==  2.9     ]<-  1.258308e-02

data$v2[data$v2==  3       ]<-  1.257063e-02

data$v2[data$v2==  3.1     ]<-  1.258308e-02

data$v2[data$v2==  3.2     ]<-  1.255819e-02

data$v2[data$v2==  3.3     ]<-  1.316805e-02

data$v2[data$v2==  3.4     ]<-  1.375302e-02

data$v2[data$v2==  3.5     ]<-  1.279466e-02

data$v2[data$v2==  3.6     ]<-  1.374057e-02

data$v2[data$v2==  3.7     ]<-  1.323028e-02

data$v2[data$v2==  3.8     ]<-  1.448734e-02

data$v2[data$v2==  3.9     ]<-  1.346676e-02

data$v2[data$v2==  4       ]<-  1.483584e-02

data$v2[data$v2==  4.1     ]<-  1.449979e-02

data$v2[data$v2==  4.2     ]<-  1.494785e-02

data$v2[data$v2==  4.3     ]<-  1.457447e-02

data$v2[data$v2==  4.4     ]<-  1.513454e-02

data$v2[data$v2==  4.5     ]<-  1.584397e-02

data$v2[data$v2==  4.6     ]<-  1.550793e-02

data$v2[data$v2==  4.7     ]<-  1.603067e-02

data$v2[data$v2==  4.8     ]<-  1.583153e-02

data$v2[data$v2==  4.9     ]<-  1.569462e-02

data$v2[data$v2==  5       ]<-  1.588131e-02

data$v2[data$v2==  5.1     ]<-  1.524656e-02

data$v2[data$v2==  5.2     ]<-  1.497274e-02

data$v2[data$v2==  5.3     ]<-  1.461180e-02

data$v2[data$v2==  5.4     ]<-  1.454957e-02

data$v2[data$v2==  5.5     ]<-  1.519677e-02

data$v2[data$v2==  5.6     ]<-  1.448734e-02

data$v2[data$v2==  5.7     ]<-  1.350409e-02

data$v2[data$v2==  5.8     ]<-  1.431310e-02

data$v2[data$v2==  5.9     ]<-  1.213502e-02

data$v2[data$v2==  6       ]<-  1.290668e-02

data$v2[data$v2==  6.1     ]<-  1.311826e-02

data$v2[data$v2==  6.2     ]<-  1.269509e-02

data$v2[data$v2==  6.3     ]<-  1.171185e-02

data$v2[data$v2==  6.4     ]<-  1.186120e-02

data$v2[data$v2==  6.5     ]<-  1.115177e-02

data$v2[data$v2==  6.6     ]<-  1.059169e-02

data$v2[data$v2==  6.7     ]<-  1.081572e-02

data$v2[data$v2==  6.8     ]<-  9.994275e-03

data$v2[data$v2==  6.9     ]<-  9.608443e-03

data$v2[data$v2==  7       ]<-  9.160381e-03

data$v2[data$v2==  7.1     ]<-  9.770244e-03

data$v2[data$v2==  7.2     ]<-  9.658228e-03

data$v2[data$v2==  7.3     ]<-  8.625196e-03

data$v2[data$v2==  7.4     ]<-  8.674981e-03

data$v2[data$v2==  7.5     ]<-  7.940657e-03

data$v2[data$v2==  7.6     ]<-  7.915764e-03

data$v2[data$v2==  7.7     ]<-  7.915764e-03

data$v2[data$v2==  7.8     ]<-  7.554825e-03

data$v2[data$v2==  7.9     ]<-  7.641949e-03

data$v2[data$v2==  8       ]<-  7.604610e-03

data$v2[data$v2==  8.1     ]<-  7.231225e-03

data$v2[data$v2==  8.2     ]<-  6.696040e-03

data$v2[data$v2==  8.3     ]<-  6.123516e-03

data$v2[data$v2==  8.4     ]<-  5.650561e-03

data$v2[data$v2==  8.5     ]<-  6.036393e-03

data$v2[data$v2==  8.6     ]<-  5.438976e-03

data$v2[data$v2==  8.7     ]<-  5.401638e-03

data$v2[data$v2==  8.8     ]<-  5.376746e-03

data$v2[data$v2==  8.9     ]<-  5.040699e-03

data$v2[data$v2==  9       ]<-  5.177607e-03

data$v2[data$v2==  9.1     ]<-  5.003360e-03

data$v2[data$v2==  9.2     ]<-  4.393498e-03

data$v2[data$v2==  9.3     ]<-  4.331267e-03

data$v2[data$v2==  9.4     ]<-  4.169467e-03

data$v2[data$v2==  9.5     ]<-  4.418390e-03

data$v2[data$v2==  9.6     ]<-  3.771190e-03

data$v2[data$v2==  9.7     ]<-  3.796082e-03

data$v2[data$v2==  9.8     ]<-  3.920544e-03

data$v2[data$v2==  9.9     ]<-  4.231698e-03

data$v2[data$v2==  10      ]<-  3.211112e-03

data$v2[data$v2==  10.1    ]<-  2.987081e-03

data$v2[data$v2==  10.2    ]<-  2.812834e-03

data$v2[data$v2==  10.3    ]<-  3.310681e-03

data$v2[data$v2==  10.4    ]<-  2.949742e-03

data$v2[data$v2==  10.5    ]<-  2.738157e-03

data$v2[data$v2==  10.6    ]<-  2.787942e-03

data$v2[data$v2==  10.7    ]<-  2.837727e-03

data$v2[data$v2==  10.8    ]<-  2.314988e-03

data$v2[data$v2==  10.9    ]<-  2.252757e-03

data$v2[data$v2==  11      ]<-  2.128295e-03

data$v2[data$v2==  11.1    ]<-  2.128295e-03

data$v2[data$v2==  11.2    ]<-  2.115849e-03

data$v2[data$v2==  11.3    ]<-  1.941603e-03

data$v2[data$v2==  11.4    ]<-  1.468648e-03

data$v2[data$v2==  11.5    ]<-  1.530879e-03

data$v2[data$v2==  11.6    ]<-  1.356633e-03

data$v2[data$v2==  11.7    ]<-  1.555771e-03

data$v2[data$v2==  11.8    ]<-  1.431310e-03

data$v2[data$v2==  11.9    ]<-  1.294402e-03

data$v2[data$v2==  12      ]<-  1.306848e-03

data$v2[data$v2==  12.1    ]<-  1.095263e-03

data$v2[data$v2==  12.2    ]<-  1.169940e-03

data$v2[data$v2==  12.3    ]<-  1.232171e-03

data$v2[data$v2==  12.4    ]<-  9.832475e-04

data$v2[data$v2==  12.5    ]<-  1.157494e-03

data$v2[data$v2==  12.6    ]<-  9.334628e-04

data$v2[data$v2==  12.7    ]<-  8.961243e-04

data$v2[data$v2==  12.8    ]<-  7.716626e-04

data$v2[data$v2==  12.9    ]<-  1.033032e-03

data$v2[data$v2==  13      ]<-  8.090011e-04

data$v2[data$v2==  13.1    ]<-  6.596470e-04

data$v2[data$v2==  13.2    ]<-  6.223085e-04

data$v2[data$v2==  13.3    ]<-  6.596470e-04

data$v2[data$v2==  13.4    ]<-  6.720932e-04

data$v2[data$v2==  13.5    ]<-  5.600777e-04

data$v2[data$v2==  13.6    ]<-  4.729545e-04

data$v2[data$v2==  13.7    ]<-  5.102930e-04

data$v2[data$v2==  13.8    ]<-  2.862619e-04

data$v2[data$v2==  13.9    ]<-  2.613696e-04

data$v2[data$v2==  14      ]<-  4.107236e-04

data$v2[data$v2==  14.1    ]<-  2.738157e-04

data$v2[data$v2==  14.2    ]<-  2.364772e-04

data$v2[data$v2==  14.3    ]<-  2.115849e-04

data$v2[data$v2==  14.4    ]<-  1.618002e-04

data$v2[data$v2==  14.5    ]<-  1.244617e-04

data$v2[data$v2==  14.6    ]<-  9.956936e-05

data$v2[data$v2==  14.7    ]<-  6.223085e-05

data$v2[data$v2==  14.8    ]<-  8.712319e-05

data$v2[data$v2==  14.9    ]<-  7.467702e-05

data$v2[data$v2==  15      ]<-  4.978468e-05

data$v2[data$v2==  15.1    ]<-  1.369079e-04

data$v2[data$v2==  15.2    ]<-  6.223085e-05

data$v2[data$v2==  15.3    ]<-  4.978468e-05

data$v2[data$v2==  15.4    ]<-  3.733851e-05

data$v2[data$v2==  15.5    ]<-  4.978468e-05

data$v2[data$v2==  15.6    ]<-  6.223085e-05

data$v2[data$v2==  15.7    ]<-  2.489234e-05

data$v2[data$v2==  15.8    ]<-  1.244617e-05

data$v2[data$v2==  15.9    ]<-  2.489234e-05

data$v2[data$v2==  16      ]<-  3.733851e-05

data$v2[data$v2==  16.1    ]<-  2.489234e-05

data$v2[data$v2==  16.2    ]<-  4.978468e-05

data$v2[data$v2==  16.3    ]<-  1.244617e-05

data$v2[data$v2==  16.4    ]<-  3.733851e-05

data$v2[data$v2==  16.5    ]<-  2.489234e-05

data$v2[data$v2==  16.6    ]<-  1.244617e-05

data$v2[data$v2==  16.7    ]<-  2.489234e-05

data$v2[data$v2==  16.8    ]<-  1.244617e-05

data$v2[data$v2==  17.3    ]<-  1.244617e-05

data$v2[data$v2==  17.5    ]<-  2.489234e-05

data$v2[data$v2==  17.9    ]<-  1.244617e-05

data$v2[data$v2==  18.1    ]<-  1.244617e-05

data$v2[data$v2==  18.9    ]<-  1.244617e-05

data$v2[data$v2==  20.3    ]<-  1.244617e-05

data$v2[data$v2==  21.5    ]<-  1.244617e-05

 

data=data.frame(data$v2)

write.table(data, "exportR.txt")

getwd()    #              setwd()

data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

str(data); str(data)

 

# GOUBBET   STATION

goubet$F_60[goubet$F_60==0.4  ]<- 3.986314e-03

goubet$F_60[goubet$F_60==0.5  ]<- 1.151360e-03

goubet$F_60[goubet$F_60==0.6  ]<- 1.031880e-03

goubet$F_60[goubet$F_60==0.7  ]<- 9.015370e-04

goubet$F_60[goubet$F_60==0.8  ]<- 1.042742e-03

goubet$F_60[goubet$F_60==0.9  ]<- 1.238256e-03

goubet$F_60[goubet$F_60==1    ]<- 1.118775e-03

goubet$F_60[goubet$F_60==1.1  ]<- 1.238256e-03

goubet$F_60[goubet$F_60==1.2  ]<- 1.292565e-03

goubet$F_60[goubet$F_60==1.3  ]<- 1.422908e-03

goubet$F_60[goubet$F_60==1.4  ]<- 1.336013e-03

goubet$F_60[goubet$F_60==1.5  ]<- 1.227394e-03

goubet$F_60[goubet$F_60==1.6  ]<- 1.629284e-03

goubet$F_60[goubet$F_60==1.7  ]<- 1.813936e-03

goubet$F_60[goubet$F_60==1.8  ]<- 1.857383e-03

goubet$F_60[goubet$F_60==1.9  ]<- 1.911693e-03

goubet$F_60[goubet$F_60==2    ]<- 2.139793e-03

goubet$F_60[goubet$F_60==2.1  ]<- 2.270135e-03

goubet$F_60[goubet$F_60==2.2  ]<- 2.563406e-03

goubet$F_60[goubet$F_60==2.3  ]<- 2.204964e-03

goubet$F_60[goubet$F_60==2.4  ]<- 2.737197e-03

goubet$F_60[goubet$F_60==2.5  ]<- 2.519959e-03

goubet$F_60[goubet$F_60==2.6  ]<- 2.856677e-03

goubet$F_60[goubet$F_60==2.7  ]<- 3.356324e-03

goubet$F_60[goubet$F_60==2.8  ]<- 3.215120e-03

goubet$F_60[goubet$F_60==2.9  ]<- 3.269429e-03

goubet$F_60[goubet$F_60==3    ]<- 3.660457e-03

goubet$F_60[goubet$F_60==3.1  ]<- 3.660457e-03

goubet$F_60[goubet$F_60==3.2  ]<- 3.584424e-03

goubet$F_60[goubet$F_60==3.3  ]<- 4.257861e-03

goubet$F_60[goubet$F_60==3.4  ]<- 4.018900e-03

goubet$F_60[goubet$F_60==3.5  ]<- 4.399066e-03

goubet$F_60[goubet$F_60==3.6  ]<- 4.757508e-03

goubet$F_60[goubet$F_60==3.7  ]<- 4.638027e-03

goubet$F_60[goubet$F_60==3.8  ]<- 4.974746e-03

goubet$F_60[goubet$F_60==3.9  ]<- 5.029056e-03

goubet$F_60[goubet$F_60==4    ]<- 5.354912e-03

goubet$F_60[goubet$F_60==4.1  ]<- 5.344050e-03

goubet$F_60[goubet$F_60==4.2  ]<- 5.550426e-03

goubet$F_60[goubet$F_60==4.3  ]<- 5.626460e-03

goubet$F_60[goubet$F_60==4.4  ]<- 5.865421e-03

goubet$F_60[goubet$F_60==4.5  ]<- 6.202140e-03

goubet$F_60[goubet$F_60==4.6  ]<- 6.386792e-03

goubet$F_60[goubet$F_60==4.7  ]<- 6.788682e-03

goubet$F_60[goubet$F_60==4.8  ]<- 6.734372e-03

goubet$F_60[goubet$F_60==4.9  ]<- 6.289035e-03

goubet$F_60[goubet$F_60==5    ]<- 6.636615e-03

goubet$F_60[goubet$F_60==5.1  ]<- 6.832129e-03

goubet$F_60[goubet$F_60==5.2  ]<- 7.223158e-03

goubet$F_60[goubet$F_60==5.3  ]<- 7.559876e-03

goubet$F_60[goubet$F_60==5.4  ]<- 7.299191e-03

goubet$F_60[goubet$F_60==5.5  ]<- 6.908163e-03

goubet$F_60[goubet$F_60==5.6  ]<- 7.581600e-03

goubet$F_60[goubet$F_60==5.7  ]<- 7.896595e-03

goubet$F_60[goubet$F_60==5.8  ]<- 7.559876e-03

goubet$F_60[goubet$F_60==5.9  ]<- 7.299191e-03

goubet$F_60[goubet$F_60==6    ]<- 7.092815e-03

goubet$F_60[goubet$F_60==6.1  ]<- 7.679357e-03

goubet$F_60[goubet$F_60==6.2  ]<- 7.244881e-03

goubet$F_60[goubet$F_60==6.3  ]<- 7.549014e-03

goubet$F_60[goubet$F_60==6.4  ]<- 7.777114e-03

goubet$F_60[goubet$F_60==6.5  ]<- 7.440395e-03

goubet$F_60[goubet$F_60==6.6  ]<- 7.016782e-03

goubet$F_60[goubet$F_60==6.7  ]<- 7.603324e-03

goubet$F_60[goubet$F_60==6.8  ]<- 7.092815e-03

goubet$F_60[goubet$F_60==6.9  ]<- 7.635909e-03

goubet$F_60[goubet$F_60==7    ]<- 7.494705e-03

goubet$F_60[goubet$F_60==7.1  ]<- 7.885733e-03

goubet$F_60[goubet$F_60==7.2  ]<- 8.613480e-03

goubet$F_60[goubet$F_60==7.3  ]<- 8.113833e-03

goubet$F_60[goubet$F_60==7.4  ]<- 8.146418e-03

goubet$F_60[goubet$F_60==7.5  ]<- 8.570032e-03

goubet$F_60[goubet$F_60==7.6  ]<- 7.635909e-03

goubet$F_60[goubet$F_60==7.7  ]<- 7.896595e-03

goubet$F_60[goubet$F_60==7.8  ]<- 8.515723e-03

goubet$F_60[goubet$F_60==7.9  ]<- 7.907457e-03

goubet$F_60[goubet$F_60==8    ]<- 8.309347e-03

goubet$F_60[goubet$F_60==8.1  ]<- 8.689513e-03

goubet$F_60[goubet$F_60==8.2  ]<- 8.895889e-03

goubet$F_60[goubet$F_60==8.3  ]<- 8.906751e-03

goubet$F_60[goubet$F_60==8.4  ]<- 9.362950e-03

goubet$F_60[goubet$F_60==8.5  ]<- 9.362950e-03

goubet$F_60[goubet$F_60==8.6  ]<- 9.688807e-03

goubet$F_60[goubet$F_60==8.7  ]<- 8.819856e-03

goubet$F_60[goubet$F_60==8.8  ]<- 9.764840e-03

goubet$F_60[goubet$F_60==8.9  ]<- 9.895183e-03

goubet$F_60[goubet$F_60==9    ]<- 9.992940e-03

goubet$F_60[goubet$F_60==9.1  ]<- 9.395536e-03

goubet$F_60[goubet$F_60==9.2  ]<- 1.006897e-02

goubet$F_60[goubet$F_60==9.3  ]<- 9.558464e-03

goubet$F_60[goubet$F_60==9.4  ]<- 1.026449e-02

goubet$F_60[goubet$F_60==9.5  ]<- 9.656221e-03

goubet$F_60[goubet$F_60==9.6  ]<- 9.938630e-03

goubet$F_60[goubet$F_60==9.7  ]<- 9.286917e-03

goubet$F_60[goubet$F_60==9.8  ]<- 9.721392e-03

goubet$F_60[goubet$F_60==9.9  ]<- 9.873459e-03

goubet$F_60[goubet$F_60==10   ]<- 8.863303e-03

goubet$F_60[goubet$F_60==10.1 ]<- 9.906045e-03

goubet$F_60[goubet$F_60==10.2 ]<- 9.916907e-03

goubet$F_60[goubet$F_60==10.3 ]<- 9.286917e-03

goubet$F_60[goubet$F_60==10.4 ]<- 9.960354e-03

goubet$F_60[goubet$F_60==10.5 ]<- 9.058817e-03

goubet$F_60[goubet$F_60==10.6 ]<- 1.010156e-02

goubet$F_60[goubet$F_60==10.7 ]<- 8.678651e-03

goubet$F_60[goubet$F_60==10.8 ]<- 8.722099e-03

goubet$F_60[goubet$F_60==10.9 ]<- 8.874165e-03

goubet$F_60[goubet$F_60==11   ]<- 8.287623e-03

goubet$F_60[goubet$F_60==11.1 ]<- 8.950198e-03

goubet$F_60[goubet$F_60==11.2 ]<- 7.896595e-03

goubet$F_60[goubet$F_60==11.3 ]<- 9.004508e-03

goubet$F_60[goubet$F_60==11.4 ]<- 7.820562e-03

goubet$F_60[goubet$F_60==11.5 ]<- 8.287623e-03

goubet$F_60[goubet$F_60==11.6 ]<- 8.450551e-03

goubet$F_60[goubet$F_60==11.7 ]<- 8.852441e-03

goubet$F_60[goubet$F_60==11.8 ]<- 9.352088e-03

goubet$F_60[goubet$F_60==11.9 ]<- 8.982784e-03

goubet$F_60[goubet$F_60==12   ]<- 8.950198e-03

goubet$F_60[goubet$F_60==12.1 ]<- 8.841579e-03

goubet$F_60[goubet$F_60==12.2 ]<- 8.787270e-03

goubet$F_60[goubet$F_60==12.3 ]<- 8.472275e-03

goubet$F_60[goubet$F_60==12.4 ]<- 9.167436e-03

goubet$F_60[goubet$F_60==12.5 ]<- 8.374518e-03

goubet$F_60[goubet$F_60==12.6 ]<- 8.689513e-03

goubet$F_60[goubet$F_60==12.7 ]<- 8.765546e-03

goubet$F_60[goubet$F_60==12.8 ]<- 8.472275e-03

goubet$F_60[goubet$F_60==12.9 ]<- 7.896595e-03

goubet$F_60[goubet$F_60==13   ]<- 8.222452e-03

goubet$F_60[goubet$F_60==13.1 ]<- 8.070385e-03

goubet$F_60[goubet$F_60==13.2 ]<- 6.984196e-03

goubet$F_60[goubet$F_60==13.3 ]<- 6.451963e-03

goubet$F_60[goubet$F_60==13.4 ]<- 7.494705e-03

goubet$F_60[goubet$F_60==13.5 ]<- 6.669201e-03

goubet$F_60[goubet$F_60==13.6 ]<- 6.126107e-03

goubet$F_60[goubet$F_60==13.7 ]<- 6.527997e-03

goubet$F_60[goubet$F_60==13.8 ]<- 6.245587e-03

goubet$F_60[goubet$F_60==13.9 ]<- 5.832835e-03

goubet$F_60[goubet$F_60==14   ]<- 5.724217e-03

goubet$F_60[goubet$F_60==14.1 ]<- 5.702493e-03

goubet$F_60[goubet$F_60==14.2 ]<- 5.191984e-03

goubet$F_60[goubet$F_60==14.3 ]<- 5.311465e-03

goubet$F_60[goubet$F_60==14.4 ]<- 4.388204e-03

goubet$F_60[goubet$F_60==14.5 ]<- 4.942160e-03

goubet$F_60[goubet$F_60==14.6 ]<- 4.018900e-03

goubet$F_60[goubet$F_60==14.7 ]<- 4.008038e-03

goubet$F_60[goubet$F_60==14.8 ]<- 3.573562e-03

goubet$F_60[goubet$F_60==14.9 ]<- 3.486667e-03

goubet$F_60[goubet$F_60==15   ]<- 3.204258e-03

goubet$F_60[goubet$F_60==15.1 ]<- 3.258567e-03

goubet$F_60[goubet$F_60==15.2 ]<- 3.269429e-03

goubet$F_60[goubet$F_60==15.3 ]<- 3.139087e-03

goubet$F_60[goubet$F_60==15.4 ]<- 2.987020e-03

goubet$F_60[goubet$F_60==15.5 ]<- 2.031174e-03

goubet$F_60[goubet$F_60==15.6 ]<- 2.672025e-03

goubet$F_60[goubet$F_60==15.7 ]<- 2.204964e-03

goubet$F_60[goubet$F_60==15.8 ]<- 1.966002e-03

goubet$F_60[goubet$F_60==15.9 ]<- 1.955140e-03

goubet$F_60[goubet$F_60==16   ]<- 1.748764e-03

goubet$F_60[goubet$F_60==16.1 ]<- 1.803074e-03

goubet$F_60[goubet$F_60==16.2 ]<- 1.651007e-03

goubet$F_60[goubet$F_60==16.3 ]<- 1.303427e-03

goubet$F_60[goubet$F_60==16.4 ]<- 1.292565e-03

goubet$F_60[goubet$F_60==16.5 ]<- 1.422908e-03

goubet$F_60[goubet$F_60==16.6 ]<- 1.118775e-03

goubet$F_60[goubet$F_60==16.7 ]<- 1.183946e-03

goubet$F_60[goubet$F_60==16.8 ]<- 9.341226e-04

goubet$F_60[goubet$F_60==16.9 ]<- 9.341226e-04

goubet$F_60[goubet$F_60==17   ]<- 7.494705e-04

goubet$F_60[goubet$F_60==17.1 ]<- 6.951610e-04

goubet$F_60[goubet$F_60==17.2 ]<- 5.756802e-04

goubet$F_60[goubet$F_60==17.3 ]<- 6.734372e-04

goubet$F_60[goubet$F_60==17.4 ]<- 4.887851e-04

goubet$F_60[goubet$F_60==17.5 ]<- 4.236138e-04

goubet$F_60[goubet$F_60==17.6 ]<- 3.258567e-04

goubet$F_60[goubet$F_60==17.7 ]<- 3.149948e-04

goubet$F_60[goubet$F_60==17.8 ]<- 4.236138e-04

goubet$F_60[goubet$F_60==17.9 ]<- 2.498235e-04

goubet$F_60[goubet$F_60==18   ]<- 3.149948e-04

goubet$F_60[goubet$F_60==18.1 ]<- 3.041329e-04

goubet$F_60[goubet$F_60==18.2 ]<- 2.715473e-04

goubet$F_60[goubet$F_60==18.3 ]<- 2.824092e-04

goubet$F_60[goubet$F_60==18.4 ]<- 1.086189e-04

goubet$F_60[goubet$F_60==18.5 ]<- 1.520665e-04

goubet$F_60[goubet$F_60==18.6 ]<- 2.063759e-04

goubet$F_60[goubet$F_60==18.7 ]<- 2.280997e-04

goubet$F_60[goubet$F_60==18.8 ]<- 2.172378e-04

goubet$F_60[goubet$F_60==18.9 ]<- 1.955140e-04

goubet$F_60[goubet$F_60==19   ]<- 1.520665e-04

goubet$F_60[goubet$F_60==19.1 ]<- 1.086189e-04

goubet$F_60[goubet$F_60==19.2 ]<- 5.430946e-05

goubet$F_60[goubet$F_60==19.3 ]<- 5.430946e-05

goubet$F_60[goubet$F_60==19.4 ]<- 3.258567e-05

goubet$F_60[goubet$F_60==19.5 ]<- 2.172378e-05

goubet$F_60[goubet$F_60==19.9 ]<- 1.086189e-05

goubet$F_60[goubet$F_60==20.3 ]<- 1.086189e-05

goubet$F_60[goubet$F_60==20.8 ]<- 1.086189e-05

 

data=data.frame(goubet$F_60)

write.table(data, "exportR.txt")

getwd()    #              setwd()

r<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

str(r)

 

# NEW QUICK WAY

POUT=0.5*1.225*(cmm^3)*gamma((kmm+3)/kmm); POUT

y=hist(v2, freq=TRUE) #breaks=60

#kmm  kmv  kpd  kcf  kmq  keml  kls  kmml  kee kpwm kwasp kwls

#weibullmm=(kmm/cmm)*((v2/cmm)^(kmm-1))*exp(-((v2/cmm)^kmm))        #Long Way

hist(v2,breaks = "Sturges", freq=F)

summary(v2)

cbind(y$density)

cbind(y$mids)

cbind(y$counts)

#cbind(y$breaks)

 

###

weibullj=(kmm/cmm)*((y$mids/cmm)^(kmm-1))*exp(-((y$mids/cmm)^kmm))  #Short Way

cbind(weibullj)

 

weibullmv=(kmv/cmv)*((y$mids/cmv)^(kmv-1))*exp(-((y$mids/cmv)^kmv))

weibullwasp=(kwasp/cwasp)*((y$mids/cwasp)^(kwasp-1))*exp(-((y$mids/cwasp)^kwasp))

weibullmmn=(k/c)*((y$mids/c)^(k-1))*exp(-((y$mids/c)^k))

###

 

weibullp=(kpd/cpd)*((y$mids/cpd)^(kpd-1))*exp(-((y$mids/cpd)^kpd))

weibullf=(kcf/ccf)*((y$mids/ccf)^(kcf-1))*exp(-((y$mids/ccf)^kcf))

 

weibullq=(kmq/cmq)*((y$mids/cmq)^(kmq-1))*exp(-((y$mids/cmq)^kmq))

weibulll=(keml/ceml)*((y$mids/ceml)^(keml-1))*exp(-((y$mids/ceml)^keml))

weibulls=(kls/cls)*((y$mids/cls)^(kls-1))*exp(-((y$mids/cls)^kls))

weibullmm=(kmml/cmml)*((y$mids/cmml)^(kmml-1))*exp(-((y$mids/cmml)^kmml))

 

weibulle=(kee/cee)*((y$mids/cee)^(kee-1))*exp(-((y$mids/cee)^kee))

weibullw=(kpwm/cpwm)*((y$mids/cpwm)^(kpwm-1))*exp(-((y$mids/cpwm)^kpwm))

weibullwa=(kwasp/cwasp)*((y$mids/cwasp)^(kwasp-1))*exp(-((y$mids/cwasp)^kwasp))

weibullwl=(kwls/cwls)*((y$mids/cwls)^(kwls-1))*exp(-((y$mids/cwls)^kwls))

 

FCm=1-exp(-((y$mids/cmm)^kmm))

FCv=1-exp(-((y$mids/cmv)^kmv))

FCwa=1-exp(-((y$mids/cwasp)^kwasp))

FCmm=1-exp(-((y$mids/c)^k))

 

cbind(y$mids,y$density,weibullm,weibullv,weibullwa,weibullmm, FCm, FCv,FCwa,FCmm)

 

FCp=1-exp(-((y$mids/cpd)^kpd))

FCf=1-exp(-((y$mids/ccf)^kcf))

cbind(y$mids,y$density,weibullm,weibullv,weibullp,weibullf, weibullmse, FCm, FCv,FCp,FCf,Fmse)

 

 

#Weibull MSE

k=mean(kmm, kmv, kpd,kcf)+0.15; k

c=mean(cmm, cmv, cpd,kccf)+0.19; c

weibullmse=(k/c)*((y$mids/c)^(k-1))*exp(-((y$mids/c)^k))

Fmse=1-exp(-((y$mids/c)^k))

#1.810703e-07

MSE = (sum(weibullmse-y$density)^2)/length(weibullmse); MSE

rmse=sqrt(sum((y$density-weibullmse)^2)/length(y$density)); rmse

R2= 1-(sum((y$density-weibullmse)^2)/sum((y$density-mean(y$density) )^2)); R2

# AUTOMATIC EN HAUT FONCTION PAR DEFAUT

 

#Weibull Hybrid

# V=0 supérieure ou égale à 15%.

# ffo=fvo

# weibull= (1-ffo)*(kmm/cmm)*((y$mids/cmm)^(kmm-1))*exp(-((y$mids/cmm)^kmm))

#

#GENERAL RESULT

rbind(kmm,kmv,kpd,kcf,cmm,cmv,cpd,ccf)

rbind(kmq,keml,kls,kmml,k, cmq,ceml,cls,cmml,c)

rbind(kee,kpwm,kwasp,kwls,cee,cpwm,cwasp,cwls)

 

weib=weibullej

R2= 1-(sum((y$density-weib)^2)/sum((y$density-mean(y$density) )^2))     

MAE=sum(abs((y$density-weib)/1))/length(weib)                        

round(RMSE,5); round(R2,5);round(MAE,5)

 

#weibullej  weibullmm weibullmv  weibullwasp  weibullmq weibulleml weibullpd

rbind(kej,kmv,kpd,keml,kwasp,kmq,kmm, cmm, cmq, cwasp, cej,cmv,cpd,ceml2)

y=hist(v2, prob=F); dev.off()  # breaks=85

cbind( y$mids,y$density)

ceml=ceml2

 

#weibullej  weibullmm weibullmv  weibullwasp  weibullmq weibulleml weibullpd

weibullej=(kej/cej)*((y$mids/cej)^(kej-1))*exp(-((y$mids/cej)^kej))  #Short Way

weibullmm=(kmm/cmm)*((y$mids/cmm)^(kmm-1))*exp(-((y$mids/cmm)^kmm))  #Short Way

weibullmv=(kmv/cmv)*((y$mids/cmv)^(kmv-1))*exp(-((y$mids/cmv)^kmv))

weibullwasp=(kwasp/cwasp)*((y$mids/cwasp)^(kwasp-1))*exp(-((y$mids/cwasp)^kwasp))

weibullmq=(kmq/cmq)*((y$mids/cmq)^(kmq-1))*exp(-((y$mids/cmq)^kmq))

weibulleml=(keml/ceml)*((y$mids/ceml)^(keml-1))*exp(-((y$mids/ceml)^keml))

weibullpd=(kpd/cpd)*((y$mids/cpd)^(kpd-1))*exp(-((y$mids/cpd)^kpd))

cbind( y$mids,y$density,weibullej,weibullmm,weibullmv,weibullwasp,weibullmq,weibulleml,weibullpd)

 

FCej=1-exp(-((y$mids/cej)^kej))

FCmm=1-exp(-((y$mids/cmm)^kmm))

FCmv=1-exp(-((y$mids/cmv)^kmv))

FCwasp=1-exp(-((y$mids/cwasp)^kwasp))

FCmq=1-exp(-((y$mids/cmq)^kmq))

FCeml=1-exp(-((y$mids/ceml)^keml))

FCpd=1-exp(-((y$mids/cpd)^kpd))

cbind( y$mids,y$density,FCej,FCmm,FCmv,FCwasp,FCmq,FCeml,FCpd)

 

 

rbind(kej,kmv,kpd,keml,kwasp,kmq,kmm, cmm, cmq, cwasp, cej,cmv,cpd,ceml2)

cbind(round(c(kej,kmv,kpd,keml,kwasp,kmq,kmm, cmm, cmq, cwasp, cej,cmv,cpd,ceml2),3))

#weibullej  weibullmm weibullmv  weibullwasp  weibullmq weibulleml weibullpd

RMSEej=sqrt(sum((y$density-weibullej)^2)/length(y$density))                    

RMSEmm=sqrt(sum((y$density-weibullmm)^2)/length(y$density))                    

RMSEmv=sqrt(sum((y$density-weibullmv)^2)/length(y$density))                    

RMSEwasp=sqrt(sum((y$density-weibullwasp)^2)/length(y$density))                    

RMSEmq=sqrt(sum((y$density-weibullmq)^2)/length(y$density))                    

RMSEeml=sqrt(sum((y$density-weibulleml)^2)/length(y$density))                    

RMSEpd=sqrt(sum((y$density-weibullpd)^2)/length(y$density))                    

 

round(RMSEpd,5  )

 

R2ej= 1-(sum((y$density-weibullej)^2)/sum((y$density-mean(y$density) )^2))     

R2mm= 1-(sum((y$density-weibullmm)^2)/sum((y$density-mean(y$density) )^2))     

R2mv= 1-(sum((y$density-weibullmv)^2)/sum((y$density-mean(y$density) )^2))     

R2wasp= 1-(sum((y$density-weibullwasp)^2)/sum((y$density-mean(y$density) )^2))     

R2mq= 1-(sum((y$density-weibullmq)^2)/sum((y$density-mean(y$density) )^2))     

R2eml= 1-(sum((y$density-weibulleml)^2)/sum((y$density-mean(y$density) )^2))     

R2pd= 1-(sum((y$density-weibullpd)^2)/sum((y$density-mean(y$density) )^2))     

 

round(R2pd,5  )

 

rmse1=sqrt(sum((y$density-weibullm)^2)/length(y$density))

rmse2=sqrt(sum((y$density-weibullv)^2)/length(y$density))

rmse3=sqrt(sum((y$density-weibullp)^2)/length(y$density))

rmse4=sqrt(sum((y$density-weibullf)^2)/length(y$density))

rmse5=sqrt(sum((y$density-weibullq)^2)/length(y$density))

rmse6=sqrt(sum((y$density-weibulll)^2)/length(y$density))

rmse7=sqrt(sum((y$density-weibulls)^2)/length(y$density))

rmse8=sqrt(sum((y$density-weibullmm)^2)/length(y$density))

rmse9=sqrt(sum((y$density-weibulle)^2)/length(y$density))

rmse10=sqrt(sum((y$density-weibullw)^2)/length(y$density))

rmse11=sqrt(sum((y$density-weibullwa)^2)/length(y$density))

rmse12=sqrt(sum((y$density-weibullwl)^2)/length(y$density))

rbind(rmse1,rmse2,rmse3,rmse4,rmse5,rmse6,rmse7,rmse8,rmse9,rmse10,rmse11,rmse12)

 

R2m1= 1-(sum((y$density-weibullm)^2)/sum((y$density-mean(y$density) )^2))

R2m2= 1-(sum((y$density-weibullv)^2)/sum((y$density-mean(y$density) )^2))

R2m3= 1-(sum((y$density-weibullp)^2)/sum((y$density-mean(y$density) )^2))

R2m4= 1-(sum((y$density-weibullf)^2)/sum((y$density-mean(y$density) )^2))

R2m5= 1-(sum((y$density-weibullq)^2)/sum((y$density-mean(y$density) )^2))

R2m6= 1-(sum((y$density-weibulll)^2)/sum((y$density-mean(y$density) )^2))

R2m7= 1-(sum((y$density-weibulls)^2)/sum((y$density-mean(y$density) )^2))

R2m8= 1-(sum((y$density-weibullmm)^2)/sum((y$density-mean(y$density) )^2))

R2m9= 1-(sum((y$density-weibulle)^2)/sum((y$density-mean(y$density) )^2))

R2m10= 1-(sum((y$density-weibullw)^2)/sum((y$density-mean(y$density) )^2))

R2m11= 1-(sum((y$density-weibullwa)^2)/sum((y$density-mean(y$density) )^2))

R2m12= 1-(sum((y$density-weibullwl)^2)/sum((y$density-mean(y$density) )^2))

rbind(R2m1,R2m2,R2m3,R2m4,R2m5,R2m6,R2m7,R2m8,R2m9,R2m10,R2m11,R2m12)

 

 

barplot(y$density~y$mids, col="blue3", xlab="", ylab="")

par(new=T); plot(weibullm~y$mids, type="b", pch=19, col="red", axes=FALSE, add=T, xlan=NA, ylab=NA)

par(new=T); plot(weibullmse~y$mids, type="b", pch=20, col="green", axes=FALSE, add=T, xlan=NA, ylab=NA)

 

# -4-Fitted Weibull Distribution

 

#s=dweibull(V_60, shape=kmm, scale = cmm)

weibullnm=(k/c)*((v2/c)^(k-1))*exp(-((v2/c)^k))

weibullmm=(kmm/cmm)*((v2/cmm)^(kmm-1))*exp(-((v2/cmm)^kmm))

weibullmv=(kmv/cmv)*(v2/cmv)^(kmv-1)*exp(-((v2/cmv)^kmv))

weibullpd=(kpd/cpd)*(v2/cpd)^(kpd-1)*exp(-((v2/cpd)^kpd))

weibullcf=(kcf/ccf)*(v2/ccf)^(kcf-1)*exp(-((v2/ccf)^kcf))

weibullkmq=(kmq/cmq)*(v2/cmq)^(kmq-1)*exp(-((v2/cmq)^kmq))

weibulleml=(keml/ceml)*(v2/ceml)^(keml-1)*exp(-((v2/ceml)^keml))

weibullls=(kls/cls)*(v2/cls)^(kls-1)*exp(-((v2/cls)^kls))

weibullmml=(kmml/cmml)*(v2/cmml)^(kmml-1)*exp(-((v2/cmml)^kmml))

weibullee=(kee/cee)*(v2/cee)^(kee-1)*exp(-((v2/cee)^kee))

weibullpwm=(kpwm/cpwm)*(v2/cpwm)^(kpwm-1)*exp(-((v2/cpwm)^kpwm))

weibullwasp=(kwasp/cwasp)*(v2/cwasp)^(kwasp-1)*exp(-((v2/cwasp)^kwasp))

weibullwls=(kwls/cwls)*(v2/cwls)^(kwls-1)*exp(-((v2/cwls)^kwls))

#data=data.frame(weibullmm,weibullmv,weibullpd,weibullcf,weibullkmq,weibulleml)

#write.table(data,"exportR.txt")   

 

FCmm=1-exp(-((v2/cmm)^kmm))

FCmv=1-exp(-((v2/cmv)^kmv))

FCpd=1-exp(-((v2/cpd)^kpd))

FCcf=1-exp(-((v2/ccf)^kcf))

FCkmq=1-exp(-((v2/cmq)^kmq))

FCeml=1-exp(-((v2/ceml)^keml))

FCls=1-exp(-((v2/cls)^kls))

FCmml=1-exp(-((v2/cmml)^kmml))

FCee=1-exp(-((v2/cee)^kee))

FCpwm=1-exp(-((v2/cpwm)^kpwm))

FCwasp=1-exp(-((v2/cwasp)^kwasp))

FCwls=1-exp(-((v2/cwls)^kwls))

#data=data.frame(FCmm,FCmv,FCpd,FCcf,FCkmq,FCeml)

#write.table(data,"exportRFC.txt")   

#QUALITY MODEL FIT OF DISTRIBUTION

a=hist(weibullmmn);  dev.off()

b=hist(weibullmv);   dev.off()

c=hist(weibullj);    dev.off()

d=hist(weibullwasp); dev.off()

y=hist(v2, prob=T)

 

Fq=y$density

w=weibullj

 

mbemm=sum(Fq-w)/length(Fq);mbemm

R2mm=1-sum((Fq-w)^2)/sum((Fq-moy)^2); R2mm

 

 

#FREQUENCY OF WIND SPEED

names(r)

Fq=data$F_40

 

#COEFFICIENT OD DETERMINATION

 

a=sum((Fq-mean(v2))^2)

bmm=sum((Fq-weibullmm)^2)

bmv=sum((Fq-weibullmv)^2)

bpd=sum((Fq-weibullpd)^2)

bcf=sum((Fq-weibullcf)^2)

bkmq=sum((Fq-weibullkmq)^2)

beml=sum((Fq-weibulleml)^2)

bls=sum((Fq-weibullls)^2)

bmml=sum((Fq-weibullmml)^2)

bee=sum((Fq-weibullee)^2)

bpwm=sum((Fq-weibullpwm)^2)

bwasp=sum((Fq-weibullwasp)^2)

bwls=sum((Fq-weibullwls)^2)

 

coefdetmm=(a-bmm)/a

coefdetmv=(a-bmv)/a

coefdetpd=(a-bpd)/a

coefdetcf=(a-bcf)/a

coefdetkmq=(a-bkmq)/a

coefdeteml=(a-beml)/a

coefdetls=(a-bls)/a

coefdetmml=(a-bmml)/a

coefdetee=(a-bee)/a

coefdetpwm=(a-bpwm)/a

coefdetwasp=(a-bwasp)/a

coefdetwls=(a-bwls)/a

 

R2mm=1-sum((Fq-weibullmm)^2)/sum((Fq-moy)^2)

R2mv=1-sum((Fq-weibullmv)^2)/sum((Fq-moy)^2)

R2pd=1-sum((Fq-weibullpd)^2)/sum((Fq-moy)^2)

R2cf=1-sum((Fq-weibullcf)^2)/sum((Fq-moy)^2)

R2kmq=1-sum((Fq-weibullkmq)^2)/sum((Fq-moy)^2)

R2eml=1-sum((Fq-weibulleml)^2)/sum((Fq-moy)^2)

R2ls=1-sum((Fq-weibullls)^2)/sum((Fq-moy)^2)

R2mml=1-sum((Fq-weibullmml)^2)/sum((Fq-moy)^2)

R2ee=1-sum((Fq-weibullee)^2)/sum((Fq-moy)^2)

R2pwm=1-sum((Fq-weibullpwm)^2)/sum((Fq-moy)^2)

R2wasp=1-sum((Fq-weibullwasp)^2)/sum((Fq-moy)^2)

R2wls=1-sum((Fq-weibullwls)^2)/sum((Fq-moy)^2)

 

rmsemm=sqrt(sum((weibullmm-F_40)^2)/length(F_40))

 

#ROOT MEAN SQUARE ERROR / DEVIATION

 

#RMSD=RMSES

rmsemm=sqrt(sum((weibullmm-Fq)^2)/length(Fq))

rmsemv=sqrt(sum((weibullmv-Fq)^2)/length(Fq))

rmsepd=sqrt(sum((Fq-weibullpd)^2)/length(Fq))

rmsecf=sqrt(sum((Fq-weibullcf)^2)/length(Fq))

rmsekmq=sqrt(sum((Fq-weibullkmq)^2)/length(Fq))

rmseeml=sqrt(sum((Fq-weibulleml)^2)/length(Fq))

rmsels=sqrt(sum((Fq-weibullls)^2)/length(Fq))

rmsemml=sqrt(sum((Fq-weibullmml)^2)/length(Fq))

rmseee=sqrt(sum((Fq-weibullee)^2)/length(Fq))

rmsepwm=sqrt(sum((Fq-weibullpwm)^2)/length(Fq))

rmsewasp=sqrt(sum((Fq-weibullwasp)^2)/length(Fq))

rmsewls=sqrt(sum((Fq-weibullwls)^2)/length(Fq))

 

 

#NRMD=RMSD/moy

NRMDmm=rmsemm/moy

NRMDmv=rmsemv/moy

NRMDpd=rmsepd/moy

NRMDcf=rmsecf/moy

NRMDkmq=rmsekmq /moy

NRMDeml=rmseeml/moy

NRMDee=rmseee/moy

NRMDpwm=rmsepwm/moy

NRMDwasp=rmsewasp/moy

NRMDwls=rmsewls/moy

 

 

#MEAN BIAIS ERROR

 

mbemm=sum(Fq-weibullmm)/length(Fq)

mbemv=sum(Fq-weibullmv)/length(Fq)

mbepd=sum(Fq-weibullpd)/length(Fq)

mbecf=sum(Fq-weibullcf)/length(Fq)

mbekmq=sum(Fq-weibullkmq)/length(Fq)

mbeeml=sum(Fq-weibulleml)/length(Fq)

mbels=sum(Fq-weibullls)/length(Fq)

mbemml=sum(Fq-weibullmml)/length(Fq)

mbeee=sum(Fq-weibullee)/length(Fq)

mbepwm=sum(Fq-weibullpwm)/length(Fq)

mbewasp=sum(F-weibullwasp)/length(Fq)

mbewls=sum(Fq-weibullwls)/length(Fq)

 

#MEAN ABSOLUTE ERROR = MEAN ABSOLUTE BIAIS ERROR

 

maemm=sum(abs(weibullmm-Fq))/length(Fq)

maemv=sum(abs(weibullmv-Fq))/length(Fq)

maepd=sum(abs(weibullpd-Fq))/length(Fq)

maecf=sum(abs(weibullcf-Fq))/length(Fq)

maekmq=sum(abs(weibullkmq-Fq))/length(Fq)

maeeml=sum(abs(weibulleml-Fq))/length(Fq)

maels=sum(abs(weibullls-Fq))/length(Fq)

maemml=sum(abs(weibullmml-Fq))/length(Fq)

maeee=sum(abs(weibullee-Fq))/length(Fq)

maepwm=sum(abs(weibullpwm-Fq))/length(Fq)

maewasp=sum(abs(weibullwasp-Fq))/length(Fq)

maewls=sum(abs(weibullwls-Fq))/length(Fq)

 

#COEFFICIENT OF EFFEICIENCY

 

coemm=sum((weibullmm-mean(v2))^2)/sum((Fq-mean(v2))^2)

coemv=sum((weibullmv-mean(v2))^2)/sum((Fq-mean(v2))^2)

coepd=sum((weibullpd-mean(v2))^2)/sum((Fq-mean(v2))^2)

coecf=sum((weibullcf-mean(v2))^2)/sum((Fq-mean(v2))^2)

coekmq=sum((weibullkmq-mean(v2))^2)/sum((Fq-mean(v2))^2)

coeeml=sum((weibulleml-mean(v2))^2)/sum((Fq-mean(v2))^2)

coels=sum((weibullls-mean(v2))^2)/sum((Fq-mean(v2))^2)

coemml=sum((weibullmml-mean(v2))^2)/sum((Fq-mean(v2))^2)

coeee=sum((weibullee-mean(v2))^2)/sum((Fq-mean(v2))^2)

coepwm=sum((weibullpwm-mean(v2))^2)/sum((Fq-mean(v2))^2)

coewasp=sum((weibullwasp-mean(v2))^2)/sum((Fq-mean(v2))^2)

coewls=sum((weibullwls-mean(v2))^2)/sum((Fq-mean(v2))^2)

 

#MEAN ABSOLUTE POURCENTAGE ERREOR MEAN ABSOLUTE RELATIVE ERROR. MAPE = MARE

 

mapemm=sum(abs((weibullmm-Fq)/Fq))/length(Fq)

mapemv=sum(abs((weibullmv-Fq)/Fq))/length(Fq)

mapepd=sum(abs((weibullpd-Fq)/Fq))/length(Fq)

mapecf=sum(abs((weibullcf-Fq)/Fq))/length(Fq)

mapekmq=sum(abs((weibullkmq-Fq)/Fq))/length(Fq)

mapeeml=sum(abs((weibulleml-Fq)/Fq))/length(Fq)

mapels=sum(abs((weibullls-Fq)/Fq))/length(Fq)

mapemml=sum(abs((weibullmml-Fq)/Fq))/length(Fq)

mapeee=sum(abs((weibullee-Fq)/Fq))/length(Fq)

mapepwm=sum(abs((weibullpwm-Fq)/Fq))/length(Fq)

mapewasp=sum(abs((weibullwasp-Fq)/Fq))/length(Fq)

mapewls=sum(abs((weibullwls-Fq)/Fq))/length(Fq)

 

# IA INDICE

 

#with higher values manifesting better agreement between the distribution and observations. 

IAmm =sum(abs(weibullmm-Fq))/(sum(abs(weibullmm-mean(Fq))+abs(Fq-mean(Fq))))

IAmv =sum(abs(weibullmv-Fq))/(sum(abs(weibullmv-mean(Fq))+abs(Fq-mean(Fq))))

IApd =sum(abs(weibullpd-Fq))/(sum(abs(weibullpd-mean(Fq))+abs(Fq-mean(Fq))))

IAcf =sum(abs(weibullcf-Fq))/(sum(abs(weibullcf-mean(Fq))+abs(Fq-mean(Fq))))

IAkmq =sum(abs(weibullkmq-Fq))/(sum(abs(weibullkmq-mean(Fq))+abs(Fq-mean(Fq))))

IAeml =sum(abs(weibulleml-Fq))/(sum(abs(weibulleml-mean(Fq))+abs(Fq-mean(Fq))))

IAls  =sum(abs(weibullls-Fq))/(sum(abs(weibullls-mean(Fq))+abs(Fq-mean(Fq))))

IAmml= sum(abs(weibullmml-Fq))/(sum(abs(weibullmml-mean(Fq))+abs(Fq-mean(Fq))))

IAee  =sum(abs(weibullee-Fq))/(sum(abs(weibullee-mean(Fq))+abs(Fq-mean(Fq))))

IAee  =sum(abs(weibullee-Fq))/(sum(abs(weibullee-mean(Fq))+abs(Fq-mean(Fq))))

IApwm  =sum(abs(weibullpwm-Fq))/(sum(abs(weibullpwm-mean(Fq))+abs(Fq-mean(Fq))))

IAwasp =sum(abs(weibullwasp-Fq))/(sum(abs(weibullwasp-mean(Fq))+abs(F-mean(Fq))))

IAwls  =sum(abs(weibullwls-Fq))/(sum(abs(weibullwls-mean(Fq))+abs(Fq-mean(Fq))))

 

# RELATIVE ROOT MEAN SQUARE ERROR RRMSE

 

#Best for RRMSE < 0.1 ***  Good for 0.1 < RRMSE <0.2

#Fair for 0.2 < RRMSE <0.3 *** Poor for RRMSE >0.3.

RRMSEmm = sqrt(sum((weibullmm-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEmv = sqrt(sum((weibullmv-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEpd = sqrt(sum((weibullpd-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEcf = sqrt(sum((weibullcf-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEkmq = sqrt(sum((weibullkmq-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEeml = sqrt(sum((weibulleml-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEls = sqrt(sum((weibullls-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEmml = sqrt(sum((weibullmml-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEee = sqrt(sum((weibullee-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEpwm = sqrt(sum((weibullpwm-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEwasp = sqrt(sum((weibullwasp-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

RRMSEwls = sqrt(sum((weibullwls-Fq)^2)/ length(Fq))/(sum(Fq)/length(Fq))

 

coemm=sum((weibullmm-mean(v2))^2)/sum((Fq-mean(v2))^2)

 

 

#ROOT MEAN SUQARE ERROR 2

 

#RMSE with Average Value of Measure Data.

RMSREmm=  sqrt(sum(((Fq-weibullmm)/Fq)^2)/length(Fq))

RMSREmv=  sqrt(sum(((Fq-weibullmv)/Fq)^2)/length(Fq))

RMSREpd=  sqrt(sum(((Fq-weibullpd)/Fq)^2)/length(Fq))

RMSREcf=  sqrt(sum(((Fq-weibullcf)/Fq)^2)/length(Fq))

RMSREkmq=  sqrt(sum(((Fq-weibullkmq)/Fq)^2)/length(Fq))

RMSREeml=  sqrt(sum(((Fq-weibulleml)/Fq)^2)/length(Fq))

RMSREls=  sqrt(sum(((Fq-weibullls)/Fq)^2)/length(Fq))

RMSREmml=  sqrt(sum(((Fq-weibullmml)/Fq)^2)/length(Fq))

RMSREee=  sqrt(sum(((Fq-weibullee)/Fq)^2)/length(Fq))

RMSREpwm=  sqrt(sum(((Fq-weibullpwm)/Fq)^2)/length(Fq))

RMSREwasp=  sqrt(sum(((Fq-weibullwasp)/Fq)^2)/length(Fq))

RMSREwls=  sqrt(sum(((Fq-weibullwls)/Fq)^2)/length(Fq))

 

# MAXIMUM ABSOLUTE RELATIVE ERROR

 

erMAXmm = max(abs((mean(Fq)-mean(weibullmm))/mean(Fq)))

erMAXmv = max(abs((mean(Fq)-mean(weibullmv))/mean(Fq)))

erMAXpd = max(abs((mean(Fq)-mean(weibullpd))/mean(Fq)))

erMAXcf = max(abs((mean(Fq)-mean(weibullcf))/mean(Fq)))

erMAXkmq = max(abs((mean(Fq)-mean(weibullkmq))/mean(Fq)))

erMAXeml = max(abs((mean(Fq)-mean(weibulleml))/mean(Fq)))

erMAXls = max(abs((mean(Fq)-mean(weibullls))/mean(Fq)))

erMAXmml = max(abs((mean(Fq)-mean(weibullmml))/mean(Fq)))

erMAXee = max(abs((mean(Fq)-mean(weibullee))/mean(Fq)))

erMAXpwm = max(abs((mean(Fq)-mean(weibullpwm))/mean(Fq)))

erMAXwasp = max(abs((mean(Fq)-mean(weibullwasp))/mean(Fq)))

erMAXwls = max(abs((mean(Fq)-mean(weibullwls))/mean(Fq)))

 

# ROOT PERCENTAGE ERROR

 

rpemm=((weibullmm-Fq)/Fq)*100

rpemv=((weibullmv-Fq)/Fq)*100

rpepd=((weibullpd-Fq)/Fq)*100

rpecf=((weibullcf-Fq)/Fq)*100

rpekmq=((weibullkmq-Fq)/Fq)*100

rpeeml=((weibulleml-Fq)/Fq)*100

rpels=((weibullls-Fq)/Fq)*100

rpemml=((weibullmml-Fq)/Fq)*100

rpeee=((weibullee-Fq)/Fq)*100

rpepwm=((weibullpwm-Fq)/Fq)*100

rpewasp=((weibullwasp-Fq)/Fq)*100

rpewls=((weibullwls-Fq)/Fq)*100

#data.frame(rpemm,rpepd,rpecf,rpekmq,rpeeml,rpeee,rpepwm,rpemml,rpeee,rpepwm,rpewasp,rpewls)

 

#  RESULTATS

rbind(kmm,kmv,kpd,kcf,cmm,cmv,cpd,ccf)

rbind(kmq,keml,kls,kmml, k,cmq,ceml,cls,cmml,c)

rbind(kee,kpwm,kwasp,kwls,cee,cpwm,cwasp,cwls)

 

mmedist(x3, "beta")$estimate                        #moment matching estimation

fitdist(v2, distr = "weibull", method = "mse")      #maximum spacing estimation

fitdist(v2, distr = "weibull", method = "mle")      #maximum likelihood estimation

qmedist(v2, "weibull", probs=c(1/3, 2/3))$estimate  #quantile matching estimation

 

#Maximum goodness-of-fit estimation Stephens (1986)

mgedist(v2, distr="weibull", gof = "CvM")$estimate  #Cramer-von Mises distance   (CvM)

mgedist(v2, distr="weibull", gof = "KS")$estimate   #Kolmogorov-Smirnov distance (KS)

mgedist(v2, distr="weibull", gof = "AD")$estimate   #Anderson-Darling distance   (AD)

 

# Maximum goodness-of-fit estimation Luceno (2006)

mgedist(v2, distr="weibull", gof = "ADL")$estimate  #Anderson-Darling distance Left   (ADL)

mgedist(v2, distr="weibull", gof = "AD2R")$estimate #Anderson-Darling distance 2 Right(AD2R)

mgedist(v2, distr="weibull", gof = "AD2L")$estimate #Anderson-Darling distance 2 Left (AD2L)

mgedist(v2, distr="weibull", gof = "ADR")$estimate  #Anderson-Darling distance Right  (ADR)

 

rbind(coefdetmm,coefdetmv,coefdetpd,coefdetcf,coefdetkmq,coefdeteml,coefdetls,coefdetmml,coefdetee,coefdetpwm,coefdetwasp,coefdetwls)

rbind(R2mm,R2mv,R2pd,R2cf,R2kmq,R2eml,R2ls,R2mml,R2ee,R2pwm,R2wasp,R2wls)

rbind(rmsemm,rmsemv,rmsepd,rmsecf,rmsekmq,rmseeml,rmsels,rmsemml,rmseee,rmsepwm,rmsewasp,rmsewls)

rbind(mbemm,mbemv,mbepd,mbecf,mbekmq,mbeeml,mbels,mbemml,mbeee,mbepwm,mbewasp,mbewls)

rbind(maemm,maemv,maepd,maecf,maekmq,maeeml,maels,maemml,maeee,maepwm,maewasp,maewls)

rbind(coemm,coemv,coepd,coecf,coekmq,coeeml,coels,coemml,coeee,coepwm,coewasp,coewls)

rbind(mapemm,mapemv,mapepd,mapecf,mapekmq,mapeeml,mapels,mapemml,mapeee,mapepwm,mapewasp,mapewls)

rbind(IAmm,IAmv,IApd,IAcf,IAkmq,IAeml,IAls,IAmml,IAee,IApwm,IAwasp,IAwls)

rbind(RRMSEmm,RRMSEmv,RRMSEpd,RRMSEcf,RRMSEkmq,RRMSEeml,RRMSEls,RRMSEmml,RRMSEee,RRMSEpwm,RRMSEwasp,RRMSEwls)

rbind(RMSREmm,RMSREmv,RMSREpd,RMSREcf,RMSREkmq,RMSREeml,RMSREls,RMSREmml,RMSREee,RMSREpwm,RMSREwasp,RMSREwls)

rbind(erMAXmm,erMAXmv,erMAXpd,erMAXcf,erMAXkmq,erMAXeml,erMAXls,erMAXmml,erMAXee,erMAXpwm,erMAXwasp,erMAXwls)

 

rbind(NRMDmm,NRMDmv,NRMDpd,NRMDcf,NRMDkmq,NRMDeml,NRMDee,NRMDpwm,NRMDwasp,NRMDwls)

 

 

 

 

 

 

 

#GRAPH GROUP 1

#layout(c(1,2))      

#par(mfrow=c(1,2))

 

a=hist(weibullmmn);  dev.off()

b=hist(weibullmv);   dev.off()

c=hist(weibullj);    dev.off()

d=hist(weibullwasp); dev.off()

 

 

a=hist(weibullnm); dev.off()

b=hist(weibullmv); dev.off()

m=hist(weibullmm); dev.off()

k=hist(weibullwasp); dev.off()

c=hist(weibullpd); dev.off()

d=hist(weibullcf); dev.off()

e=hist(weibullkmq); dev.off()

f=hist(weibulleml); dev.off()

g=hist(weibullls); dev.off()

h=hist(weibullmml); dev.off()

i=hist(weibullee); dev.off()

j=hist(weibullpwm); dev.off()

l=hist(weibullwls); dev.off()

m=hist(weibullmm); dev.off()

 

#col=terrain.colors(5))

#col=topo.colors(500)

#col=cm.colors(5))

#col=rainbow(5))

#col=heat.colors(5)

 

a=hist(weibullmmn);  dev.off()

b=hist(weibullmv);   dev.off()

c=hist(weibullj);    dev.off()

d=hist(weibullwasp); dev.off()

y=hist(v2, prob=T)

 

 

plot(-1,-1,xlim=c(0,22), ylim=c(0,7),xlab="Wind speed(m/s)",ylab="Probability density function (%)")

grid(col="black", lty="solid", lwd=1.5)

#abline(h=0, lty=2); abline(v=0, lty=2)

#require(graphics)

#grid(5,6,col = "lightgray", lty = "dotted",lwd = par("lwd"), equilogs =F)

 

par(new=T);hist(v2, col= "yellow"  ,main=NA, xlab=NA,ylab=NA,axes=FALSE,border="red")

 

# http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

# heat.colors(4, alpha=1)  topo.colors(200)

# hsv(h = 1, s = 0.8, v = 0.9)

# xfit<-seq(min(v2),max(v2),length=40)

# yfit<-dnorm(xfit,mean=mean(v2),sd=sd(v2)) #lines(xfit, yfit, col="blue", lwd=2)

par(new=T);plot(y$mids,weibullmmn,type="b", pch=15,lty=1, lwd=2,cex=1,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

par(new=T);plot(y$mids,weibullmv,type="b", pch=16,lty=1, lwd=2,cex=1,col="mediumblue",axes=FALSE,add=T,ylab=NA,xlab=NA)

par(new=T);plot(y$mids,weibullj,type="b", pch=17,lty=1, lwd=2,cex=1,col="deeppink",axes=FALSE,add=T,ylab=NA,xlab=NA)

par(new=T);plot(y$mids,weibullwasp,type="b", pch=20,lty=1, lwd=2,cex=1,col="cyan",axes=FALSE,add=T,ylab=NA,xlab=NA)

 

data.frame(weibullmmn,weibullmv,weibullj,weibullwasp,y$mids,y$density)

plot(-1,-1,xlim=c(0,20), ylim=c(0,20),xlab="",ylab="")

legend("topright",c("Moment Method" ,              "Maximum Likelihood",

                    "Empirical Method of Jestus",  "WAsP Method"),

       lty=c(1,1,1,1),

       col=c("red", "mediumblue", "deeppink", "cyan"),

       lwd=c(2,2,2,2), bty="n",

       cex=c(1,1,1,1),

       pch=c(15,16,17,20) )

 

#CUMULATIVE FUNCTION DISTRIBUTION

#FCmm=1-exp(-((v2/cmm)^kmm))            # Long Way

FCmmn=1-exp(-((y$mids/c)^k))                  # Short Way

FCmv=1-exp(-((y$mids/cmv)^kmv))   

FCj=1-exp(-((y$mids/cmm)^kmm))   

FCwasp=1-exp(-((y$mids/cwasp)^kwasp))   

 

data.frame(FCmmn,FCmv,FCj,FCwasp,y$mids,y$density)

plot(y$mids,FCmm,type="b", pch=15,lty=1, lwd=2,cex=1,col="red")

par(new=T)

plot(-1,-1,xlim=c(0,22), ylim=c(0,1),xlab="Wind speed(m/s)",ylab="Cumulative distribution function (%)")

grid(col="black", lty="solid", lwd=1.5)

par(new=T);plot(y$mids,FCmmn,type="b", pch=15,lty=1, lwd=2,cex=1,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

par(new=T);plot(y$mids,FCmv,type="b", pch=16,lty=1, lwd=2,cex=1,col="mediumblue",axes=FALSE,add=T,ylab=NA,xlab=NA)

par(new=T);plot(y$mids,FCj,type="b", pch=17,lty=1, lwd=2,cex=1,col="deeppink",axes=FALSE,add=T,ylab=NA,xlab=NA)

par(new=T);plot(y$mids,FCwasp,type="b", pch=20,lty=1, lwd=2,cex=1,col="darkgoldenrod1",axes=FALSE,add=T,ylab=NA,xlab=NA)

 

 

barplot(y$density~y$mids, col="blue3", xlab="", ylab="")

par(new=T); plot(weibullm~y$mids, type="b", pch=19, col="red", axes=FALSE, add=T, xlan=NA, ylab=NA)

par(new=T)

plot(y$mids,weibullmm,type="b", pch=20,lty=1, lwd=2,cex=1,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

#pch=20

plot(v2,weibullmm,pch=3,cex=0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

par(new=T)

curve(dweibull(x,kmm, cmm), lty=1,lwd=2,col=" gold4", add=T)

par(new=T)

plot(v2,weibullmv,pch=4,cex=0,col="darkmagenta",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=b$density

curve(dweibull(x, kmv, cmv), lty=1,lwd=2,col="       hotpink1       ",  add=T)

par(new=T)

plot(v2,weibullpd,pch=0,cex=0,col=" yellow",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=c$density

curve(dweibull(x, kpd, cpd), lty=1,lwd=2,col="        yellow  ",  add=T)

par(new=T)

plot(v2,weibullcf,pch=1,cex=0,col="magenta4",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=d$density

curve(dweibull(x, kcf, ccf), lty=1,lwd=2,col="     lightsalmon        ",  add=T)

 

par(new=TRUE)

plot(v2,weibullkmq,pch=3,cex=0,col="orange",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=e$density

curve(dweibull(x, kmq, cmq), lty=1,lwd=2,col=  "       red2    ",  add=T)

 

par(new=T)

plot(v2,weibulleml,pch=4,cex=0,col="brown",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=f$density

curve(dweibull(x, keml, ceml), lty=1,lwd=2,col=  "    paleturquoise1    "  ,  add=T)

 

par(new=T)

plot(v2,weibullls,pch=0,cex=0,col="yellow",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=g$density

curve(dweibull(x, kls, cls), lty=1,lwd=2,col="        mediumblue         ",  add=T)

 

par(new=T)

plot(v2,weibullmml,pch=3,cex=0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=h$density

curve(dweibull(x, kmml, cmml), lty=1,lwd=2,col="       turquoise1   ",  add=T)

 

par(new=T)

plot(v2,weibullee,pch=3,cex=0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=i$density

curve(dweibull(x, kee, cee), lty=1,lwd=2,col="    green1   ",  add=T)

 

par(new=T)

plot(v2,weibullpwm,pch=4,cex=0,col="green",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=j$density

curve(dweibull(x, kpwm, cpwm), lty=1,lwd=2,  col="     snow3           ",  add=T)

 

par(new=T)

plot(v2,weibullwasp,pch=0,cex=0,col="yellow",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=k$density

curve(dweibull(x, kwasp, cwasp), lty=1,lwd=2,  col=  "  mediumorchid1  ",  add=T)

 

par(new=T)

plot(v2,weibullwls,pch=1,cex=0,col="purple",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=l$density

curve(dweibull(x, kwls, cwls), lty=1,lwd=2,  col=  "     chocolate1   ",  add=T)

 

 

plot(-1,-1,xlim=c(0,20), ylim=c(0,20),xlab="",ylab="")

legend("topright",c( "Empirical Method of Jestus","Maximum Likelihood",

                     "Quartiles Method","Empirical Method of Lysen",

                     "Graphical Method","Modified Maximum Likelihood",

                     "Equivalent Energy Method","Probability Weighted Moments Method", 

                     "WAsP Method","Weighted Least Square Method"), lty=c(1,1,1,1,1,1,1,1,1,1),

       col=c("gold4", "hotpink1", "yellow", "lightsalmon","red2","paleturquoise1",

             "mediumblue"," turquoise1", "green1","snow3","mediumorchid1", "chocolate1"),

       lwd=c(5,5,5,5,5,5,5,5,5,5), bty="n", cex=1.8)

 

 

plot(-1,-1,xlim=c(0,20), ylim=c(0,20),xlab="",ylab="")

legend("top",c("Vm =9.08 m/s","sd = 3.71","skew = -0.08","kurt = -0.65", "min =0.4m/s", "max = 20.8m/s"  ),

       cex=1.7,bg="white",box.col="black")

 

#horiz=T

#png(filename="tes.png",width=5000,height=3205,units="px")

#legend("bottomleft", inset=.02, title="Number of Cylinders",

#c("4","6","8"), fill=topo.colors(3), horiz=TRUE, cex=0.8

 

#NEW WEIBULL DISTRIBUTION

#https://stackoverrun.com/fr/q/10266756

#data<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

#names(data); attach(data)

#set.seed(1938)

#X=seq(0,100,length.out=1000)

#Y=cumsum(rnorm(1000))

#a2 <- data.frame(year = X, values = Y)

#require(ggplot2)

#ggplot(a2, aes(x = year, y = values, color = values )) +

#     geom_line(size = 0.5)  +

#     geom_smooth(aes(color=..y..), size=1.5, se=FALSE) +

#     scale_colour_gradient2(low = "blue", mid = "yellow" , high = "red",

#                            midpoint=median(a2$values)) +

#     theme_bw()

x=hist (V_60); x

#APPUREMENT DE LA BASE

table(V_40 > V_30)

F=18135

T=62211

Tt=F+T; FT=T/Tt*100; FF=F/Tt*100;

cbind(FT,FF)

 

nd=V_40 > V_30

data=data.frame(nd, V_40, V_30)

write.table(data, "data.txt", sep="\t")

#dput(goubet, file = "",control = c("keepNA", "keepInteger", "niceNames", "showAttributes"))

#dget(file, keep.source = FALSE)

 

#WindRose.R

 

goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

#data(wind_data)

 

require(windrose)

wind_rose <- windrose(goubet, spd = w60, dir = d60)

plot(wind_rose)

 

# Programm Initiaisation

plot.windrose <- function(data,

                          spd,

                          dir,

                          spdres = 2,

                          dirres = 30,

                          spdmin = 2,

                          spdmax = 20,

                          spdseq = NULL,

                          palette = "YlGnBu",

                          countmax = NA,

                          debug = 0){

 

 

  # Look to see what data was passed in to the function

  if (is.numeric(spd) & is.numeric(dir)){

    # assume that we've been given vectors of the speed and direction vectors

    data <- data.frame(spd = spd,

                       dir = dir)

    spd = "spd"

    dir = "dir"

  } else if (exists("data")){

    # Assume that we've been given a data frame, and the name of the speed

    # and direction columns. This is the format we want for later use.   

  } 

 

  # Tidy up input data ----

  n.in <- NROW(data)

  dnu <- (is.na(data[[spd]]) | is.na(data[[dir]]))

  data[[spd]][dnu] <- NA

  data[[dir]][dnu] <- NA

 

  # figure out the wind speed bins ----

  if (missing(spdseq)){

    spdseq <- seq(spdmin,spdmax,spdres)

  } else {

    if (debug >0){

      cat("Using custom speed bins \n")

    }

  }

  # get some information about the number of bins, etc.

  n.spd.seq <- length(spdseq)

  n.colors.in.range <- n.spd.seq - 1

 

  # create the color map

  spd.colors <- colorRampPalette(brewer.pal(min(max(3,

                                                    n.colors.in.range),

                                                min(9,

                                                    n.colors.in.range)),                                              

                                            palette))(n.colors.in.range)

 

  if (max(data[[spd]],na.rm = TRUE) > spdmax){   

    spd.breaks <- c(spdseq,

                    max(data[[spd]],na.rm = TRUE))

    spd.labels <- c(paste(c(spdseq[1:n.spd.seq-1]),

                          '-',

                          c(spdseq[2:n.spd.seq])),

                    paste(spdmax,

                          "-",

                          max(data[[spd]],na.rm = TRUE)))

    spd.colors <- c(spd.colors, "grey50")

  } else{

    spd.breaks <- spdseq

    spd.labels <- paste(c(spdseq[1:n.spd.seq-1]),

                        '-',

                        c(spdseq[2:n.spd.seq]))   

  }

  data$spd.binned <- cut(x = data[[spd]],

                         breaks = spd.breaks,

                         labels = spd.labels,

                         ordered_result = TRUE)

  # clean up the data

  data. <- na.omit(data)

 

  # figure out the wind direction bins

  dir.breaks <- c(-dirres/2,

                  seq(dirres/2, 360-dirres/2, by = dirres),

                  360+dirres/2) 

  dir.labels <- c(paste(360-dirres/2,"-",dirres/2),

                  paste(seq(dirres/2, 360-3*dirres/2, by = dirres),

                        "-",

                        seq(3*dirres/2, 360-dirres/2, by = dirres)),

                  paste(360-dirres/2,"-",dirres/2))

  # assign each wind direction to a bin

  dir.binned <- cut(data[[dir]],

                    breaks = dir.breaks,

                    ordered_result = TRUE)

  levels(dir.binned) <- dir.labels

  data$dir.binned <- dir.binned

 

  # Run debug if required ----

  if (debug>0){   

    cat(dir.breaks,"\n")

    cat(dir.labels,"\n")

    cat(levels(dir.binned),"\n")      

  } 

 

  # deal with change in ordering introduced somewhere around version 2.2

  if(packageVersion("ggplot2") > "2.2"){   

    cat("Hadley broke my code\n")

    data$spd.binned = with(data, factor(spd.binned, levels = rev(levels(spd.binned))))

    spd.colors = rev(spd.colors)

  }

 

  # create the plot ----

  p.windrose <- ggplot(data = data,

                       aes(x = dir.binned,

                           fill = spd.binned)) +

    geom_bar() +

    scale_x_discrete(drop = FALSE,

                     labels = waiver()) +

    coord_polar(start = -((dirres/2)/360) * 2*pi) +

    scale_fill_manual(name = "Wind Speed (m/s)",

                      values = spd.colors,

                      drop = FALSE) +

    theme(axis.title.x = element_blank())

 

  # adjust axes if required

  if (!is.na(countmax)){

    p.windrose <- p.windrose +

      ylim(c(0,countmax))

  }

 

  # print the plot

  print(p.windrose) 

 

  # return the handle to the wind rose

  return(p.windrose)

}

#Fin Programm

 

goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

attach(goubet)

require(ggplot2)

require(RColorBrewer)

p2 <- plot.windrose(spd = V_60,

                    dir = DIR_60)

p2  + theme_bw()

 

p2 <- plot.windrose(spd = V_60,

                    dir = DIR_60,

                    spdseq = c(0,3,6,9,12,15,18,21))

p2  + theme_bw()

 

 

#    R.4.02   Version

goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

#Rorganisation data before on N S E W

require(climatol)

data(windfr)

rosavent(windfr, 4, 4, ang=-3*pi/16, main="Annual windrose")

attach(goubet)

names(goubet)

#https://randroll.wordpress.com/2018/08/30/a-wind-rose-with-openair-package/

library(openair)

windRose(goubet, ws = "V", wd = "D", statistic = "prop.count", angle =25)

windRose(goubet, ws = "V_60", wd = "DIR_60")

 

windRose(goubet, ws = "V_60", wd ="DIR_60",paddle = F, border = T)

 

windRose(goubet, ws = "V_60", wd ="DIR_60",

         paddle = F, border = T,

         breaks = c(0, 4, 8, 12, 16),

         key.position = 'right')

 

library(viridis)

windRose(goubet, ws = "W", wd ="D",

         paddle = F, border = F,

         breaks = c(0, 4, 8, 12, 16),

         key.position = 'bottom',

         col =rev(viridis(5)), type='X' ) # classes

 

goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",")

# "right", "left", "top", "bottom"

 

windRose(goubet, ws = "W", wd ="D",

         paddle = F, border = T,

         breaks = c(0, 4, 8, 12, 16),

         key.position = "bottom",

         col =c("red", "orange", "yellow", "green", "darkgreen"),type = 'X',

         grid.line = list(value = 10, lty = 1, col = "blue"), annotate = TRUE, angle.scale =315,

         key.header = "Wind Speed", angle.scale = 45)

 

 

windRose(goubet, ws = "V_60", wd ="DIR_60",

         paddle = F, border = T,

         breaks = c(0, 0.5, 2.4, 3.6, 5.7, 8.8, 11.1),

         key.position = 'right',

         type = 'daylight')

 

windRose(goubet,type = "year")

 

 

windRose(gru, ws = 'ws', wd = 'wd',

         paddle = F, border = T,

         breaks = c(0, 0.5, 2.4, 3.6, 5.7, 8.8, 11.1),

         type = 'month',

         grid.line = 10,   # show grid line each 10%

         annotate = F)     # Don't display mean and calm

#https://randroll.wordpress.com/2018/08/30/a-wind-rose-with-openair-package/

 

polarFreq(mydata)

# wind frequencies by year

if (FALSE) polarFreq(mydata, type = "year")

 

# mean SO2 by year, showing only bins with at least 2 points

if (FALSE) polarFreq(mydata, pollutant = "so2", type = "year", statistic = "mean", min.bin = 2)

 

# weighted mean SO2 by year, showing only bins with at least 2 points

if (FALSE) polarFreq(mydata, pollutant = "so2", type = "year", statistic = "weighted.mean",

                     min.bin = 2)

 

#windRose for just 2000 and 2003 with different colours

if (FALSE) polarFreq(subset(mydata, format(date, "%Y") %in% c(2000, 2003)),

                     type = "year", cols = "jet")

 

# user defined breaks from 0-700 in intervals of 100 (note linear scale)

if (FALSE) polarFreq(mydata, breaks = seq(0, 700, 100))

 

# more complicated user-defined breaks - useful for highlighting bins

# with a certain number of data points

if (FALSE) polarFreq(mydata, breaks = c(0, 10, 50, 100, 250, 500, 700))

 

# source contribution plot and use of offset option

if (FALSE) polarFreq(mydata, pollutant = "pm25", statistic

                     ="weighted.mean", offset = 50, ws.int = 25, trans = FALSE)

#https://davidcarslaw.github.io/openair/reference/polarFreq.html

 

 

 

polarPlot(openair::mydata, pollutant = "nox")

if (FALSE) {

 

  # polarPlots by year on same scale

  polarPlot(mydata, pollutant = "so2", type = "year", main = "polarPlot of so2")

 

  # set minimum number of bins to be used to see if pattern remains similar

  polarPlot(mydata, pollutant = "nox", min.bin = 3)

 

  # plot by day of the week

  polarPlot(mydata, pollutant = "pm10", type = "weekday")

 

  # show the 95% confidence intervals in the surface fitting

  polarPlot(mydata, pollutant = "so2", uncertainty = TRUE)

 

 

  # Pair-wise statistics

  # Pearson correlation

  polarPlot(mydata, pollutant = c("pm25", "pm10"), statistic = "r")

 

  # Robust regression slope, takes a bit of time

  polarPlot(mydata, pollutant = c("pm25", "pm10"), statistic = "robust.slope")

 

  # Least squares regression works too but it is not recommended, use robust

  # regression

  # polarPlot(mydata, pollutant = c("pm25", "pm10"), statistic = "slope")

}

#https://davidcarslaw.github.io/openair/reference/polarPlot.html

 

# windRose in 10 degree intervals with gridlines and width adjusted

if (FALSE) {

  windRose(goubet, angle = 10, width = 0.2, grid.line = 1)

}

 

# pollutionRose of nox

pollutionRose(goubet, pollutant = "nox")

 

 

if (FALSE) {

  pollutionRose(mydata, pollutant = "pm10", type = "year", statistic = "prop.mean")

}

 

## example of comparing 2 met sites

## first we will make some new ws/wd data with a postive bias

mydata$ws2 = mydata$ws + 2 * rnorm(nrow(mydata)) + 1

mydata$wd2 = mydata$wd + 30 * rnorm(nrow(mydata)) + 30

 

## need to correct negative wd

id <- which(mydata$wd2 < 0)

mydata$wd2[id] <- mydata$wd2[id] + 360

 

## results show postive bias in wd and ws

pollutionRose(mydata, ws = "ws", wd = "wd", ws2 = "ws2", wd2 = "wd2")

#https://davidcarslaw.github.io/openair/reference/windRose.html

 

# first create a true POSIXCT timestamp from the date and hour columns

data.in$timestamp <- as.POSIXct(paste0(data.in$date, " ", data.in$hr),

                                tz = "GMT",

                                format = "%m/%d/%Y %H:%M")

 

# Convert the time stamp to years and months

data.in$Year <- as.numeric(format(data.in$timestamp, "%Y"))

data.in$month <- factor(format(data.in$timestamp, "%B"),

                        levels = month.name)

 

 

# recreate p.wr2, so that includes the new data

p.wr2 <- plot.windrose(data = data.in,

                       spd = "ws.80",

                       dir = "wd.80")

# now generate the faceting

p.wr3 <- p.wr2 + facet_wrap(~month,

                            ncol = 3)

# and remove labels for clarity

p.wr3 <- p.wr3 + theme(axis.text.x = element_blank(),

                       axis.title.x = element_blank())

 

#https://stackoverflow.com/questions/17266780/wind-rose-with-ggplot-r

 

# POSSIBILITY OF  GRAPH  WIND  ROSE

library(clifro)

wind_df = data.frame(wind_speeds = c(rweibull(80, 2, 4), rweibull(20, 3, 9)),

                     wind_dirs = c(rnorm(80, 135, 55), rnorm(20, 315, 35)) %% 360,

                     station = rep(rep(c("Station A", "Station B"), 2),

                                   rep(c(40, 10), each = 2)))

 

with(wind_df, windrose(wind_speeds, wind_dirs))

 

with(wind_df, windrose(wind_speeds, wind_dirs,

                       speed_cuts = c(3, 6, 9, 12),

                       legend_title = "Wind Speed\n(m/s)",

                       legend.title.align = .5,

                       ggtheme = "bw",

                       col_pal = "Greys"))

 

with(wind_df, windrose(wind_speeds, wind_dirs, "Artificial Auckland Wind"))

 

with(wind_df, windrose(wind_speeds, wind_dirs, station, n_col = 2))

 

library(ggplot2)

ggsave("my_windrose.png")

## End(Not run)

 

#  HISTOGRAM 2 

 

#https://bio304-class.github.io/bio304-fall2017/ggplot-bivariate.html

require(tidyverse)

setosa <- filter(iris, Species == "setosa")

dim(setosa)

 

setosa.or.virginica <- filter(iris, Species == "setosa" | Species == "virgnica")

dim(setosa.or.virginica)

 

big.setosa <- filter(iris, Species == "setosa" & Sepal.Width > 3.5)

dim(big.setosa)

 

ggplot(setosa)  +

  geom_point(aes(x = Sepal.Length, y = Sepal.Width))

 

p <- ggplot(setosa, mapping = aes(x = Sepal.Length, y = Sepal.Width))  

p + geom_point()

p + geom_point() + theme_bw()

p + geom_point() + theme_classic()

p + geom_point() + theme_classic() + theme(aspect.ratio = 1)

 

my.theme <- theme_classic()  + theme(aspect.ratio = 1)

sepal.labels <- labs(x = "Sepal Length (cm)", y = "Sepal Width (cm)",

                     title = "Relationship between Sepal Length and Width",

                     caption = "data from Anderson (1935)")

p +

  geom_point() +

  sepal.labels + labs(subtitle = "I. setosa data only") +my.theme

 

p +

  geom_jitter() +  # using geom_jitter to avoid overplotting of points

  geom_smooth() +

  sepal.labels + labs(subtitle = "I. setosa data only") +

  my.theme

 

p +

  geom_jitter() +  # using geom_jitter to avoid overplotting of points

  geom_smooth(method = "lm", color = "red") + # using linear model ("lm")

  sepal.labels + labs(subtitle = "I. setosa data only") +

  my.theme

 

 #Bivariate density plots

 

p <- ggplot(setosa, mapping = aes(x = Sepal.Length, y = Sepal.Width))  

p +

  stat_density_2d(aes(fill = ..level..), geom = "polygon") +

  sepal.labels + labs(subtitle = "I. setosa data only") +

  my.theme

 

p +

  stat_density_2d(aes(fill = ..level..), geom = "polygon") +

 

  # lavenderblush is the HTML standard name for a light purplish-pink color

  scale_fill_continuous(low="lavenderblush", high="red") +

 

  sepal.labels + labs(subtitle = "I. setosa data only") +

  my.theme

 

p +

  geom_density2d() +

  sepal.labels + labs(subtitle = "I. setosa data only") +

  my.theme

 

p +

  geom_density_2d() +

  geom_jitter(alpha=0.35) +

  sepal.labels + labs(subtitle = "I. setosa data only") +

  my.theme

 

all.length.vs.width <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width))

 

all.length.vs.width +

  geom_point(aes(color = Species, shape = Species), size = 2, alpha = 0.6) +

  sepal.labels + labs(subtitle = "All species") +

  my.theme

 

# HISTOGRAM

# Color housekeeping

library(RColorBrewer)

rf <- colorRampPalette(rev(brewer.pal(11,'Spectral')))

r <- rf(32)

 

# Create normally distributed data for plotting

x <- rnorm(mean=1.5, 5000)

y <- rnorm(mean=1.6, 5000)

df <- data.frame(x,y)

 

# Plot

plot(df, pch=16, col='black', cex=0.5)

library(gplots)

# Default call

h2 <- hist2d(df)

 

# OPTION 1: hexbin from package 'hexbin'

library(hexbin)

# Create hexbin object and plot

h <- hexbin(df)

plot(h)

plot(h, colramp=rf)

 

# hexbinplot function allows greater flexibility

hexbinplot(y~x, data=df, colramp=rf)

# Setting max and mins

hexbinplot(y~x, data=df, colramp=rf, mincnt=2, maxcnt=60)

# Scaling of legend - must provide both trans and inv functions

hexbinplot(y~x, data=df, colramp=rf, trans=log, inv=exp)

 

# Coarser binsizing and add colouring

h2 <- hist2d(df, nbins=25, col=r)

 

# Scaling with log as before

h2 <- hist2d(df, nbins=25, col=r, FUN=function(x) log(length(x)))

 

# OPTION 3: stat_bin2d from package 'ggplot'

library(ggplot2)

 

# Default call (as object)

p <- ggplot(df, aes(x,y))

h3 <- p + stat_bin2d()

h3

 

# Default call (using qplot)

qplot(x,y,data=df, geom='bin2d')

# Add colouring and change bins

h3 <- p + stat_bin2d(bins=25) + scale_fill_gradientn(colours=r)

h3

 

# Log scaling

h3 <- p + stat_bin2d(bins=25) + scale_fill_gradientn(colours=r, trans="log")

h3

 

# OPTION 4: kde2d from package 'MASS'

# Not a true heatmap as interpolated (kernel density estimation)

library(MASS)

 

# Default call

k <- kde2d(df$x, df$y)

image(k, col=r)

 

# Adjust binning (interpolate - can be computationally intensive for large datasets)

k <- kde2d(df$x, df$y, n=200)

image(k, col=r)

 

# Addendum: 2D Histogram + 1D on sides (from Computational ActSci w R) #######

#http://books.google.ca/books?id=YWcLBAAAQBAJ&pg=PA60&lpg=PA60&dq=kde2d+log&source=bl&ots=7AB-RAoMqY&sig=gFaHSoQCoGMXrR9BTaLOdCs198U&hl=en&sa=X&ei=8mQDVPqtMsi4ggSRnILQDw&redir_esc=y#v=onepage&q=kde2d%20log&f=false

 

h1 <- hist(df$x, breaks=25, plot=F)

h2 <- hist(df$y, breaks=25, plot=F)

top <- max(h1$counts, h2$counts)

k <- kde2d(df$x, df$y, n=25)

 

# margins

oldpar <- par()

par(mar=c(3,3,1,1))

layout(matrix(c(2,0,1,3),2,2,byrow=T),c(3,1), c(1,3))

image(k, col=r) #plot the image

par(mar=c(0,2,1,0))

barplot(h1$counts, axes=F, ylim=c(0, top), space=0, col='red')

par(mar=c(2,0,0.5,1))

barplot(h2$counts, axes=F, xlim=c(0, top), space=0, col='red', horiz=T)

#https://www.r-bloggers.com/5-ways-to-do-2d-histograms-in-r/

library(squash)

set.seed(123)

x <- rnorm(10000)

y <- rnorm(10000) + x

hist2(x, y)

## pseudo-log-scale color breaks:

hist2(x, y, breaks = prettyLog, key.args = list(stretch = 4))

## log-scale color breaks; the old way using 'base'

## (notice box removal to make space for the vertical color key)

hist2(x, y, base = 2, key = vkey, nz = 5, bty = 'l')

 

install.packages("devtools")

library(devtools)

install_github("easyGgplot2", "kassambara")

library(easyGgplot2)

# Multiple histograms on the same plot

# Color the histogram plot by the groupName "sex"

ggplot2.histogram(data=weight, xName='weight',

                  groupName='sex', legendPosition="top")

# Histogram plots with semi-transparent fill.

# alpha is the transparency of the overlaid color

ggplot2.histogram(data=weight, xName='weight',

                  groupName='sex', legendPosition="top",

                  alpha=0.5 )

# Histogram plots with mean lines

ggplot2.histogram(data=weight, xName='weight',

                  groupName='sex', legendPosition="top",

                  alpha=0.5, addDensity=TRUE,

                  addMeanLine=TRUE, meanLineColor="white", meanLineSize=1.5)

 

library(MASS)

set.seed(101)

my_data <- rnorm(250, mean=1, sd=0.45)      # unkonwn distribution parameters

fit <- fitdistr(V_60, densfun="weibull")  # we assume my_data ~ Normal(?,?)

fit

 

hist(V_60, pch=20, breaks="sturges", prob=T, main="", col="green")

x11()

 

a=hist(weibullmm)

x=a$density

curve(dweibull(x, 2.6, 10.21), lty=1,col="blue",  add=T,pch=2)

 

b=hist(V_60)

plot(a$density,b$density,type='l')

lowess","supsmu","raw","intervals

 

plsmo(weibullmm, y=V_60, "lowess",type="b")

 

log_likelihood <- function(params) { -sum(dnorm(my_data, params[1], params[2], log=TRUE)) }

fit2 <- optim(c(0,1), log_likelihood)    # c(0,1) are just initial guesses

fit2

 

hist(my_data, pch=20, breaks=25, prob=TRUE)

curve(dnorm(x, fit2$par[1],     fit2$par[2]),     col="blue", lwd=6, add=T) # optim fit

curve(dnorm(x, fit$estimate[1], fit$estimate[2]), col="red",  lwd=2, add=T) # fitdistr fit

 

hist(V_60)

a=dweibull(V_60, shape=2.645224, scale = 10.218302, log = FALSE)

plot(a, V_60, type="b")

 

h<-hist(weibullmm,breaks=15)

xhist<-c(min(h$breaks),h$breaks)

yhist<-c(0,h$density,0)

xfit<-seq(min(V_60),max(V_60),length=40)

yfit<-dnorm(xfit,mean=mean(V_60),sd=sd(V_60))

 

plot(xhist,yhist,type="s",ylim=c(0,max(yhist,yfit)), main="Normal pdf and

histogram", add=T)

lines(xfit,yfit, col="red")

 

library(MASS)

set.seed(101)

my_data <- rnorm(250, mean=1, sd=0.45)      # unkonwn distribution parameters

 

fit <- fitdistr(my_data, densfun="normal")  # we assume my_data ~ Normal(?,?)

fit

 

hist(my_data, pch=20, breaks=25, prob=TRUE, main="")

curve(dnorm(x, fit$estimate[1], fit$estimate[2]), col="red", lwd=2, add=T)

 

 

library(MASS)

set.seed(101)

my_data <- rnorm(250, mean=1, sd=0.45)      # unkonwn distribution parameters

 

fit <- fitdistr(V_60, densfun="normal")     # we assume my_data ~ Normal(?,?)

fit

hist(V_60, pch=20, breaks=10, prob=TRUE, main="")

curve(dnorm(x, fit$estimate[1], fit$estimate[2]), col="red", lwd=2, add=T)

 

curve(dweibull(x, 2.93,  10.07, log=F), col="blue", lwd=6, add=T) # optim fit

dweibull(x, 2.93,  10.07, log=F)

 

library(fitdistrplus)

fit_w  <- fitdist(V_60, "weibull")

fitdistr(V_60,densfun=dweibull,start=list(scale=1,shape=2))## fitting

 

# WEIBULL ASSESMMENT WIND SPEED OF GOUBET

data=write.table(weibullmm, "data.txt")

goubet<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

attach(goubet)

str(goubet)

names(goubet)

dir()

#sample<- rweibull(V_60, shape=2.645224  , scale = 10.2183) +0

#sqrt(sum((sample-V_60)^2)/length(V_60))# RMSE

#sum((emp-weib)^2)/length(emp)  # MINIMIM SQUARE ERROR

 

#The WEIBULL Distribution

kmm=(sd/mean(V_60))^-1.086

cmm=moy/gamma((1+(1/kmm)))

weibullmm=(kmm/cmm)*(V_60/cmm)^(kmm-1)*exp(-((V_60/cmm)^kmm))

 

#The RAYLEIGH Distribution

#install.packages("VGAM")

#require(VGAM)

#drayleigh(x, scale = 1, log = FALSE)

#ray =      ((pi*V_60)/ (2*(mean(V_60)^2)))  *  exp(-(pi/4)*((V_60/mean(V_60))^2))

rayleigh = (pi/2) * (V_60/ (mean(V_60)^2)) *  exp( (-pi/4)* (V_60/mean(V_60))^2)

 

#The LOGNORMAL Distribution

#log(x) = ln(x)  / ln(10)  ou lnx = logx x ln 10

require(stats)

#dlnorm(x, meanlog = 0, sdlog = 1, log = FALSE)

lognormal = (1/(V_60*sd(log(V_60))*sqrt(2*pi) )) *(exp( -(log(V_60/mean(log(V_60))) ^2)  / (2*(sd(log(V_60))^2 ))) )

 

#The GAMMA Distribution

gamma=(( (V_60 ^(kmm-1))  / ( (cmm^kmm ) * gamma(kmm) )) ) * (exp(-V_60/cmm))

 

#The Burr distribution

#The Frechet distribution

#The Gumbel distribution

#The extremum distribution

#hist(V_60, prob=T)

a=hist(weibullmm, prob=T); dev.off()

b=hist(lognormal, prob=T); dev.off()

c=hist(rayleigh, prob=T); dev.off()

d=hist(MSEF, prob=T); dev.off()

e=hist(gamma, prob=T); dev.off()

dat=cbind(a$density,b$density,c$density,d$density,e$density); colnames(dat) <- c("weib", "log", "ray", "mse","gamma"); dat

 

#col=terrain.colors(5))     or   col=topo.colors(500)

plot(-1,-1,xlim=c(0,22), ylim=c(0,12),xlab="Wind speed(m/s)",ylab="Probability density function (%)")

grid(col="darkgrey", lty="solid", lwd=0.1)

par(new=T)

hist(V_60, prob=T, col= "cornsilk",main=NA, xlab=NA,ylab=NA,axes=FALSE,border="blue")

par(new=T)

plot(V_60,weibullmm,pch=3,cex=0.0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=a$density

par(new=T)

curve(dweibull(x,kmm, cmm), lty=1,lwd=2,axes=FALSE, col="red",add=T,xlab="", ylab="")

 

require(VGAM)

par(new=T)

plot(V_60,rayleigh,pch=3,cex=0.0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=c$density

par(new=T)

curve(drayleigh(x, scale=7.2), lty=1,lwd=2,col="blue3", axes=FALSE, add=T, xlab="", ylab="")

#curve(dweibull(x,2,cmm), lty=1,lwd=2,axes=FALSE, col="blue",add=T,xlab="", ylab="")

#par(new=T)

#curve(dgenray(x, scale = cmm, shape=kmm, log = FALSE),  lty=1,lwd=2,col="orange", add=T)

 

#https://clayford.github.io/dwir/dwr_12_generating_data.html

#hist(rayleigh, freq=FALSE)

X <- seq(min(V_60),max(V_60), length=92065)       # x

#Y <- dnorm(X, mean = mean(rayleigh), sd = sd(rayleigh))  # f(x) = dnorm

# verification avec la moyenne de la distribution de la vitesse à goubet?

# A revoir le trde  vde fdte le pour a dstributin

 

#par(new=T)

#lines(X,Y,type = "l", col="orange", axes=FALSE, xlab=NA, ylab=NA) # plot (x,y) coordinates as a "blue" line ("l")

#par(new=T)

#plot(X,Y,type = "l", col="orange", axes=FALSE, xlab=NA, ylab=NA) # plot (x,y) coordinates as a "blue" line ("l")

 

par(new=T)

plot(V_60,lognormal,pch=3,cex=0.0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=b$density

par(new=T)

curve(dlnorm(x, meanlog=2.17, sdlog=0.114, log=F), lty=1,lwd=2,col="chartreuse3",add=T, axes=FALSE, xlab=NA, ylab=NA)

#par(new=T)

#curve(dlnorm(x, meanlog = mean(log(V_60)), sdlog = sd(log(V_60)),log =T), lty=1,lwd=2,col="green",add=T, axes=FALSE)

 

par(new=T)

plot(V_60,MSEF,pch=3,cex=0.0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=d$density

par(new=T)

curve(dweibull(x, kmm, cmm),axes=FALSE, lty=1,lwd=2,col="cyan",add=T, xlab=NA, ylab=NA)

 

par(new=T)

plot(V_60,gamma,pch=3,cex=0.0,col="red",axes=FALSE,add=T,ylab=NA,xlab=NA)

x=e$density

par(new=T)

curve(dweibull(x, kmm, cmm),axes=FALSE, lty=1,lwd=2,col="yellow",add=T, xlab=NA, ylab=NA)

 

plot(-1,-1,xlim=c(0,20), ylim=c(0,20),xlab="",ylab="")

legend("topright",c( "Weibull",

                     "Rayleigh",

                     "Lognormal",

                     "MSE-Weibull"), lty=c(1,1,1,3),

       col=c("red", "blue3","chartreuse3","cyan"),

       lwd=c(5,5,5,5), bty="n", cex=1.8)

 

 

plot(-1,-1,xlim=c(0,20), ylim=c(0,20),xlab="",ylab="")

legend("top",c("Vm =9.08 m/s","sd = 3.71","skew = -0.08","kurt = -0.65", "min =0.4m/s", "max = 20.8m/s"  ),

       cex=1.7,bg="white",box.col="black")

 

 

FCmm=1-exp(-((V_60/cmm)^kmm))

plot(V_60, FCmm, pch=20, ylab="Cumulative distribution function", xlab="Wind speed (m/s)")

grid()

par(new=TRUE)

# MATHEMATIC AND PHYSIC ENERGY WIND SPEED ASSESMENT

 

rm(list=ls()); rm(list=ls()); rm(list=ls())

pd<-read.csv(file("clipboard"),header=T,sep="\t", dec=",",row.names=1)

attach(pd); str(pd); names(pd)

 

# v2= goubet

#EXTRAPOLATION OF WIND SPEED  BY COEFFICIENT OF SHEAD

v1=v2; h1= 40; h2= 100

alpha= (0.37 -( 0.088 * log(v1) )) / (1-0.088 * log( h1/ 10))

v2 = v1*((h2/h1)^alpha)

 

#POWER density

Yoboki=1.127139204; Gobaad=1.159309632    

PetitBara=1.173332799;     Moulhoulé=1.157087117; KhorAngar=1.15                   

#air density = 1.255 kg/m^3

PD = 1/2 * (Yoboki)*(mean (v2)^3)

mean (v2); PD

 

#PARAMETER OF WEIBULL KC

kmm=(sd(v2)/mean(v2))^-1.086 ; kmm

cmm=mean(v2)/gamma((1+(1/kmm))); cmm

 

#CAPACITY FACTOR INTERMITTENCE FACTOR

k=kmm; c=cmm

vi=4; vr=12; vo=25;

Pout= exp(-((vi/c)^k)) - exp(-((vr/c)^k))

Pr=((vr/c)^k)  -  ((vi/c)^k)

CF = (Pout/Pr) - exp(-(vo/c)^k); CF

 

#AIR DENSITY  ( gasparf=287j/kg.K with mean monthly)

#robar=mean(pres)/(mean(temp)*287)

#robar

 

#Most probable wind speed:

Vp=   ((kmm-1)/kmm)^(1/kmm);  Vp

#Ideal wind speed :

Vid=  cmm*(((kmm+2)/kmm )^(1/kmm)); Vid

 

#Kinetic energy resulting: 

KE =  1/2* (1.225) * 6263  *  (V_60^3)

 

#Cumulative distribution function (CDF):

F=  1- exp(-    ((V_60/cmm)^kmm)  )

plot(V_60,F, type ="p", col="blue")

# Or  ecd()

 

#MOST PROBABLE WIND SPEED

MPWS=cmm*(  (1-(1/kmm))^(1/kmm)  )

MPWS

 

# MAXIMUM ENERGY CARRING WIND SPEED

MEWS=cmm*(  (1-(2/kmm))^(1/kmm) )

MEWS

 

#POWER density of weibull

PDw= 1/2 * PH*c^3 * gamma(1+ (3/k))

 

#ENERGY density for a duration t

E= PDw * t

 

#AIR density/  gas constant =287 J/kg.K.

p= average / (averagetemp * gasconstant)

 

#POWER P actually produced at time t

Pt = Pr* (vt²-vci²)/(vr²-vci²)

pr=1/2 * ph * A*CP* Vr^3

# Si  (vci  vt vr)

 

#Annual energy production (AEP):

EOUT = 8760 * sum cut-outàcut-in ( Fequency distribution *wind power)

#Energy POWER output

E= sum(Pi*T)

EWT=nbturbine * PN*CF*365*24

 

#CAPACITY FACTOR

CF = E/Pr * T* N

CF = EOUT/Er

#  ECONOMY and FINANCE 

# data=write.table(weibullmm, "data.txt")

# ECONOMIC WIND SPEED ASSESMENT

 

# CAPACITY FACTOR

k=(sd(V_60)/mean(V_60))^-1.086

c=mean(V_60)/gamma((1+(1/k)))

 

vi=3; vr=13; vo=25;

Pout= exp(-((vi/c)^k)) -    exp(-((vr/c)^k))

Pr=((vr/c)^k)  -  ((vi/c)^k)

CF = (Pout/Pr) - exp(-(vo/k)^k); CF

CF=0.43784975

 

#PRESENT VALUE  COST: Ahmed (2012)/Renewable and Sustainable Energy Reviews (12.110)

I= 1600*2500*40+(1600*2500*40*0.3)#Total investment cost (I)

COM=0.25*I   #Annual operation and maintenance costs

T= 20        #lifetime of Turbine

i=0.024      #inflation rate

r=0.12       #interest rate

S=0.10 *I    #scrap value

 

PVC  =  I +  (COM *((1+i)/(r-i)))* ( 1-((1+i)/(1+r))^T)- (S*((1+i)/(1+r))^T)

E = 40*2500*365*24*20*CF        # GWh/year

#

rbind(I, COM, T, i, r, S, E, PVC)

LCOE1 =  PVC  / E ; LCOE1      # $/KWh

 

#AVERAGE oF Levelized Cost of Wind Energy: (Alfawzan and all 2019)

CC= 1477      #Total capital cost per unit:        ($/KW)

IR= 0.024     #Inflation rate                              (%)

DR= 0.12      #Discount rate                                        (%)

Dr=    0      #Debt ratio                                                 (%)

Dir=   0      #Debt interest rate                                    (%)

Dt=    0      #Debt term                                                 (y)

Eev=   0      #Electricity export escalating rate  (%)

CRF=(DR*((1+DR)^T))/(((1+DR)^T)-1)    #Capital recovery factor(__)

T= 20         #Time of operation                    (yr)

CFOM=58       #Fixed cost per unit of power:        ($/KW/yr )

CVOM=(2.5/100)    #Variable per unit of Energy          (C$ /KWh )

CF =  0.4378496

#

rbind(CC,IR, DR, CRF, T, CFOM, CVOM, CF)

LCOE2  =(((CC * CRF)  + CFOM)/ (CF*8760)) + (CVOM/(1)); LCOE2

 

#Levelized Cost of Wind Energy: (Razaei and all 2020)

# ASSESMENT FINANCIAL AND RISK

#https://www.homerenergy.com/products/pro/docs/latest/system_fixed_operations_and_maintenace_om_cost.html

# REAL DISCOUNT RATE

#rdr= nomdr-inf / 1+inf #0.12

#r=read.table(file("clipboard"), header=T, sep="\t", dec=",", row.names=1)

#attach(r); names(r)

 

library(prettyR); describe(r)

# Intervalle de Confiance 95%  1.96

#a=mean(cost)-1.29*sd(cost)/sqrt(length(cost))

#b=mean(cost)+1.29*sd(cost)/sqrt(length(cost))

#library(binom)

#binom.confint(269,405,method="exact")

#

#      MONTE CARLO SIMULATION

#Des informations de probabilités pour UNE SIMULATION MONTE CARLO(echantillonage des probabilités)

 

#INVEST COST

#CCs=runif(10000, min=(CC-(CC*0.3)), max=(CC+(CC*0.3)))

#    $/KW

IC=1600; IC

ICs=runif(1000000, min=700, max=1600)

sIC <- rlnorm(ICs, mean = mean(log(ICs)), sd = sd(log(ICs))   )

x11()

# ggplot Histogramme   

hp<-qplot(x =sIC, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

 

hist(sIC , prob=T, xalb=NA, ylab=NA, main=NA, col="blue3", breaks=100)

plot(-1,-1,xlim=c(500,3500), ylim=c(0,0.0015),xlab="$/KW",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)   #grid(NULL, NA)

par(new=T)

plot(-1,-1,xlim=c(500,3500), ylim=c(0,0.0015),xlab="$/KW",ylab="Probability density function (%)")

 

par(new=T)  #"FD"

{hist(sIC , prob=T,border="blue", breaks=100,col=cm.colors(500), main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sIC), col='red', lty=1, lwd=1)

par(new=T);plot(ecdf(sIC),axes=NA, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=2, col="yellow2")   

# https://stat.ethz.ch/R-manual/R-devel/library/stats/html/ecdf.html

plot(-1,-1,xlim=c(500,3500), ylim=c(0,0.0015),xlab="$/KW",ylab="Probability density function (%)")

legend("topright",c("Capital Cost (K/KW)"),text.font=c(2),fill=c(cm.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='blue3', lty=5, lwd=5,  bty="n"  )

#legend(0.0047,480,c("Quantiles Adult","Quantiles Children"),text.font=c(2,2), lwd=c(2,2),lty=c(3,1),bty="n")

 

# FOUNDATION COST

FDC=0.3*IC

sFDC=runif(1000000, min=(FDC-(FDC*0.3)), max=(FDC+(FDC*0.3))  )

# ggplot Histogramme   

hp<-qplot(x =sFDC, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

x11()

hist(sFDC, prob=T, xalb=NA, ylab=NA, main=NA)

 

plot(-1,-1,xlim=c(0,15), ylim=c(0,20),xlab="%",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)

par(new=T)

plot(-1,-1,xlim=c(0,15), ylim=c(0,20),xlab="%",ylab="Probability density function (%)")

 

par(new=T)

{hist(sFDC , prob=T,border="blue3", breaks="FD",col="yellow", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sITR), col='purple', lty=5, lwd=2)

par(new=T);plot(ecdf(sFDC),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,15), ylim=c(0,20),xlab="%",ylab="Probability density function (%)")

legend("topright",c("Foundation Cost ($) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='purple', lty=5, lwd=1,  bty="n"  )

 

# COST O&M

#25% all year   OR   6% per year

#COM=0.06*CC; COM

#COMs = runif(10000, min=10.28, max=60.00)

#sCOM <- rnorm(COMs, mean = mean(COMs), sd = sd(COMs))

 

#    $/KW/YR

CF=runif(1000000, min=10.28, max=60.00)

getmode <- function(v) { uniqv <- unique(v); uniqv[which.max(tabulate(match(v, uniqv)))]}

require(EnvStats)

CFs = runif(1000000, min=10.28, max=60.00)

sCF <- rtri(CFs, min = min(CFs), max = max(CFs), mode=getmode(CFs))

# ggplot Histogramme   

hp<-qplot(x =sCF, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

x11()

hist(sCF , prob=T, xalb=NA, ylab=NA, main=NA)

 

plot(-1,-1,xlim=c(10,60), ylim=c(0,0.04),xlab=" $/KW/YR",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)   #grid(NULL, NA)

par(new=T)

plot(-1,-1,xlim=c(10,60), ylim=c(0,0.04),xlab=" $/KW/YR",ylab="Probability density function (%)")

 

par(new=T)

{hist(sCF , prob=T,border="orange", breaks="FD",col=terrain.colors(500), main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sCF), col='green', lty=5, lwd=5)

par(new=T);plot(ecdf(sCF),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(10,60), ylim=c(0,0.04),xlab="$/KW",ylab="Probability density function (%)")

legend("topright",c("Fixed O&M cost ($/KW) "),text.font=c(2),fill=c(terrain.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='green', lty=5, lwd=5,  bty="n"  )

 

#    $/MWh

CV=runif(1000000, min=4.82, max=23.00)

CVs = runif(1000000, min=4.82, max=23.00)

sCV <-  rlnorm(CVs, mean = mean(log(CVs)), sd = sd(log(CVs))   )

# ggplot Histogramme   

hp<-qplot(x =sCV, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

x11()

hist(sCV , prob=T, xalb=NA, ylab=NA, main=NA)

 

plot(-1,-1,xlim=c(0,80), ylim=c(0,0.06),xlab="$/MWh",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)

par(new=T)

plot(-1,-1,xlim=c(0,80), ylim=c(0,0.06),xlab="$/MWh",ylab="Probability density function (%)")

 

par(new=T)

{hist(sCV , prob=T,border="orange", breaks="FD",col=topo.colors(500), main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sCV), col='purple', lty=5, lwd=2)

par(new=T);plot(ecdf(sCV),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,80), ylim=c(0,0.06),xlab="$/MWh",ylab="Probability density function (%)")

legend("topright",c("Variable O&M cost ($/MWh) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='purple', lty=5, lwd=5,  bty="n"  )

 

# The Exponential Distribution

require(stats)

dexp(x, rate = 1, log = FALSE)

pexp(q, rate = 1, lower.tail = TRUE, log.p = FALSE)

qexp(p, rate = 1, lower.tail = TRUE, log.p = FALSE)

rexp(n, rate = 1)

 

#FINANCIAL INPUT

#  Discount Rate  %

DR=9

DRs=runif(1000000, min=(DR-(DR*0.3)), max=(DR+(DR*0.3)))

sDR <- rnorm(DRs, mean = mean(DRs), sd = sd(DRs))

# ggplot Histogramme   

hp<-qplot(x =sDR, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

 

hist(sDR , prob=T, xalb=NA, ylab=NA, main=NA)

plot(-1,-1,xlim=c(0,80), ylim=c(0,0.06),xlab="$/MWh",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)    #grid(NULL, NA)

par(new=T)

plot(-1,-1,xlim=c(0,80), ylim=c(0,0.06),xlab="$/MWh",ylab="Probability density function (%)")

 

par(new=T)

{hist(sDR , prob=T,border="yellow", breaks="FD",col="blue", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sDR), col='red', lty=5, lwd=2)

par(new=T);plot(ecdf(sDR),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,80), ylim=c(0,0.06),xlab="$/MWh",ylab="Probability density function (%)")

legend("topright",c(" Discount Rate  (%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=5,  bty="n"  )

 

 

 

#  Interest Rate  %

ITR=12

ITRs=runif(1000000, min=(ITR-(ITR*0.3)), max=(ITR+(ITR*0.3))  )

sITR <- rnorm(ITRs, mean = mean(ITRs), sd = sd(ITRs))

 

# ggplot Histogramme   

hp<-qplot(x =sITR, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

x11()

hist(sITR , prob=T, xalb=NA, ylab=NA, main=NA)

 

plot(-1,-1,xlim=c(0,15), ylim=c(0,20),xlab="%",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)

par(new=T)

plot(-1,-1,xlim=c(0,15), ylim=c(0,20),xlab="%",ylab="Probability density function (%)")

 

par(new=T)

{hist(sITR , prob=T,border="blue3", breaks="FD",col="yellow", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sITR), col='purple', lty=5, lwd=2)

par(new=T);plot(ecdf(sITR),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,15), ylim=c(0,20),xlab="%",ylab="Probability density function (%)")

legend("topright",c("Interest Rate  (%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='purple', lty=5, lwd=1,  bty="n"  )

 

#  Inflation Rate  %

IFR=2.4

IFRs=runif(1000000, min=(IFR-(IFR*0.3)), max=(IFR+(IFR*0.3)))

sIFR <- rnorm(IFRs, mean = mean(IFRs), sd = sd(IFRs))

# ggplot Histogramme   

hp<-qplot(x =sIFR, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

x11()

hist(sIFR , prob=T, xalb=NA, ylab=NA, main=NA)

 

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="$/MWh",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)    #grid(NULL, NA)

par(new=T)

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="%",ylab="Probability density function (%)")

 

par(new=T)

{hist(sIFR , prob=T,border="red", breaks="FD",col="red", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sIFR), col='red', lty=5, lwd=2)

par(new=T);plot(ecdf(sIFR),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="$/MWh",ylab="Probability density function (%)")

legend("topright",c("Inflation Rate (%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=3,  bty="n"  )

 

#POTENTIAL INPUT

 

#Capacité de facteur %

sFCF=runif(1000000, min=26, max=52)

hist(sFCF , prob=T, xalb=NA, ylab=NA, main=NA)

x11()

# ggplot Histogramme   

hp<-qplot(x =sFCF, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

 

plot(-1,-1,xlim=c(25,50), ylim=c(5,15),xlab="$/MWh",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)

par(new=T)

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="%",ylab="Probability density function (%)")

 

par(new=T)

{hist(sIFR , prob=T,border="red", breaks="FD",col="red", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sIFR), col='red', lty=5, lwd=2)

par(new=T);plot(ecdf(sFCF),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="$/MWh",ylab="Probability density function (%)")

legend("topright",c("Capacité de facteur(%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=3,  bty="n"  )

 

#Durée de vie yr

sLFT=runif(1000000, min=15, max=20)

hist(sLFT , prob=T, xalb=NA, ylab=NA, main=NA)

x11()

# ggplot Histogramme   

hp<-qplot(x =sLFT, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

 

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="yr",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)   #grid(NULL, NA)

par(new=T)

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="%",ylab="Probability density function (%)")

par(new=T)

{hist(sLFT , prob=T,border="red", breaks="FD",col="red", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sLFT), col='red', lty=5, lwd=2)

par(new=T);plot(ecdf(sLFT),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="$/MWh",ylab="Probability density function (%)")

legend("topright",c("Life Time (yr) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=3,  bty="n"  )

#Degradation de la production %

DGs=runif(1000000, min=0, max=5)

sDG <-  rlnorm(DGs, mean = mean(log(DGs)), sd = sd(log(DGs))   )

h=hist(sDG , prob=T, xalb=NA, ylab=NA, main=NA)

x11()

# ggplot Histogramme   

hp<-qplot(x =sDG, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

 

plot(-1,-1, xlim=c(5,50),ylim=c(0,0.8),xlab="%",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)     #grid(NULL, NA)

par(new=T)

plot(-1,-1, xlim=c(5,50),ylim=c(0,0.8),xlab="%",ylab="Probability density function (%)")

 

par(new=T)

{hist(sDG , prob=T,border="red", breaks='FD',col="red", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sDG), col='red', lty=5, lwd=2)

par(new=T);plot(ecdf(sDG),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1, xlim=c(5,50),ylim=c(0,0.8),xlab="%",ylab="Probability density function (%)")

legend("topright",c("Degrdataion (%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=3,  bty="n"  )

 

#Life-cycle GHG emissions(g CO2eq/kWh)

sGHG=runif(1000000, min=8.4, max=20)

hist(sGHG , prob=T, xalb=NA, ylab=NA, main=NA)

x11()

# ggplot Histogramme   

hp<-qplot(x =sGHG, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() # + theme_linedraw()  + theme_light()

 

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="$/MWh",ylab="Probability density function (%)")

 

grid(col="darkgrey", lty="solid", lwd=0.1)    #grid(NULL, NA)

par(new=T)

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="%",ylab="Probability density function (%)")

 

par(new=T)

{hist(sIFR , prob=T,border="red", breaks="FD",col="red", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sIFR), col='red', lty=5, lwd=2)

par(new=T);plot(ecdf(sGHG),axes=FALSE, xlab=NA, ylab=NA, add=TRUE, main=NA, lwd=5, col="yellow2")   

 

plot(-1,-1,xlim=c(0,20), ylim=c(5,15),xlab="$/MWh",ylab="Probability density function (%)")

legend("topright",c("Inflation Rate (%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=3,  bty="n"  )

 

 

#| SECOND STEPS OF  MC LCOE

# ceRtainty: Certainty Equivalent in R

#install.packages("ceRtainty")

library(ceRtainty)

data("profitSWG"); profitSWG

summary(profitSWG); names(profitSWG)

dim(profitSWG); str(profitSWG)

 

#RAC doit être une valeur relative ou absolue:

#Obtaining the CE table

## Computing the CE values, for a RAC range of 0.5-4.0, and Power utility function.

certainty(data = profitSWG, ival = 0.5, fval = 4, utility = "Power")$CE_values

 

# Obtaining the RAC vector

certainty(data=profitSWG,ival=.5,fval=4,utility="Power")$RAC

 

## Performing the CE plot

certainty(data=profitSWG,ival=.5,fval=4,utility="Power")$CE_plot()

 

#prime de risque est une mesure à comparer entre les EC

# Computing and storing the CE values using Power utility function

ces         <- certainty(data = profitSWG, ival = 0.5, fval = 4, utility = "Power")

ces_values  <- ces$CE_values # store CE table

ces_rac     <- ces$RAC # store RAC vector

 

# Computing the RP values respect to SERENADE treatment

premium(tbase = "serenade",ce_data = ces_values, rac = ces_rac, utility = "Power")$PremiumRisk

 

# Computing the RP values in percentage respect to SERENADE treatment

premium(tbase = "serenade",ce_data = ces_values, rac = ces_rac, utility = "Power")$PremiumRiskPer100

 

# Plotting the RP absolute values

premium(tbase = "serenade",ce_data = ces_values, rac = ces_rac, utility = "Power")$RP_plot()

 

 

#Generating Risk Aversion Coefficients

rac_generator(data = profitSWG$control, ini = 0.5, fin = 4.0)

 

#END  MC LCOE

 

#col=terrain.colors(5)) col=topo.colors(500)

#sIC  sFDC  sCF    sCV   sDR   sITR   sIFR    sCFC   sLFT    sDG    sGHG

IC=1600; FD=0.3*1600; CRF=  0.11248912; FC = 60;   T=8760;   CF =  0.43784975  ;  CV=23/1000

LCOE =((((IC+(FD))*CRF )+FC) / (T*CF)) +    (CV)    ; LCOE

 

sCRF=((sDR/100)*(((sDR/100)+1)^20))/ ((((sDR/100)+1)^20 )-1)

sLCO =( (((sIC)+ (sFDC)) * (sCRF)) + (sCF)   )/ (8760*(sFCF/100))  #*sDG  without

sLCOE= sLCO+(sCV/1000)

head(sLCOE); tail(sLCOE)

summary(sLCOE)

#View(sLCOE)

hist(sLCOE , prob=T, xalb=NA, ylab=NA, main=NA)

x11()

# ggplot Histogramme   

hp<-qplot(x =sLCOE, fill=..count.., geom="histogram"); hp+scale_fill_gradient(low="red", high="green")+theme_classic() + theme_linedraw() #  +geom_density(alpha=.2, fill="#FF6666")     +theme_linedraw()       +theme_light()

 

 

plot(-1,-1,xlim=c(0.025,0.17), ylim=c(0,22),xlab="Wind LCOE ($/KWh)",ylab="Probability density function (%)")

grid(col="grey2", lty="solid", lwd=0.1)  #grid(NULL, NA)

par(new=T)

plot(-1,-1,xlim=c(0.025,0.17), ylim=c(0,22),xlab="Wind LCOE ($/KWh)",ylab="Probability density function (%)")

#breaks="FD"

par(new=T)

{hist(sLCOE,add=TRUE, prob=T,border="yellow", breaks=100,col="blue3", main=NA,xlab=NA,ylab=NA,axes=FALSE)}

lines(density(sLCOE), col='red', lty=1, lwd=1)

#

plot(-1,-1,xlim=c(0.025,0.17), ylim=c(0,22),xlab="Wind LCOE ($/KWh)",ylab="Probability density function (%)")

legend("topright",c("Degrdataion (%) "),text.font=c(2),fill=c(topo.colors(500)), bty="n" )

legend("right",c("Density"),text.font=c(2),col='red', lty=5, lwd=3,  bty="n"  )

#library(wesanderson); names(wes_palettes)

#wes_palette("Zissou1", 10, type = "continuous")) #heat.colors(n), terrain.colors(n), topo.colors(n), et cm.colors(n)

#hist(sLCOE,xlim=c(0,0.10), ylim=c(0,75),breaks=170, prob=T, main=NA,xlab="   LCOE ($/KW) ", ylab=NA, col= heat.colors(70),border="darkslategrey")

#require(lattice)

#histogram(~sLCOE,xlim=c(0,0.10),breaks=170, prob=T, main=NA,xlab="   LCOE ($/KW) ", ylab=NA, col= heat.colors(70),border="darkslategrey")

 

cbind(quantile(sLCOE,c(0.05,0.50,0.95)))

numb1 <- cbind(quantile(sLCOE,c(0.05,0.50,0.95))); library(scales);scientific(numb1, digits = 3)

e= 0.05442740

abline(v=e, lwd=0.5, col="darkred",lty=2)

#legend(e,  70 ,"5%= 3.718e-4",cex=0.75,bg="white")

#

#f= 0.04808734

#abline(v=f, lwd=0.5, col="darkblue",lty=2)

#legend(f,   70    ,"50%= 2.342e-3"  ,cex=0.75,bg="white")

#

g=0.11629905

abline(v= g, lwd=0.5, col="darkgreen",lty=2)

#legend(g, 70    ,"95%=4.314e-3",cex=0.75,bg="white")

 

cbind(round(summary(sLCOE),4))

round(sd(sLCOE),4)

 

#https://clayford.github.io/dwir/dwr_12_generating_data.html

#q <- qnorm(p = 0.15, mean = 100, sd = 5)

#xx <- c(seq(85,q,length.out = 100),rev(seq(85,q,length = 100)))

#yy <- c(rep(0,100),dnorm(rev(seq(85,q,length = 100)), mean = 100, sd = 5))

#polygon(x=xx,y=yy,col="grey")

# annotate graph

#text(x = 93, y = 0.005,labels = pnorm(q,mean = 100,sd = 5))

#text(x = q, y = 0.06, labels = round(q,2))

 

 

sLCOE  =(((sCC * CRF)  + sCFOM)/ (sCF*8760)) + (sCVOM/(1)); sLCOE

 

h=hist(sLCOE, breaks='FD', freq=F)

#'FD'/text(h$mids,h$counts,labels=h$counts, adj=c(0.5,-0.5))

 

plot(-1,-1 , xlim=c(0.04,0.27), ylim=c(0,25), xlab="LCOE ($/KWh)", ylab="Frequency (%)")

grid(lty=1, col="grey")

par(new=TRUE)

#hist(sLCOE, breaks='FD',axes=F, freq=F,main=NA,xlab=NA,ylab=NA,col="blue",border="red")

plot(h$mids, h$density, , type="h", axes=FALSE,  lwd=3,col="blue3", xlab=NA, ylab=NA)

lines(density(LCOEs), lwd=2, lty=1,col='red')

 

require(actuar)

quantile(sLCOE)

quantile(sLCOE, probs = seq(0.05, 0.9, 0.01))

q=cbind(quantile(sLCOE,c(0.1,0.9)))

library(scales);scientific(q, digits = 3)

 

a=0.07632508; b=0.11637282

abline(v=a, lwd=2, col="darkred",lty=1)

abline(v=b, lwd=2, col="darkblue",lty=1)

legend(a,  25 ,    "10%= 0.07632508",cex=0.75,bg="white")

legend(b,   25    ,"90%=0.11637282"  ,cex=0.75,bg="white")

 

d10=sLCOE[sLCOE>=a]

d90=d10[d10<=b]

 

d=data.frame(d90)

write.table(d, "data.txt")

 

 

r=read.table(file("clipboard"), header=T, sep="\t", dec=",", row.names=1)

h=hist(r$LCOE, freq=F, breaks=20)

 

plot(-1,-1 , xlim=c(0.04,0.27), ylim=c(0,25),xaxt="n", xlab="LCOE ($/KWh)", ylab="Frequency (%)")

grid(lty=1, col="grey")

par(new=TRUE)

plot(h$mids, h$density, type="h", axes=F, xaxt="n", lwd=3,col="blue3", xlab=NA, ylab=NA)

#xaxt="n"

axis(1, at=c(0.077,0.079,0.081, 0.083, 0.085, 0.087, 0.089, 0.091, 0.093, 0.095, 0.097, 0.099,

             0.101, 0.103, 0.105,0.107, 0.109, 0.111, 0.113, 0.115 ),las=1, cex=.9)

 

barplot(h$density~h$mids, col=cm.colors(14))

d=data.frame(h$mids, h$density)

write.table(d, "data.txt", sep="\t")

 

#RISK AVERSION, RISK PREMIUM AND CERTAINTY EQUIVALENT

d=cbind(sLCOE); e=cbind(sLCOE); f=cbind(sLCOE)

dd=data.frame(d[1:10000,])

library(ceRtainty)

certainty(data = dd, ival = 0.5, fval = 4, utility = "Power")$CE_values

certainty(data=dd,ival=.5,fval=4,utility="Power")$RAC

cesdd         <- certainty(data = dd, ival = 0.5, fval = 4, utility = "Power")

ces_values    <- cesdd$CE_values            # store CE table

ces_rac       <- cesdd$RAC                  # store RAC vector

 

#Generating Risk Aversion Coefficients

rac_generator(data = dd, ini = 0.5, fin = 4.0)

View(rac_generator(data = dd, ini = 0.5, fin = 4.0))

 

AR=-5.158836  # HIGHER = FIRST VALUE OF ITERATION PRATT1964

RP = (sum((d[1:10000,])/10000))  - ( (sum( (d[1:10000,]^(1-AR)/(1-AR))*(1-AR))/(10000))^(1-AR) );RP

Ceq= (sum((d[1:10000,])/10000)) +RP; Ceq

 

#Newton-Raphson Method

##

rm(list=ls())

newton <- function(f, tol = 1e-7, x0 = 1, N = 100){

  h = 1e-7

  i = 1; x1 = x0

  p = numeric(N)

  while (i <= N) {

    df.dx = (f(x0 + h) - f(x0)) / h

    x1 = (x0 - (f(x0) / df.dx))

    p[i] = x1

    i = i + 1

    if (abs(x1 - x0) < tol) break

    x0 = x1

  }

  return(p[1 : (i-1)])

}

## End of the function

# USES NEWTON RAPHSON METHOD

f <- function(x){   42191206.73 *(( ( (1+x)^20 ) )-1)/(x*(  (1+x)^20 ) )-208000000   }

h <- 1e-7

df.dx <- function(x){(f(x + h) - f(x)) / h}

df.dx(1);df.dx(2)

app <- newton(f, x0 =0.1);app

f(app[length(app)])

#

y=0.1973083

# +(-208000000/((1+x)^0))

42191206.73 *(( ( (1+x)^20 ) )-1)/(x*(  (1+x)^20 ) )-208000000

 

#METHODE 2   NEWTON RAPHSON

func2 <- function(x) {

  (42191206.73 *((1+x)^(-20))) -7280000

}

curve(func2, xlim=c(-5,5), col='blue', lwd=2, lty=1, ylab='f(x)');abline(h=0);abline(v=0)

uniroot(func2, c(2,3))

 

(42191206.73 *((1+0.09182876)^(-20))) -7280000

 

newton.raphson <- function(f, a, b, tol = 1e-5, n = 1000) {

  require(numDeriv) # Package for computing f'(x)

  x0 <- a # Set start value to supplied lower bound

  k <- n # Initialize for iteration results

  # Check the upper and lower bounds to see if approximations result in 0

  fa <- f(a)

  if (fa == 0.0) {

    return(a)

  }

  fb <- f(b)

  if (fb == 0.0) {

    return(b)

  }

  for (i in 1:n) {

    dx <- genD(func = f, x = x0)$D[1] # First-order derivative f'(x0)

    x1 <- x0 - (f(x0) / dx) # Calculate next value x1

    k[i] <- x1 # Store x1

    # Once the difference between x0 and x1 becomes sufficiently small, output the results.

    if (abs(x1 - x0) < tol) {

      root.approx <- tail(k, n=1)

      res <- list('root approximation' = root.approx, 'iterations' = k)

      return(res)

    }

    # If Newton-Raphson has not yet reached convergence set x1 as x0 and continue

    x0 <- x1

  }

  print('Too many iterations in method')

}

newton.raphson(func2, 0.001, 3)

#https://rstudio-pubs-static.s3.amazonaws.com/205225_5991ce162f504576a84eac9c659aeaaf.html

#Or methode TRI() excel on Cash Flow (in-out) from 0 to n

 

# TAXE AND INCENTIVE STRATEGY OF DJIBOUTI

#EXCEL DETAILS  SHOW IST AWALEH

#Net = Soustraction Ben- Cost

#NPVC AND NPVB (#PVC)

#PVC

I= 1600*2500*40+(1600*2500*40*0.3)

COM=0.25*I; T= 20; S=0.10 *I      

ifl=0.024; ir=0.12

#E = 40*2500*365*24*20*CF          

PVC=I+(COM*((1+ifl)/(ir-ifl)))*(1-((1+ifl)/(1+ir))^20)-(S*((1+ifl)/(1+ir))^20) ; PVC

#https://sci-hub.st/10.1115/POWER-ICOPE2017-3675

 

#METHDOLOGIE I:PayBack  of  Rezaei and al.(2020) [Renewable Energy]      

#Knowing purhcass tarif with output energy acumulated by First year give de the benefit

#Knowing all cost accumulated by year give the cost

#Intersection both of them result of Pay Back

#METHDOLOGIE II:

#https://www.dolcera.com/wiki/images/Wind_power_energy.

Infl=0.024

Int=0.12

Disc=((1+Int)/(1+Infl)) -1

EUAB= 0.11  #Equivalent Uniform Annual Benefit#tarif d'achat de l'énergie renouvelable en iran(0,13 $ kWh)

#https://www.afdb.org/fileadmin/uploads/afdb/Documents/Evaluation-Reports-_Shared-With-OPEV_/Ethiopie-Djibouti-Interconnection_%C3%A9lectrique-RAP-06-10-2011.pdf

 

#CUMULATIVE CASH FLOW

r=read.table(file("clipboard"), header=T, sep="\t", dec=",")

str(r); attach(r); names(r)

DRc= ((1+r)/(1+i))-1; DRc

#C=(1477*100000*CRF)+ (58*100000)+(0.025*100000*8760); C

PVC=718094394

PVB=0.11*(E)

CF= PVB-PVC

NPV=CF/((1+DRc)^t)

 

#https://www.journaldev.com/39620/how-to-create-an-area-plot-in-r-using-ggplot2#:~:text=The%20area%20graphs%20are%20the,points%20using%20the%20ggplot2%20package.

library(ggplot2)

library(hrbrthemes)

#reading data into data frames

data<- data.frame(Y, CCF)

xdata=Y;ydata=CCF

#plots the area chart with theme, title and labels

ggplot(data, aes(x=xdata, y=ydata))+

  geom_area(fill='#142F86', alpha=1)+

  geom_line(color='skyblue', size=1)+

  geom_point(size=1, color='blue')+

  ggtitle("Area plot using ggplot2 in R")+

  labs(x='Value', y='frequency')+

  theme_ipsum()

 

# Changer la couleur des traits par groupe

ggplot(df, aes(x=weight, color=sex)) +

  geom_density()

# Ajouter les moyennes

p<-ggplot(df, aes(x=weight, color=sex)) +

  geom_density()+

  geom_vline(data=mu, aes(xintercept=grp.mean, color=sex),

             linetype="dashed");  p

sp3+ theme(

  # Masquer les bords des panneaux et supprimer les lignes de grilles

  panel.border = element_blank(),

  panel.grid.major = element_blank(),

  panel.grid.minor = element_blank(),

  # Modifier le trait des axes

  axis.line = element_line(colour = "black")

)

#http://www.sthda.com/french/wiki/ggplot2-courbe-de-distribution-guide-de-demarrage-rapide-logiciel-r-et-visualisation-de-donnees

 

r=read.table(file("clipboard"), header=T, sep="\t", dec=","); str(r); attach(r); names(r)

p<-ggplot(r, aes(x=m, y=ws, color=ws)) + geom_point(color="blue", size=3)

p<-ggplot(r, aes(x=m, y=ws, color=ws)) + geom_line(size=1.3)

p+ theme_bw()+scale_color_gradientn(colours = rainbow(5))

 

#ggplot(ToothGrowth, aes(x=dose, y=len)) +geom_boxplot()

#hp<-qplot(x =x, fill=..count.., geom="histogram");hp+scale_fill_gradient(low="blue", high="red")

#http://www.sthda.com/french/wiki/ggplot2-couleurs-changer-les-couleurs-automatiquement-et-manuellement-logiciel-r-et-visualisation-de-donnees

#https://www.datanovia.com/en/fr/blog/ggplot-background-du-theme-couleur-et-quadrillage/

 

#SENSITIVITY ANALYSIS BY GRAPH

#sIC  sFDC  sCF    sCV   sDR   sITR   sIFR    sCFC   sLFT    sDG    sGHG

 

# RANK SPEARMAN SENSITYVITY

dc=data.frame(sIC , sFDC , sCF  ,  sCV ,  sDR ,  sITR ,  sIFR  ,  sFCF ,  sLFT  ,  sDG , sGHG,sCRF, sLCOE)

sp=cor(dc,dc$sLCOE,method="spearman") #method="spearman", alternative="two.sided"

sp

 

cIC   =   0.1232932641

cFDC  =   0.0388737283

cCF   =   0.0455150223

cCV   =   0.1903809174

cDR   =   0.0852305248

cITR  =  -0.0010613671

cIFR  =  -0.0004500938

cFCF  =  -0.1794478264

cLFT  =   0.0022432644

cDG   =  -0.9347707838

sCRF  =   0.0852305248

cGHG  =   0.0004282596

 

#COLORATION

colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue"))

plot(-100,100, xlim=c(-10, 10), xlab= "Rank Correlation", yaxt="n",xaxt="n" ,ylab=NA)

par(new=TRUE)

barplot(c(cIC,cFDC,cCF,cCV,cDR,cITR,cIFR,cFCF,cLFT,cDG,cGHG),horiz=T, col=colfunc(150))

grid(NULL,NA, col = "gray", lty = "dotted", lwd = par("lwd"), equilogs = TRUE) # NULL OR NA OR c()

#  PLOT LINE SENSITYVITY

dc=data.frame(median(sIC),median(sFDC),median(sCF),median(sCV),median(sDR),median(sITR),median(sIFR),median(sFCF) , 

              median(sLFT)  ,median(sDG) ,median(sGHG), median(sCRF), median(sLCOE));cbind(dc)

 

dc5n=(-0.05*dc)+dc; dc5p=(0.05*dc)+dc

dc10n=(-0.10*dc)+dc; dc10p=(0.10*dc)+dc

dc15n=(-0.15*dc)+dc; dc15p=(0.15*dc)+dc

dc20n=(-0.20*dc)+dc; dc20p=(0.20*dc)+dc

# impact on LCOE one by one following the formulas  and using to delete the unit by divided the LCOE first

rbind(dc5n,dc10n,dc15n,dc20n, dc5p,dc10p,dc15p,dc20p)

 

# TORNADO DIAGRAM SENSITYVITY

https://stackoverflow.com/questions/55751978/tornado-both-sided-horizontal-bar-plot-in-r-with-chart-axes-crosses-at-a-given/55755671

library(ggplot2)

library(plyr)

library(dplyr)

library(tidyverse)

#Tornado by percentage or by value

#Or use Excel value positive and negative bar horizentale, and change add value by refencies not automatical

#http://rnotr.com/likert/ggplot/barometer/likert-plots/

#https://www.r-graph-gallery.com/202-barplot-for-likert-type-items.html

library(likert)

data(pisaitems) #items28 <- pisaitems[, substr(names(pisaitems), 1, 5) == "ST24Q"]

p <- likert(items28)

plot(p)

 

# COUNTOUR DIAGRAM SENSITYVITY

a =     sDR

b =     sCF

c =     sIC

 

#quantile(a, 0.25)    ;             a25=  7.943471

#quantile(a, 0.75)    ;             a75=  10.04866

#quantile(b, 0.25)    ;             b25=  22.92599

#quantile(b, 0.75)    ;             b75=  38.58379

#quantile(c, 0.25)    ;             c25=  955.9306 

#quantile(c, 0.75)    ;             c75=  1312.535

#x=c(min(a),min(a),min(a),a25, a25, a25,median(a),median(a),median(a),a75, a75,a75,max(a),max(a),max(a))

#y=c(min(b),min(b),min(b),b25,b25,b25,median(b),median(b),median(b),b75,b75,b75,max(b),max(b),max(b))

#z=c(min(c),min(c),min(c),c25,c25,c25,median(c),median(c),median(c),c75,c75,c75,max(c),max(c),max(c))

 

x=c(min(a),min(a),min(a),median(a),median(a),median(a),max(a),max(a),max(a))

y=c(min(b),min(b),min(b),median(b),median(b),median(b),max(b),max(b),max(b))

z=c(min(c),min(c),min(c),median(c),median(c),median(c),max(c),max(c),max(c))

df <- data.frame(x=x,y=y,z=z)

#x=c(1,1,1,2,2,2,3,3,3)    y=c(0,10,20,0,10,20,0,10,20)    z=c(900,800,700,600,500,400,300,200,100)  df <- data.frame(x=x,y=y,z=z)

library(plotly)

p <- plot_ly(data = df, x=~x,y=~y, z=~z, type = "contour", colorscale='Jet');p

#BASELINE CASE

DR; FC; IC

 

# Heat Map SENSITYVITY (Origin Lap)

#

a =     sDR

b =     sCF

c =     sIC

d=data.frame(a,b,c)

write.table(round(d[1:1000,],3), sep="\t", "d.txt")

#

# TERNARY DIAGRAM SENSITYVITY

library(plotly)

#http://www.ggtern.com/2013/12/16/pps-3-state-model/

library(ggtern); x11()

#Create Base Plot

base <- ggtern(data=df,aes(x,y,z,

                           colour=factor(z))) +

  geom_point(size=5) +

  theme_rgbw() +

  custom_percent("%") +

  labs(colour="Initial Cost ($/KW)") +

  theme(legend.position=c(0,1),

        legend.justification=c(0,1))

print(base)

#Draw same plot above using limiting region

lim <- base +

  limit_tern(.3,.3,1)

print(lim)

 

library(ggtern)

plot <- ggtern(data = df, aes(x = x, y = y, z = z)) +geom_point(aes(fill = z),

                                                                size = 4, shape = 21, color = "black") +

  ggtitle("") +

  labs(fill = "Initial Cost ($/KW)") +

  theme_rgbw() + theme(legend.position = c(0,1),

                       legend.justification = c(0, 1) ); plot

 

library("plot3D")

a =     sFCF

b =     sCRF

c =     sLCOE

scatter3D( a, b, c,bty = "g", theta = 33, phi = 12,pch = 20,cex=1.8,

           clab = c("LCOE ($/KWh)"),addlines = TRUE,ticktype = "detailed",

           main = "", xlab = "Capacity Factor (%)",

           ylab ="Capital Recovery Factor", zlab = "LCOE ($/KWH)")

#text3D(BW, Hg, THQ,  labels = rownames(t), add = TRUE, colkey = FALSE, cex = 0.5)

 

#https://stackoverflow.com/questions/10879361/ternary-plot-and-filled-contour

df <- data.frame(a, b, c, d)

ggtern(df,aes(a,c,b)) +

  geom_interpolate_tern(aes(value=d,fill=..level..),

                        binwidth=500,

                        colour="white") +

  geom_point(aes(fill=d),color="black",shape=21,size=3) +

  scale_fill_gradient(low="yellow",high="red") +

  theme(legend.position=c(0,1),legend.justification=c(0,1)) +

  labs(fill="Value, d")

 

#https://plotly.com/r/ternary-contour/

#http://www.ggtern.com/2015/08/03/ternary-interpolation-smoothing/

#https://stackoverflow.com/questions/45818875/how-to-add-labels-on-axis-in-ternary-diagram-using-ggtern-package

#https://plotly.com/r/ternary-plots/

journalist <- c(75,70,75,5,10,10,20,10,15,10,20)

developer <- c(25,10,20,60,80,90,70,20,5,10,10)

designer <- c(0,20,5,35,10,0,10,70,80,80,70)

label <- c('point 1','point 2','point 3','point 4','point 5','point 6',

           'point 7','point 8','point 9','point 10','point 11')

df <- data.frame(journalist,developer,designer,label)

 

# axis layout

axis <- function(title) {

  list(

    title = title,

    titlefont = list(

      size = 20

    ),

    tickfont = list(

      size = 15

    ),

    tickcolor = 'rgba(0,0,0,0)',

    ticklen = 5

  )

}

 

fig <- df %>% plot_ly()

fig <- fig %>% add_trace(

  type = 'scatterternary',

  mode = 'markers',

  a = ~journalist,

  b = ~developer,

  c = ~designer,

  text = ~label,

  marker = list(

    symbol = 100,

    color = '#DB7365',

    size = 14,

    line = list('width' = 2)

  )

)

fig <- fig %>% layout(

  title = "Simple Ternary Plot with Markers",

  ternary = list(

    sum = 100,

    aaxis = axis('Journalist'),

    baxis = axis('Developer'),

    caxis = axis('Designer')

  )

)

 

fig

 

df <- data.frame(a, b, c, d)

ggtern(df,aes(a,c,b)) +

  geom_interpolate_tern(aes(value=d,fill=..level..),

                        binwidth=500,

                        colour="white") +

  geom_point(aes(fill=d),color="black",shape=21,size=3) +

  scale_fill_gradient(low="yellow",high="red") +

  theme(legend.position=c(0,1),legend.justification=c(0,1)) +

  labs(fill="Value, d")

 

library('Ternary')

TernaryPlot('a', b', 'c',

grid.lines=5, grid.lty='dotted',

grid.minor.lines=1, grid.minor.lty='dotted',

point='West')

 

#https://stackoverflow.com/questions/27570221/how-to-make-a-ggplot2-contour-plot-analogue-to-latticefilled-contour

#define data

x<-seq(1,11,1)

y<-seq(1,11,1)

xyz.func<-function(x,y) {-10.4+6.53*x+6.53*y-0.167*x^2-0.167*y^2+0.0500*x*y}

#contour plot using lattice graphics and R Color Brewer

library(lattice) #for filled.contour()

library(RColorBrewer) #for brewer.pal()

z.lattice<-outer(x,y,xyz.func)

filled.contour(x,y,z.lattice,nlevels=6,col=brewer.pal(6,"YlOrRd"))

 

#http://rrubyperlundich.blogspot.com/2011/07/r-filledcontour-plot.html

x <- y <- 1:10 # create two vectors with the integers from 1 to 10

z <- outer(x,y) # create a matrix as the outer product of the two vectors

 

filled.contour(z)

filled.contour(x=x,y=y,z, col=heat.colors(20))

my.seq <- seq(-pi, pi, length=50) # creating a vector as a sequence from 0 to 2*pi with 50 entries

my.seq2 <- seq(-0.5*pi, 1.5*pi, length=50) # creating a vector as a sequence from 0 to 2*pi with 50 entries

my.matrix <- outer(sin(my.seq),cos(my.seq2)) # creating the matrix using sin, cos and outer

filled.contour(x=my.seq, y=my.seq2,my.matrix, plot.title=title(main="Products Sin(x)*Cos(y) on [-Pi,Pi]x[-0.5Pi,1.5Pi]", xlab="x", ylab="y"), key.title=title(main="products"), col=terrain.colors(20))

 

 

#https://stackoverflow.com/questions/15869969/adding-a-color-key-to-contour-plots-in-r

library(fields)

image.plot(volcano)

contour(volcano, add = TRUE)

 

#http://www.r-qualitytools.org/IMPROVE.html

#install.packages("qualityTools ")

effectPlot(fdo, classic = TRUE)

interactionPlot(fdo)

require(qualityTools)

par(mfrow = c(1,2))

wirePlot(A, B, yield, data = fdo)

contourPlot(A, B, yield, data = fdo)

 

#NEW GRAPH ON CORRELATION RANK USING R

#https://datascienceplus.com/find-insights-with-ranked-cross-correlations/

#Ranked Cross-Correlations

#devtools::install_github("laresbernardo/lares")

library(lares)

library(dplyr)

#data("starwars")

#df <- select(starwars, -starships, -vehicles, -films)

df=c(cIC,cFDC,cCF,cCV,cDR,cITR,cIFR,cFCF,cLFT,cDG,cGHG)

corr_cross(df)

data(dft)

# Let's get rid of some noisy columns first

            dft <- select(dft, -Cabin, -Ticket)

            corr_cross(dft, top = 15)

#        

Prediction of artificial neural network of class nn

            library(neuralnet)

           

            # Split data

            train_idx <- sample(nrow(iris), 2/3 * nrow(iris))

            iris_train <- iris[train_idx, ]

            iris_test <- iris[-train_idx, ]

           

            # Binary classification

            nn <- neuralnet(Species == "setosa" ~ Petal.Length + Petal.Width, iris_train, linear.output = FALSE)

            pred <- predict(nn, iris_test)

            table(iris_test$Species == "setosa", pred[, 1] > 0.5)

           

            # Multiclass classification

            nn <- neuralnet((Species == "setosa") + (Species == "versicolor") + (Species == "virginica")      ~ Petal.Length + Petal.Width, iris_train, linear.output = FALSE)

            pred <- predict(nn, iris_test)

            table(iris_test$Species, apply(pred, 1, which.max))

            #

            #https://search.r-project.org/CRAN/refmans/neuralnet/html/predict.nn.html

           

 

 

#NEURALINK DEEP LEARNING R :

            # install package

            require("neuralnet")

 

            # creating training data set

            TKS=c(20,10,30,20,80,30)

            CSS=c(90,20,40,50,50,80)

            Placed=c(1,0,0,0,1,1)

            # Here, you will combine multiple columns or features into a single set of data

            df=data.frame(TKS,CSS,Placed)

           

            # load library

            require(neuralnet)

           

            # fit neural network

            nn=neuralnet(Placed~TKS+CSS,data=df, hidden=3,act.fct = "logistic",

                         linear.output = FALSE)

           

            # plot neural network

            plot(nn)

           

            # creating test set

            TKS=c(30,40,85)

            CSS=c(85,50,40)

            test=data.frame(TKS,CSS)

           

            ## Prediction using neural network

            Predict=compute(nn,test)

            Predict$net.result

           

            # Converting probabilities into binary classes setting threshold level 0.5

            prob <- Predict$net.result

            pred <- ifelse(prob>0.5, 1, 0)

            pred

            # https://www.datacamp.com/tutorial/neural-network-models-r

            # https://datascienceplus.com/neuralnet-train-and-test-neural-networks-using-r/

            #

            # RELATIVE IMPACT   /   RELATIVE CHANGE

            rim=lm(LCOEs~log(sCC, base=10)+log(sCFOM, base =10)+log(sCVOM, base=10)+log(sDR, base=10))

            summary(rim)

            Initial_Cost=   0.1247363

            Fix_OM=         0.0348737

            Variable_OM=    0.0552038

            Discount_rate= -0.0002596

           

            plot(0,0, xlim=c(0,0.12),ylim=c(0,1), xaxt="n",yaxt="n",xlab=NA, ylab=NA)

            grid(lty=1, col="grey"); par(new=TRUE)

            barplot(c(Initial_Cost,Fix_OM,Variable_OM,Discount_rate), col=2:5, horiz=T,

                    beside=T, plot = T, legend.text=c("Initial_Cost", "Fix_OM", "Variable_OM", "Discount_rate"))

           

           

            #CUMULATIVE CASH FLOW

            r=read.table(file("clipboard"), header=T, sep="\t", dec=",")

            str(r); attach(r); names(r)

            DRc= ((1+r)/(1+i))-1; DRc

            #C=(1477*100000*CRF)+ (58*100000)+(0.025*100000*8760); C

            PVC=718094394

            PVB=0.11*(E)

            CF= PVB-PVC

            NPV=CF/((1+DRc)^t)

           

            #https://www.journaldev.com/39620/how-to-create-an-area-plot-in-r-using-ggplot2#:~:text=The%20area%20graphs%20are%20the,points%20using%20the%20ggplot2%20package.

            library(ggplot2)

            library(hrbrthemes)

            #reading data into data frames

            data<- data.frame(Y, CCF)

            xdata=Y;ydata=CCF

            #plots the area chart with theme, title and labels

            ggplot(data, aes(x=xdata, y=ydata))+

              geom_area(fill='#142F86', alpha=1)+

              geom_line(color='skyblue', size=1)+

              geom_point(size=1, color='blue')+

              ggtitle("Area plot using ggplot2 in R")+

              labs(x='Value', y='frequency')+

              theme_ipsum()

           

            #CONTOUR AND TRIANGULAR PLOT

            #https://plotly.com/r/contour-plots/

            #df=df$z[df$z>800];df=df$z[df$z<2400]

           

            datac=data.frame(sDR, sCFOM, sCC); View(datac)

            x=x  #DR

            y=y  #FOM

            z=z  #CC

            df <- data.frame(x=x,y=y,z=z)

            #p <- plot_ly(data = df, x=~x,y=~y, z=~z, type = "scatter3d", colorscale='Jet');p

            #p <- plot_ly( x = x,  y =y,  z = z,  type = "contour" );p

           

            library(plotly) 

            p <- plot_ly(data = df, x=~x,y=~y, z=~z, type = "histogram2dcontour", colorscale='Jet');p

            p <- plot_ly(data = df, x=~x,y=~y, z=~z, type = "contour", colorscale='Jet');p

            fig <- plot_ly( x = x,  y = y,  z = z,  type = "contour" ); fig

           

           

            # EMISSION EMISSION AND ENERGY SAVED

            rm(list=ls())

            rm(r)

            #data=write.table(datac, "data.txt", sep="\t")

            r=read.table(file("clipboard"), header=T, sep="\t", dec=",")

            str(r); attach(r); names(r)

           #OTHER DISTRIBUTION FORM OF WEIBULL

           

            data=read.table(file("clipboard"), header=T, sep="\t", dec=".")

            str(data)

            data=data.frame(data)

           

            library(ggfan)

            plot(ws, type="l")

            # add fan

            fan(data, start=1, anchor=ws[time(ws)==2],

                type="interval", probs=seq(5, 95, 5), ln=c(50, 80))

            library(ggplot2)

            ggplot(fake_df, aes(x=x,y=y)) +geom_fan()

            ggplot(data, aes(x=month,y=ws)) +geom_fan()

           

            #use precomputed quantiles - reducing storage requirements.

            intervals  = 1:19/20

            fake_q     <- calc_quantiles(fake_df, intervals=intervals)

            fake_q     <- calc_quantiles(data, intervals=intervals)

           

           

            #intervals in geom_fan must be the same as used to compute quantiles.

            p<-ggplot(fake_q, aes(x=x,y=y, quantile=quantile)) +

              geom_fan(intervals=intervals)

            p  + theme_bw()

            # change the colour scale

            p1=ggplot(fake_df, aes(x=x,y=y)) + geom_fan() + scale_fill_gradient(low="red", high="pink")

            p1  + theme_bw()

           

            library("zoo")

            library("tsbugs")

            library("fanplot")

            plot(NULL, main="Percentiles", xlim = c(1, 965), ylim = c(-2.5, 1.5))

            fan(data = th.mcmc)

           

            # plot

            fan0(data = th.mcmc, type = "interval", ln = c(0.5, 0.8, 0.95),

                 llab = TRUE, rcex = 0.6)

           

            fan0(data = data$ws, type = "interval", ln = c(0.5, 0.95),

                 llab = TRUE, rcex = 0.6)

           

            x=data$month

            y=data$ws

            # Main Plot

            #ylim <- c(min(y)-interval, max(y)+interval) # account for CI when determining ylim

            #plot(x, y, type="b", pch=20, lwd=2, ylim=ylim, col="blue", xlab="Month", ylab="Wind Speed (m/s)") # plot x and y

            par(new=TRUE)

            plot(x, y, type="b", pch=19, lwd=2, col="blue", xlab="Month", ylab="Wind Speed (m/s)") # plot x and y

            grid(lty=1, col="grey")

            # Values for Fake Data

            #x <- 1:10 # x values

            #y <- (x-1)*0.5 + rnorm(length(x), mean=0, sd=s.e.) # generate y values

            # Area plot

            # Values for noise and CI size

            s.e. <- 0.25 # standard error of noise

            interval <- s.e.*qnorm(0.975) # standard error * 97.5% quantile

           

            # Determine the x values that will go into CI

            CI.x.top <- x # x values going forward

            CI.x.bot <- rev(x) # x values backwards

            CI.x <- c(CI.x.top, CI.x.bot) # polygons are drawn clockwise

           

            # Determine the Y values for CI

            CI.y.top <- y+interval # top of CI

            CI.y.bot <- rev(y)-interval # bottom of CI, but rev Y!

            CI.y <- c(CI.y.top,CI.y.bot) # forward, then backward

           

            # Add a polygon for the CI

            CI.col <- adjustcolor("blue",alpha.f=0.25) # Pick a pretty CI color

            polygon(CI.x, CI.y, col=CI.col, border=NA) # draw the polygon

           

            CI.col <- adjustcolor("red",alpha.f=0.01) # Pick a pretty CI color

            polygon(CI.x, CI.y, col=CI.col, border=NA) # draw the polygon

           

            # Add legend to explain what the arrows are

            legend("topleft", legend="", xjust=0.5, bty="n")

            #legend("topleft", legend="Arrows indicate path\nfor drawing polygon", xjust=0.5, bty="n")

           

            dev.off()

            # Point out path of polygon

            arrows(CI.x.top[1], CI.y.top[1]+0.1, CI.x.top[3], CI.y.top[3]+0.1)

            arrows(CI.x.top[5], CI.y.top[5]+0.1, CI.x.top[7], CI.y.top[7]+0.1)

           

            arrows(CI.x.bot[1], CI.y.bot[1]-0.1, CI.x.bot[3], CI.y.bot[3]-0.1)

            arrows(CI.x.bot[6], CI.y.bot[6]-0.1, CI.x.bot[8], CI.y.bot[8]-0.1)

           

            ggplot(data = data, aes(x = month, y =ws)) +

              geom_line(aes(size = ws), color = "#FC4E07")

           

            x <- rrayleigh(1e5, 13)

            hist(x, 100, freq = FALSE)

            curve(drayleigh(x, 13), 0, 60, col = "red", add = TRUE)

            hist(prayleigh(x, 13))

            plot(ecdf(x))

            curve(prayleigh(x, 13), 0, 60, col = "red", lwd = 2, add = TRUE)

           

            #Uniform Distribution

            runif(n=10, min=0, max=1)

           

            #Normal Distribution

            rnorm(n=10, mean=0, sd=1)

           

            #Binomial Distribution

            rbinom(n=10, size=5, prob=0.2)

           

            #The log-normal Distribution

            rlnorm(n=10, meanlog=0, sdlog=1)

           

            #Weibull Distribution

            hist(rweibull(emp, shape=kmm, scale = cmm))

           

            #Exponential Distribution

            rexp(n=10, rate = 1)

           

            #Poisson Distribution

            rpois(n=10, lambda=1)

           

            #Gamma Distribution

            rgamma(n=10, shape=1, rate = 1)

           

            #Chisquare Distribution

            rchisq(n=10, df=3, ncp=1)

            #where df is degrees of freedom, and ncp is non-centrality parameter

           

            require("DEEVD")

            y<-rweibull(V_60,1)

           

            h<-0.79 * IQR(y) * length(y) ^ (-1/5)

            mseweibull(y,200,h,"Weibull")

           

            Fn <- ecdf(weibullmm)

            plot(Fn, verticals = TRUE, col.points = "blue",col.hor = "red", col.vert = "bisque")

            plot(Fn, verticals = TRUE, do.points = FALSE)

           

            require(Hmisc)

            Ecdf(weibullmm, xlab="")

            scat1d(weibullmm)                          # add rug plot

            histSpike(weibullmm, add=TRUE, frac=.15)   # add spike histogram

            Ecdf(weibullmm, datadensity='density')     # add rug plot

            ed= Ecdf(weibullmm)

            d=data.frame(ed$x)

           

            library(edfun)

            set.seed(123);x <- rnorm(1000)

            x_dist <- edfun(weibullmm)

            f <- x_dist$dfun

            curve(f, -2,2)

            set.seed(123)

            x <- rnorm(1000)

            x_dist <- edfun(x)

            f <- x_dist$dfun

            curve(f, -2,2)

            f <- x_dist$pfun

            curve(f, -2,2)

           

            require(EnvStats)

            x <- qemp(p = seq(0, 1, len = 92065, obs = weibullmm) )

            y <- demp(x, weibullmm)

           

            require(mltools)

            dt <- data.frame(x=c(0.3, 1.3, 1.4, 3.6), y=c(1.2, 1.2, 3.8, 3.9)); dt

            empirical_cdf(dt$x, ubounds=seq(1, 4, by=1.0))

            #empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0)))

            #empirical_cdf(dt, ubounds=list(x=seq(1, 4, by=1.0), y=seq(1, 4, by=1.0)))

           

           

 

 

 

 

 

 

 

            "Have fun!

If you find any errors or codes that do not work, please feel free to write to me at abdi-basid@outlook.com."

 

Abdi-Basid ADAN

 

           

           

           

           


The Abdi-Basid Courses Institute