Translate

Spatiotemporal Analysis of Climate Data

Description:

This project analyzes climate data, including 2-meter temperature (t2m) and wind components (u, v) from 2003 to 2023, using data science tools like Python, Xarray, Pandas, etc. The goal is to explore seasonal variations, and produce clear visualizations.

🎯 The detailed methodology and results can be accessed through this link: 

👉click here NOW ! https://github.com/abdibasidadan-byte


Abdi-Basid ADAN, 2025


The Abdi-Basid Courses Institute

Hierarchical Cluster Analysis with Dendrogram

The hierarchical clustering analysis with dendrogram, as presented in this document, is a statistical method designed to group similar observations into clusters based on their characteristics. It begins by computing a Euclidean distance matrix between observations after standardizing the data to eliminate scale biases. The Ward.D2 method is employed to construct a dendrogram by minimizing intra-cluster variance at each merging step. The optimal number of clusters is determined using the NbClust algorithm, which evaluates indices such as silhouette and gap statistics to identify a robust partition (here, 3 clusters). A principal component analysis (PCA) is then performed to reduce dimensionality, followed by hierarchical clustering on principal components (HCPC) to refine the results. Visualizations, particularly via fviz_dend, facilitate interpretation of the groupings, with colored rectangles highlighting clusters in the dendrogram. The results are exported as tables and files for further analysis.


  • Données
  • Clustering hiérarchique
  • Nombre optimal de clusters
  • Visualisation avancée du dendrogramme
  • Résultats
  • Extraction des groupes




Have fun!



Mathématique d’Algèbre

 

Mathématique d’Algèbre

                                                       ________________________________________
     


La réalité est cette phénomène,  qui se manifeste sans cesse à travers nos sensations. Contrairement aux sentiments, ces derniers jouent un rôle pionnier dans la compréhension et la détermination de celle-ci.

Connaissant la frontière plus fine entre l'irréalité (virtualité, film, réseaux sociaux; rêves...etc.) et la réalité;   entre le deux mondes, la première est bien déduite du second.


Mais, que peut-on dire plus concrètement de cette réalité, que nos esprit y nagent tout comme un poisson dans son milieu?


Considérant cette remise en cause, il est sans doute possible de donner une infinité de réponses.

Cette réalité, auquelle il est presque impossible de renoncer Ã  ceux que nous transmet nos divers sens, qui semble être faite que de la mathématique. 

En effet, la réalité n'est rien d'autre que divers objets mathématiques, en ce sens caractérisés par  des espaces; des tailles; des mesures; des surfaces; des longueur; des distances; des cercle; des cubes; des sphères; des polytopes; des matrices; des systèmes; des ensembles...etc.

La vie, elle même est mathématique , car rien que nos espérances de vie sont des intervalles de temps, une période, une mesure mathématique. Nos sens nous communique mathématiquement, une araignée fait souvent peur, car sa forme à travers  nos vue, nous fais sentir un danger, similaire pour l’ouïe, le touche, le gout et l’odorat dans des contextes divers... 

Dans ce cas, comment allons-nous percer les mystères de la mathématique?

Nous vivons dans des espaces mathématiques et utilisant toujours des objets mathématiques.

Vivre sans la mathématique est comparer à un corps sans vie, puisque le néant est aussi un objet mathématique (espace vide). 

Quelque soit la position de l'objet, il semble appartenir à un espace. Nous connaissons l'espace euclidien; hermitien ou encore prehilbertien, qui sont eux aussi,  des objets algébriques.

Nous avons toujours appris qu'un application linéaire ou transformation linéaire des éléments appartenant un espace vectoriel (anneau, groupe abéliens, corps,..etc) est délimité par un ensemble de départ (qui donne les valeurs des antécédents) et un ensemble d'arrivé (les images ou résultat de la transformations des éléments variables).

Dans les  dimensions 0, 1, 2 et 3, les objets change de formes et facilement perceptible par l’Å“il. A la limite, tout objet en dimension supérieur à 3 est difficilement observable.


La géométrie est la représentation plus simplifiée du complexe numérique ou matricielle de la mathématique.
Un objet mathématique est formalisé par cette transformation sur des éléments identifiables par des ensembles et caractérisé par des arrêts.

Ayant une base ou plusieurs sommets, le déplacement ou la mobilité à la recherche d'un milieu idéal dans un espace, revient Ã  changer d'une position à une autre (espace vectoriel), pour ce faire, il nous faudra une locomotion, qui n'est rien d'autre qu'une base constituée des famille des éléments (vecteurs propres associé aux valeurs ou solutions du système) libre et génératrice rendu possible par la diagonalisation (ou triangularisation et à travers la matrice de passage (ou changement de base), qui consiste à ramener un ensemble (endomorphisme) en une matrice diagonale (trigonale).


Cette dernière se traduit par l'homothétie(déplacement sur une même direction) ou la rotation (d'une direction à une autre) dans l'ensemble de l'espace vectoriel.


En effet, géométriquement, se déplacer c'est de partir d'un point vers un autre représente une distance.
Matériellement , elle revient à calculer le déterminant (ou l'inversibilité) d'une matrice avec la matrice d'unité de même dimension avec un inconnu.

La nouvelle position est sue par les valeurs de ces inconnue fixes dans l'ensemble et qui permettra la mise en place des éléments (vecteurs) de la base.

On parvient à se déplacer dans un espace,  tout en changeant de base par le moyen financier de la diagonalisation...
                         
                                                                                         
                                                   
                                                                                                                                                     Abdi-Basid ADAN, encyclopedie, 2017

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