The Abdi-Basid Courses Institute is a fully virtual platform aiming to unveil the engine of science and make it accessible to all. We offer online courses, live sessions, and multimedia content across fields like statistics, climate science, AI, and more. Our mission is to bridge science and society through inclusive, flexible, and engaging learning for students, professionals, educators, and curious minds worldwide.
Translate
Spatiotemporal Analysis of Climate Data
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
- Click here to see the full code and results.
- https://rpubs.com/abdibasidadan/HCA
Have fun!
Mathématique d’Algèbre
Mathématique d’Algèbre
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
# 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
# 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
# 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)
#
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
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
#
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")
# 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
The Abdi-Basid Courses Institute
- Calculs d'ABJAD et JAFR
- Intégration et Cointégration des Variables (ICV)
- Une substance stupéfiante : La chance
- Une information pertinente, prouesses de Data Science, Big Data et de l’Intelligence Artificielle
- Perspectives Inédites sur la Conscience
- Le Nombre d'Or
- How to Diagnose Change in Temperature and Precipitation with the R program ?
- Principaux Fondements du Sondage
- Modèle Cosmologique de l’Avant Big Bang
- The Abdi-Basid Courses Institute