Translate

Complementarity of Time and Space

 ___________________Complementarity of Time and Space

 

The Gregorian calendar (in honour of Pope Gregory XIII of the Catholic Church) was born in 1582, after the reforms made to the Roman Republican calendar and then to the Julian calendar (in honour of Julius Caesar, 46 BC).

To see the beginnings of this evolution, we must go back to the 5th millennium to discover the first solar calendar, the one adopted by the Egyptians, based on the star Sirius (the second brightest star in our galaxy). However, with the recent discovery in 2013 by a team from the University of Birmingham, Scotland, of a lunar calendar dating back over 10 millennia, the record for the oldest calendar has been broken.

Put simply, it takes us 8772 hours (on average) to complete an elliptical orbit around the sun. But with the expansion of the Universe (according to the Hubble constant of 67.4 km/s/Mpc (kilometres per second per megaparsec)), the journey of our galaxy since the Big Bang event means that time is no longer static in a cycle, like the hand on a clock. By moving from one point in the Universe to another in the course of a year, the Milky Way must travel through the Cosmos.

The logical possibility of going back in time would be to eventually bring the galaxy back to its starting point of one year. However, this probability is infinitesimally small, because it would involve disrupting the revolution of the sun around its axis, the solar system or the spiral-moving nayau of the galaxy. Infinitesimally small, because if the Andromeda galaxy moves in a different direction to the opposite direction on the Milky Way, things will take on a new time dimension in the system.

Abdi-Basid ADAN, 2022

Multidisciplinary Interpretation of Precipitation: Principles and Concepts (Part I)

 

Multidisciplinary Interpretation of Precipitation: Principles and Concepts (Part I)

 

Etymologically derived from the Latin expression "praecipitatio" which literally means "fall". Precipitation, according to the meteorological sense, takes another dimension of concept to designate a particular natural phenomenon of the climate called "rain". This last one has the possibility to occur in a region, in several states (liquid, solid... etc.). With the breakthrough of scientific research in the nineteenth and twentieth centuries, the most abundant element in the Universe and on Earth are coincidentally the elements that constitute water, that is, hydrogen in the Universe and oxygen on Earth. We owe this important discovery to the precursor of modern chemistry, Antoine Lavoisier (1743-1794), who succeeded in identifying the components of water in a world where technology was sorely lacking to carry out scientific research.

From the well-known characteristic forms attributed to precipitation, it is also known that there is a secondary specificity that categorizes precipitation, depending on the area of coverage; intensity and duration. It seems quite reasonable to assume that less extensive cloud cover will tend to result in precipitation of higher intensity and shorter duration. The latter is defined as convective precipitation, as opposed to stratiform precipitation. In the seven layers that make up the atmosphere, the different cloud classifications are generally located at an altitude between 1000 and 12000 m, barely exceeding the troposphere (13000 m).

The real cradle of precipitation begins with the partial blocking of stellar radiation by the ozone layer of the stratosphere. In fact, once they reach the surface of the earth, the emitted radiations cause, through the temperature, the warming that results in the evaporation of the surface of the seas (which is none other than the evapotranspiration). Thus, the water vapor generated as a result of this phenomenon, causes an upward movement under the impulse of the atmospheric pressure which gradually decreases in altitude. A lower pressure due to a low density of molecules present in the air with a lower temperature leads in turn to the condensation of water vapor around a core, consisting of charged and neutral particles.  These combine to reach the saturation point of humidity (high density of water vapor in the air) and marks the appearance of the cloud in its irregular forms that we observe during the day. With its almost negligible weight compared to its immense size, the quantity of visible clouds manages however to remain suspended in the atmosphere and thus escapes, for a time, the gravitational attraction of the terrestrial gravity.

Drawn at will by wind circulations, the new cooling and condensation improvise the cloud to take more weight in the process of supersaturation and favors the phenomenon of precipitation and previously conditioned by the humidity of the air of the coverage area. Once again, between the humid area and the dry air, the temperature and the equinox play in favor or against a precipitation phenomenon that can give life to the ground without vaporizing into the atmosphere. Although essential for the supply of groundwater, which is sometimes found almost in the fourth layer of the earth's crust (lower mantle), the chemical composition of precipitation can be altered by the polluting components present in the air. Therefore, it would not be a prejudice to consider precipitation as a major factor of a rapid response disease in a locality.

Due to the rotation, revolution, tilt and sphericity of the Earth, the unevenly distributed global temperature results in the occurrence of wind circulations in multiple directions. For example, a warm air mass gaining altitude cools and creates convection to interact with water vapour as it condenses and, on the other hand, causes wind to be driven.  In addition, the horizontal force of atmospheric pressures and the perpendicular force of inertia known as its precursor Coriolis (Gaspard-Gustave Coriolis (1792-1843)) explain in the literature to a large extent the direction and intensity of wind in atmospheric circulations, which is a major means of locomotion of clouds across continents and oceans.

On a global scale, there are three distinct zones of wind circulation: the Hadley cell, the Ferrel convection and the polar circulation. For the first, the Hadley cell, located from the Equator to 30°N and 30°S, winds blow from the Northeast to the Southwest and from the Southeast to the Northwest (called Trade Winds) and marks the low pressure intertropical convergence zone. The second, the Ferrel zone, is characterized by transient low pressure areas with winds blowing generally towards the West. North and south of the 60th parallel is the polar zone with eastward wind speeds. These three zones of the globe are interconnected by the so-called "fast air" atmospheric current (polar and subtropical type) whose directions are almost sinusoidal over the globe.

Through these atmospheric currents, oceanic circulations are also affected by seasonal variability as pointed out by Walker (1868-1958) and Humboldt (1769-1859). For example, the decrease of the circulation in the Hadley cell, can displace the Walker cell and favor the displacement of warm surface waters of the South Pacific: this meteorological phenomenon is known under the famous expression "El Niño", which in turn influences the precipitation, just as "La Niña" would disrupt the temperature of other lands.

In addition, the topographic nature of the Earth's surface also interacts with the climate. For example, by blocking the circulation of temperature at high altitudes and weather, mountainous areas contribute to the supply of precipitation over several kilometers and change the climatic conditions of the surrounding area.

Eccentrically, the Paleocene-Eocene period (56 million years) has been identified as a breakthrough in the knowledge of paleoclimatic variability. This highlights the existence of a major factor, beyond a simple meteorite impact on the Earth, to upset the climate balance.  The change in the Earth's orbit, or the deformation of the Earth's ellipse, according to scientists at the University of Pennsylvania, marked the warmest period since the Earth's birth 4.6 billion years ago. Such warming has certainly traced the history of precipitation evolution on Earth.

From a theological point of view, the links between atmospheric circulations and precipitation have been mentioned since the seventh century in, for example, the Holy Quran of Islam. In particular, it is reported in Sura 30, verse 48:

« It is Allah Who sends the winds, which then stir up ˹vapour, forming˺ clouds, which He then spreads out in the sky or piles up into masses as He wills, from which you see rain come forth. Then as soon as He causes it to fall on whoever He wills of His servants, they rejoice, ».

 

 

And from Sura 24, verse 43:

« Do you not see that Allah gently drives the clouds, then joins them together, piling them up into masses, from which you see raindrops come forth? And He sends down from the sky mountains ˹of clouds˺ loaded with hail, pouring it on whoever He wills and averting it from whoever He wills. The flash of the clouds’ lightning nearly takes away eyesight. ».

 

In general, in the process of precipitation formation, several different atmospheric phenomena according to specific standards, some known, others unknown, and exo-atmospheric phenomena contribute directly and indirectly.

 

 

Abdi-Basid ADAN, 2022.

How to Diagnose Change in Temperature and Precipitation with the R program ?

 

How to Diagnose Change in Temperature and Precipitation with the R program ?

 

Introduction

The primary purpose of this study is to demonstrate the scientific feasibility of a climate change project. To do this, it is imminent to call on a climatic database of local or satellite stations. We are going to show how to use these programs of RClimDex, RClimTool, RHtest and ClimPact under R. It is noteworthy to recall that knowledge of latitude, longitude, types of variables and their faults (missing, extreme, erroneous) are necessary for to be able to ensure the required analyzes on climate change.

I.                 RCLIMDEX

The import is done in R with an import program allowing to display a window of RCLIMDEX. With the outputs of the RCLIMDEX program under R, four documents including the climatic indices; the qualities of controls and graphics and trends will be provided to us. The indices are 27 indicators divided into precipitation, maximum temperature and minimum temperature, among which:

 Temperature indices including Min and Max temperature (SU25, TXx, TNx, TMaxMean, TNn, TMinMean, DTR,,… etc.).

 Precipitation indices including humidity and rain (PRCPTOT SDII, CDD, CWD, RX1day, RX5day, R10, R20, R95p, R99p,… etc.).

The log document provides graphs of temperature and precipitation variations, as well as other graphic illustrations in Excel format for tables and pdf for images.

The plot file groups together the figures of the climate change indices associated with their respective slopes and subjected to the Mann Kendall trend test in order to evaluate the significant trends (sign of the slope; Student significance; regression line; correlation; coefficient of determination). The last Trend document sufficiently summarizes the information in graphic format from the previous file.

I.                 RClimTool

L’importation The import is done under R with an import program allowing to display a window of RClimtool. With the outputs of the RClimTool program, three files, including homogeneity; Missing_data and Quality_Control will have to be extracted to use. The first file that emerges is the Quality_Control, for each of these variables, we study the atypical, outlier or outliers values ​​presented by our daily, monthly and annual observations. The second is that of missing value, the processing will be done separately with values ​​and without missing value. The last homogeneity document presents the various tests of normality, Mann Kendall significance, correlation between sites, with the associated graphs. It is possible to deal with missing values, because this prevents the calculation loop from functioning normally. Various deterministic methods such as statistics such as the average; the median or even probabilistic techniques (Amelia, MICE, PPCA, etc.) are used to supplement missing values ​​if they do not exceed certain thresholds of significance.

 

 

II.             RCLIMTREND

 

Plusieurs Méthodes statistiques pour les sciences du climat comme le Tests d'homogénéité absolue SNHT absolu ;  SD différent, breaks, Buishand, Pettitt, rapport de von Neumann et ratio-rank, Worsley et Craddock, tests d'homogénéité relative SNHT absolu ; break SD ; la correlation ; la recherche des valeurs aberrantes sont les diverses atout que l’on peut bénéficier avec ce programme.

III.         ClimPact

Le programme de ClimPact s’exécute de la même façon que RClimDex, les issues sont similaires cette fois-ci, une étude plus approfondie que le précèdent avec une évaluation de variation extrême. D’autant plus que nous avons comme suppléments sur le treshold (seuil). Les différents de statistiques descriptives (boxplot, histogramme.etc.). En comparant les valeurs des tests de Mann Kendall respectifs sur les indices de calculs retenus, on constate que c’est presque similaire.

IV.          RHtest

With this program, it is possible to detect point changes of the studied series and to inform us about what needs adjustment. Geoclim ; Anclim ; EdGCM ; MASH ; ProClimDB…etc

Spatial analysis tools are designed for analysis in climatology. Provides scientists and non-scientists with more decision support and facilitates filling observation gaps (precipitation and temp) using a mix of field observations, readily available satellite data and networks.

Quality Control

The preliminary study on data quality detects the extreme values ​​(tools) by realizing the statistics of maximum and minimum. The existence of missing data disrupts the analysis of the observation series for calculating indices under the RclimDex program (Zhang and Yang, 2004). A month containing more than 3 missing days is not considered in the year. An incomplete year is also private in index calculations. Statistical indicators such as the median make it possible to complete the missing values ​​when the proportion of these values ​​is negligible.

         Homogenization

Several tests make it possible to detect the homogenization of the series observed. The bivariate case like the Craddock test (1979) or the univariate case like the PETTITT test (1979). The programs of RclimDex, Rclimtool, Rclimpact (Zhang and Yang, 2004). allow the analysis of the homogenization of temperature and Precipitation series.

1.   Climate Change indices

The variability and trend of precipitation and temperature is determined with the calculation of indices under the application of RclimDex. There are 11 for the Precipitation and 16 for the temperature. The definition of each of these indices and their units are presented in the following table.

 

Table1. List of 11 ETCCDMI core Climate Indices for precipitation

Indicator

Name

Définitions

RX1day (mm)

Max 1-day precipitation amount

Monthly maximum 1-day precipitation

Rx5day (mm)

Max 5-day precipitation amount

Monthly maximum consecutive 5-day precipitation

SDII (mm/day)

Simple daily intensity index

Annual total precipitation divided by the number of wet days (defined as PRCP>=1.0mm) in the year

R10 (day)

Number of heavy precipitation days

Annual count of days when PRCP>=10mm

R20 (day)

Number of very heavy precipitation days

Annual count of days when PRCP>=20mm

Rnn (day)

Number of days above nn mm

Annual count of days when PRCP>=nn mm, nn is user defined threshold

CDD (day)

Consecutive dry days

Maximum number of consecutive days with RR<1mm

CWD (day)

Consecutive wet days

Maximum number of consecutive days with RR>=1mm

R95p (mm)

Very wet days

Annual total PRCP when RR>95th percentile

R99p (mm)

Extremely wet days

Annual total PRCP when RR>99th percentile

PRCPTOT (mm)

Annual total wet-day precipitation

Annual total PRCP in wet days (RR>=1mm)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R Program Analysis Climat Change

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TREND & CHANGE PIONT

 

#TREND ANANLYSIS

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

data

str(data)

 

#install.packages("trend")

require(trend)

 

#data(maxau)

prectot <- data[,"prectot"]

mk.test(prectot)

 

dat=read.csv(file("clipboard"),header=T, sep="\t", row.names=1)

data(nottem)

str(dat)

dat=round(dat,1)

dat1 <- ts(dat, frequency=12, start=c(1961,1))

plot.ts(dat1)

 

logsouvenirtimeseries <- log(dat1)

plot.ts(logsouvenirtimeseries)

 

require(trend)

smk.test(dat1)

 

#correlated witn precedent month

csmk.test(dat)

 

#Multivariate Mann-Kendall Test

require(trend)

data(hcb)

> plot(hcb)

 

 

s <- maxau[,"s"]

Q <- maxau[,"Q"]

cor.test(s,Q, meth="spearman")

 

partial.mk.test(s,Q)

partial.cor.trend.test(s,Q, "spearman")

 

#Cox and Stuart Trend test

cs.test(prectot)

 

s <- maxau[,"s"]

sens.slope(prectot)

 

dat=read.csv(file("clipboard"),header=T, sep="\t", row.names=1)

require(trend)

das=ts(dat, frequency=12,start=1961)

sea.sens.slope(das)

 

 

 

# Changement Dectection

#data(PagesData)

require(trend)

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

attach(data)

 

 

#Pettitt's test for single change-point detection

pettitt.test(dat)

 

 

#Buishand range test

require(trend)

(res <- br.test(prectot))

 

require(trend)

(res <- snh.test(Nile))

 

#Wallis and Moore Phase-Frequency test

frost <- ts(prectot, start=1961)

wm.test(frost)

 

 

#Bartels's test for randomness

bartels.test(prectot)

 

#Wald-Wolfowitz test for independence and stationarity

ww.test(prectot)

 

#Wallis and Moore Phase-Frequency test

wm.test(prectot)

 

 

#Buishand U test

#Nile

(res <- bu.test(prectot))

 

precto=ts(prectot, frequency=12, start=12)

par(mfrow=c(1,2))

plot(precto); plot(res)

 

 

#Standard Normal Homogeinity Test

require(trend)

#Nile

(res <- snh.test(prectot))

 

 

cor.test( x,y,alternative = c("two.sided", "less", "greater"),

use="complete.obs", method="kendall",conf.level = 0.95)

 

require(graphics)

x <- rnorm(50)

y <- runif(30)

# Do x and y come from the same distribution?

ks.test(x, y)

# Does x come from a shifted gamma distribution with shape 3 and rate 2?

ks.test(x+2, "pgamma", 3, 2) # two-sided, exact

ks.test(x+2, "pgamma", 3, 2, exact = FALSE)

ks.test(x+2, "pgamma", 3, 2, alternative = "gr")

 

#  The approach after Pettitt (1979)

#  is commonly applied to detect a single change-point

#  in hydrological series or climate series with continuous data.

#  It tests the H0: The T variables follow one or more

#  distributions that have the same location parameter (no change),

#  against the alternative: a change point exists.

 

The Pettitt-test is conducted in such a way

 

# Change-point Detection: Pettitt’s Test

library(package = dplyr, warn.conflicts = FALSE )

library(package = ggplot2, warn.conflicts = FALSE)

library(package = trend, warn.conflicts = FALSE)

 

# Load Data

data <- read.csv(file = 'c:/Users/pooya/Downloads/Torbat Heydariyeh - Daily.csv',

                 header = TRUE)

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

 

# Compactly Display the Structure of data

str(object = data)

 

 

# Return the First 10 Row of data

head(x = data, n = 10)

 

# Select Variable

Tave <- data %>%

  mutate(date = as.Date(x = paste0(Year, '-', Month, '-', Day), '%Y-%m-%d')) %>%

  select(date, t)

 

# Compactly Display the Structure of Tave

str(object = Tave)

 

 

# Return the First 10 Row of Tave

head(x = Tave, n = 10)

 

 

# Tave Summaries

summary(object = Tave)

 

# NA Remove

Tave <- na.omit(Tave)

 

 

# Plot

require(ggplot2)

ggplot(data = Tave, mapping = aes(x = date, y = prectot)) +

  geom_line()

 

 

 

# Pettitt’s test

pettittTest <- trend::pettitt.test(x = Tave[['prectot']])

print(pettittTest)

 

 

print(Tave[['date']][pettittTest$estimate])

 

 

# Plot

ggplot(data = Tave, mapping = aes(x = date, y = t)) +

  geom_line() +

  geom_vline(mapping = aes(xintercept = as.numeric(Tave[['date']][pettittTest$estimate])),

             linetype = 2,

             colour = "red",

             size = 2)

 

 

#  Break Point

#first generate some data that has monthly observations on 6 years of a seasonal

#process followed by 2 years of monthly that is not seasonal

 

#-------------------------------------------------------------------------------------

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

attach(ry)

str(ry)

 

prectot=ts(prectot, start=1961,end=2017)

plot(prectot, ylab="Precipitation (mm)", type="o",xlab="Year")

abline(h= mean(prectot),col='blue')

require(strucchange)

prectot=ts(prectot, start=1961,end=2017)

ocus.nile <- efp(prectot ~ 1, type = "OLS-CUSUM")

omus.nile <- efp(prectot ~ 1, type = "OLS-MOSUM")

rocus.nile <- efp(prectot ~ 1, type = "Rec-CUSUM")

 

 

opar <- par(mfrow=c(2,2))

plot(prectot, ylab="Precipitation (mm)", type="o",xlab="Year", main ="Annual Precipitation")

abline(h= mean(prectot),col='blue')

plot(ocus.nile, type="o",xlab="Year")

plot(omus.nile, type="o",xlab="Year")

plot(rocus.nile, type="o",xlab="Year")

 

 

 

require(strucchange)

attach(rm)

#first we are going to use the supF test to determine whether the parameters of #our monthly dummy variable regression are stable through the time series:

 

fs.days = Fstats(year~Dec+Feb+Mar+Apr+May+Jun+Jul+Aug+Sep+Oct+Nov,data=rm)

plot(fs.days)

 

#use the breakpoints functions to find BIC corresponding to optimal number of #breaks

bp.days = breakpoints(year~Dec+Feb+Mar+Apr+May,data=rm)

summary(bp.days)

x11()

plot(bp.days)

 

prectot=ts(prectot, start=1961, end=2017)

bp.nile <- breakpoints(prectot ~ 1)

nile.fac <- breakfactor(bp.nile, breaks = 1 )

fm1.nile <- lm(prectot~ nile.fac - 1)

plot(bp.nile)

 

prectot=ts(prectot, start=1961, end=2017)

opar <- par(mfrow=c(2,1), mar=c(2,2,0,2))

plot(ocus.nile, alt.boundary=F,main="")

abline(v= 1980, lty=2, col='red')

plot(prectot, ylab="")

abline(h= mean(prectot),col='blue')

abline(v= 1980, lty=2, col='red')

lines(ts(predict(fm1.nile),start=1980,freq=1), col='darkgreen',lwd=2)

par(opar)

 

 

 

plot(prectot)

 

## F statistics indicate one breakpoint

fs.nile <- Fstats(prectot ~ 1)

plot(fs.nile)

breakpoints(fs.nile)

lines(breakpoints(fs.nile))

 

## or

bp.nile <- breakpoints(prectot ~ 1)

summary(bp.nile)

 

## the BIC also chooses one breakpoint

plot(bp.nile)

breakpoints(bp.nile)

 

## confidence interval

ci.nile <- confint(bp.nile)

ci.nile

lines(ci.nile)

 

 

## fit null hypothesis model and model with 1 breakpoint

fm0 <- lm(prectot ~ 1)

fm1 <- lm(prectot ~ breakfactor(bp.nile, breaks = 1))

plot(prectot, xlab="Year", ylab="Preciptation (mm)")

lines(ts(fitted(fm0), start = 2006), col = 3)

lines(ts(fitted(fm1), start = 2006), col = 4)

lines(bp.nile)

abline(v=2006, lty=2, col=2)

 

## confidence intervals

ci.seat2 <- confint(bp.nile, breaks = 2)

ci.seat2

lines(ci.seat2)

 

 

#rm(list=ls())

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

str(data)

 

if(!require(mblm)){install.packages("mblm")}

if(!require(ggplot2)){install.packages("ggplot2")}

 

 

data$Year = round(data$Year)

data$Year = data$Year - 1961

 

 

library(mblm)

model= mblm(prectot ~ Year, data=data)

summary(model)

Sum = summary(model)$coefficients

 

library(ggplot2)

ggplot(data, aes(x=Year, y=prectot)) +

  geom_point() +

  geom_abline(intercept = Sum[1], slope = Sum[2], color="blue", size=1.2) +

  labs(x = "Years after 1961")

 

 

### Optional quantile regression follows

if(!require(quantreg)){install.packages("quantreg")}

library(quantreg)

 

model.q = rq(prectot ~ Year, data = data, tau = 0.5)

summary(model.q)

 

library(ggplot2)

model.null = rq(prectot ~ 1, data = data, tau = 0.5)

anova(model.q, model.null)

 

Sumq = summary(model.q)$coefficients

ggplot(data, aes(x=Year, y=prectot)) +

  geom_point() +

  geom_abline(intercept = Sumq[1], slope = Sumq[2], color="red", size=1.2) +

  labs(x = "Years after 1961")

 

 

1)Seasonality

###############

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

attach(r)

 

reg=lm(JFM~year)

summary(reg)

 

JFM=ts(JFM, start=1953, end=2017, freq=1)

plot(JFM, type="b", lty=3)

 

y = -0.25x + 519.54

p-value = .09054

 

 

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

getwd()

setwd("C:/Users/Lenovo/Documents")

write.table(rm, file="anclim.txt",row.names=F)

 

 

rm=read.table(file("clipboard"),header=T, sep="\t")

 

str(rm)

attach(rm)

 

 

#plot(0,0,xlim=c(1961,2017), ylim=c(0,300))

DJF=ts(DJF, start=1961,end=2017)

Y=ts(Y, start=1961, end=2017)

#par(new=TRUE)

#plot(DJF, type="o", xlab="", ylab="",axes=FALSE)

#par(new=TRUE)

#plot(Y, type="l", xlab="", ylab="", add=TRUE, axes=FALSE)

 

names(r)

reg=lm(SNO.tav~X,data=r)

summary(reg)

 

plot(X,MAM, type="o",lty=9, xlab="Year", ylab="Precipitation(mm)")

d=abline(reg)

legend("topright",c("precipitation(mm)","adjusted"),col=c("black","black"),cex=c(0.7,0.7),lty=c(9,1))

legend(locator(1),c("y= -0.323 x+677

P=.526

R²=.0073"),cex=0.65,bg="NA",box.col="white")

 

 

 

str(r)

library(climatol) # load the functions of the package

homogen("r", 1980, 2017, expl=TRUE)

#Missing Value

library(naniar)

vis_miss(r[,-1])

#dd2m("r", 1981, 2000, homog=TRUE)

#dahstat(’Ttest’, 1981, 2000, stat=’series’)

 

library(naniar)

require("UpSetR")

gg_miss_upset(r)

 

library(mice)

md.pattern(r)

 

library(reshape2)

library(ggplot2)

 

#Homogeneous

############

 

#Homogeneous

boxplot(data)

hist(data)

 

#median ajustement

pairs(datatable, col="blue", main="Scatterplots")

Y=cbind(LRY)

X=cbind(LRV, LRC, INT)

#

hist(Y, prob=TRUE, col = "blue", border = "black")

lines(density(Y))

#

OLSreg=lm(Y~X)

summary(OLSreg)

#

Qreg25=rq(Y~X, tau=0.25)

summary(Qreg25)

#

QR=rq(Y~X, tau=seq(0.2, 0.8, by=0.1))

sumQR=summary(QR)

#

anova(Qreg25, Qreg75)

#

QR=rq(Y~X, tau=seq(0.2, 0.8, by=0.1))

sumQR=summary(QR)

#

plot(sumQR)

 

 

 

# Check for Break point

 library("bfast")

 library("zoo")

 library("strucchange")

 

 plot(Nile, ylab="Annual Flow of the river Nile")

    abline(h= mean(Nile),col='blue')

 

 plot(merge(

 Nile = as.zoo(Nile),

 zoo(mean(Nile), time(Nile)),

 CUSUM = cumsum(Nile - mean(Nile)),

 zoo(0, time(Nile)),

 MOSUM = rollapply(Nile - mean(Nile), 15, sum),

 zoo(0, time(Nile))

 ), screen = c(1, 1, 2, 2, 3, 3), main = "", xlab = "Time",

 col = c(1, 4, 1, 4, 1, 4)

 ) 

 

plot(merge(

Nile = as.zoo(Nile),

zoo(c(NA, cumsum(head(Nile, -1))/1:99), time(Nile)),

CUSUM = cumsum(c(0, recresid(lm(Nile ~ 1)))),

zoo(0, time(Nile))

), screen = c(1, 1, 2, 2), main = "", xlab = "Time",

col = c(1, 4, 1, 4)

)

 

ocus.nile <- efp(Nile ~ 1, type = "OLS-CUSUM")

omus.nile <- efp(Nile ~ 1, type = "OLS-MOSUM")

rocus.nile <- efp(Nile ~ 1, type = "Rec-CUSUM")

 

 

opar <- par(mfrow=c(2,2))

plot(ocus.nile)

plot(omus.nile)

plot(rocus.nile)

par(opar)

 

 

plot(1870 + 5:95, sapply(5:95, function(i) {

before <- 1:i

after <- (i+1):100

res <- c(Nile[before] - mean(Nile[before]), Nile[after] - mean(Nile[after]))

sum(res^2)

}), type = "b", xlab = "Time", ylab = "RSS")

 

bp.nile <- breakpoints(Nile ~ 1)

nile.fac <- breakfactor(bp.nile, breaks = 1 )

fm1.nile <- lm(Nile ~ nile.fac - 1)

plot(bp.nile)

 

 

opar <- par(mfrow=c(2,1), mar=c(2,2,0,2))

plot(ocus.nile, alt.boundary=F,main="")

abline(v= 1898, lty=2, col='red')

plot(Nile, ylab="Annual Flow of the river Nile")

abline(h= mean(Nile),col='blue')

abline(v= 1898, lty=2, col='red')

lines(ts(predict(fm1.nile),start=1871,freq=1), col='darkgreen',lwd=2)

par(opar)

 

 

 

#TREND ANANLYSIS

#################

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

data

str(data)

 

#install.packages("trend")

require(trend)

 

#data(maxau)

prectot <- data[,"prectot"]

mk.test(prectot)

 

dat=read.csv(file("clipboard"),header=T, sep="\t", row.names=1)

data(nottem)

str(dat)

dat=round(dat,1)

dat1 <- ts(dat, frequency=12, start=c(1961,1))

plot.ts(dat1)

 

logsouvenirtimeseries <- log(dat1)

plot.ts(logsouvenirtimeseries)

 

require(trend)

smk.test(dat1)

 

#correlated witn precedent month

csmk.test(dat)

 

#Multivariate Mann-Kendall Test

require(trend)

data(hcb)

> plot(hcb)

 

 

s <- maxau[,"s"]

Q <- maxau[,"Q"]

cor.test(s,Q, meth="spearman")

 

partial.mk.test(s,Q)

partial.cor.trend.test(s,Q, "spearman")

 

#Cox and Stuart Trend test

cs.test(prectot)

 

s <- maxau[,"s"]

sens.slope(prectot)

 

dat=read.csv(file("clipboard"),header=T, sep="\t", row.names=1)

require(trend)

das=ts(dat, frequency=12,start=1961)

sea.sens.slope(das)

 

 

 

# Changement Dectection

#######################

#data(PagesData)

require(trend)

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

attach(data)

 

 

#Pettitt's test for single change-point detection

pettitt.test(dat)

 

 

#Buishand range test

require(trend)

(res <- br.test(prectot))

 

require(trend)

(res <- snh.test(Nile))

 

#Wallis and Moore Phase-Frequency test

frost <- ts(prectot, start=1961)

wm.test(frost)

 

 

#Bartels's test for randomness

bartels.test(prectot)

 

#Wald-Wolfowitz test for independence and stationarity

ww.test(prectot)

 

#Wallis and Moore Phase-Frequency test

wm.test(prectot)

 

 

#Buishand U test

#Nile

(res <- bu.test(prectot))

 

precto=ts(prectot, frequency=12, start=12)

par(mfrow=c(1,2))

plot(precto); plot(res)

 

 

#Standard Normal Homogeinity Test

require(trend)

#Nile

(res <- snh.test(prectot))

 

 

cor.test( x,y,alternative = c("two.sided", "less", "greater"),

use="complete.obs", method="kendall",conf.level = 0.95)

 

require(graphics)

x <- rnorm(50)

y <- runif(30)

# Do x and y come from the same distribution?

ks.test(x, y)

# Does x come from a shifted gamma distribution with shape 3 and rate 2?

ks.test(x+2, "pgamma", 3, 2) # two-sided, exact

ks.test(x+2, "pgamma", 3, 2, exact = FALSE)

ks.test(x+2, "pgamma", 3, 2, alternative = "gr")

 

 

#  The approach after Pettitt (1979)

#  is commonly applied to detect a single change-point

#  in hydrological series or climate series with continuous data.

#  It tests the H0: The T variables follow one or more

#  distributions that have the same location parameter (no change),

#  against the alternative: a change point exists.

 

The Pettitt-test is conducted in such a way

 

# Change-point Detection: Pettitt’s Test

library(package = dplyr, warn.conflicts = FALSE )

library(package = ggplot2, warn.conflicts = FALSE)

library(package = trend, warn.conflicts = FALSE)

 

# Load Data

data <- read.csv(file = 'c:/Users/pooya/Downloads/Torbat Heydariyeh - Daily.csv',

                 header = TRUE)

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

 

# Compactly Display the Structure of data

str(object = data)

 

 

# Return the First 10 Row of data

head(x = data, n = 10)

 

# Select Variable

Tave <- data %>%

  mutate(date = as.Date(x = paste0(Year, '-', Month, '-', Day), '%Y-%m-%d')) %>%

  select(date, t)

 

# Compactly Display the Structure of Tave

str(object = Tave)

 

# Return the First 10 Row of Tave

head(x = Tave, n = 10)

 

# Tave Summaries

summary(object = Tave)

 

# NA Remove

Tave <- na.omit(Tave)

 

# Plot

require(ggplot2)

ggplot(data = Tave, mapping = aes(x = date, y = prectot)) +

  geom_line()

 

 

# Pettitt’s test

pettittTest <- trend::pettitt.test(x = Tave[['prectot']])

print(pettittTest)

 

 

print(Tave[['date']][pettittTest$estimate])

 

 

# Plot

ggplot(data = Tave, mapping = aes(x = date, y = t)) +

  geom_line() +

  geom_vline(mapping = aes(xintercept = as.numeric(Tave[['date']][pettittTest$estimate])),

             linetype = 2,

             colour = "red",

             size = 2)

 

 

 

#  Break Point

#first generate some data that has monthly observations on 6 years of a seasonal

#process followed by 2 years of monthly that is not seasonal

 

#-------------------------------------------------------------------------------------

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

attach(ry)

str(ry)

 

prectot=ts(prectot, start=1961,end=2017)

plot(prectot, ylab="Precipitation (mm)", type="o",xlab="Year")

abline(h= mean(prectot),col='blue')

require(strucchange)

prectot=ts(prectot, start=1961,end=2017)

ocus.nile <- efp(prectot ~ 1, type = "OLS-CUSUM")

omus.nile <- efp(prectot ~ 1, type = "OLS-MOSUM")

rocus.nile <- efp(prectot ~ 1, type = "Rec-CUSUM")

 

 

opar <- par(mfrow=c(2,2))

plot(prectot, ylab="Precipitation (mm)", type="o",xlab="Year", main ="Annual Precipitation")

abline(h= mean(prectot),col='blue')

plot(ocus.nile, type="o",xlab="Year")

plot(omus.nile, type="o",xlab="Year")

plot(rocus.nile, type="o",xlab="Year")

 

 

 

require(strucchange)

attach(rm)

#first we are going to use the supF test to determine whether the parameters of #our monthly dummy variable regression are stable through the time series:

 

fs.days = Fstats(year~Dec+Feb+Mar+Apr+May+Jun+Jul+Aug+Sep+Oct+Nov,data=rm)

plot(fs.days)

 

#use the breakpoints functions to find BIC corresponding to optimal number of #breaks

bp.days = breakpoints(year~Dec+Feb+Mar+Apr+May,data=rm)

summary(bp.days)

x11()

plot(bp.days)

 

 

prectot=ts(prectot, start=1961, end=2017)

bp.nile <- breakpoints(prectot ~ 1)

nile.fac <- breakfactor(bp.nile, breaks = 1 )

fm1.nile <- lm(prectot~ nile.fac - 1)

plot(bp.nile)

 

prectot=ts(prectot, start=1961, end=2017)

opar <- par(mfrow=c(2,1), mar=c(2,2,0,2))

plot(ocus.nile, alt.boundary=F,main="")

abline(v= 1980, lty=2, col='red')

plot(prectot, ylab="")

abline(h= mean(prectot),col='blue')

abline(v= 1980, lty=2, col='red')

lines(ts(predict(fm1.nile),start=1980,freq=1), col='darkgreen',lwd=2)

par(opar)

 

 

plot(prectot)

 

## F statistics indicate one breakpoint

fs.nile <- Fstats(prectot ~ 1)

plot(fs.nile)

breakpoints(fs.nile)

lines(breakpoints(fs.nile))

 

## or

bp.nile <- breakpoints(prectot ~ 1)

summary(bp.nile)

 

## the BIC also chooses one breakpoint

plot(bp.nile)

breakpoints(bp.nile)

 

## confidence interval

ci.nile <- confint(bp.nile)

ci.nile

lines(ci.nile)

 

 

## fit null hypothesis model and model with 1 breakpoint

fm0 <- lm(prectot ~ 1)

fm1 <- lm(prectot ~ breakfactor(bp.nile, breaks = 1))

plot(prectot, xlab="Year", ylab="Preciptation (mm)")

lines(ts(fitted(fm0), start = 2006), col = 3)

lines(ts(fitted(fm1), start = 2006), col = 4)

lines(bp.nile)

abline(v=2006, lty=2, col=2)

 

## confidence intervals

ci.seat2 <- confint(bp.nile, breaks = 2)

ci.seat2

lines(ci.seat2)

 

 

#rm(list=ls())

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

str(data)

 

if(!require(mblm)){install.packages("mblm")}

if(!require(ggplot2)){install.packages("ggplot2")}

 

 

data$Year = round(data$Year)

data$Year = data$Year - 1961

 

 

library(mblm)

model= mblm(prectot ~ Year, data=data)

summary(model)

Sum = summary(model)$coefficients

 

library(ggplot2)

ggplot(data, aes(x=Year, y=prectot)) +

  geom_point() +

  geom_abline(intercept = Sum[1], slope = Sum[2], color="blue", size=1.2) +

  labs(x = "Years after 1961")

 

 

### Optional quantile regression follows

if(!require(quantreg)){install.packages("quantreg")}

library(quantreg)

 

model.q = rq(prectot ~ Year, data = data, tau = 0.5)

summary(model.q)

 

library(ggplot2)

model.null = rq(prectot ~ 1, data = data, tau = 0.5)

anova(model.q, model.null)

 

Sumq = summary(model.q)$coefficients

ggplot(data, aes(x=Year, y=prectot)) +

  geom_point() +

  geom_abline(intercept = Sumq[1], slope = Sumq[2], color="red", size=1.2) +

  labs(x = "Years after 1961")

 

#Calculus for Index CLIMATE CHANGE WITH R

#   0>   >>   <<  Importation Data

rm(list=ls())

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

#File Change dir

#getwd()

#setwd("D:/Docs.Abdi-Basid.ADAN/14.Doc.LMME/A.ClimDjibouti/0.Data")

#save(djiclim, file = "djiclim.rda")

#load(file = "djibclim.rda")

#View(djibclim)

#str(djibclim);summary(djiclim)

#sapply(djibclim,sd)

#sapply(djibclim, mean, na.rm=TRUE)

#library(psych)

#describe(djiclim[,4:6])

#Different Plot Types:

#plot(r,type="l",col=2)

#plot(r,type="b")

#plot(r,type="p")

#plot(r,type="o")

#plot(r,type="h")

#plot(r,type="s", col=4)

#plot(r,type="c")

plot(r,type="o", main="", xlab="Year", ylab="Precipitation (mm)")

attach(r)

summary(lm(prectot~Year, data=r))

#

#   1>   >>   <<  source import Rclimtool

#File change dir

#getwd()

setwd("D:/Docs.Abdi-Basid.ADAN/14.Doc.LMME/2.Project 2")

source("RClimTool\\RClimTool.R")

#source("RClimTool\\RClimTool_v2.R")

#folder na gen, na, missing before homogeneous

#day month year  without label

#

#tmax = cargar(gfile(type = "open"))

#tmin = cargar(gfile(type = "open"))

#precip = cargar(gfile(type = "open"))

#

#plot(x = day, main = "Title", xlab = "Label for the x axis", ylab = "Label for the y axis")

#hist(x = day, main = "Title", xlab = "Label for the x axis", ylab = "Label for the y axis")

#boxplot(x = day, main = "Title", ylab = "Label for the y axis")

#

setwd("D:\\Docs.Abdi-Basid.ADAN\\14.Doc.LMME\\Rclimtrends\\R")

#library(climtrends)

source("climtrends.R")

names(djibclim)

attach(djibclim)

CraddockTest(Days[,Temp_Tn])

#

# Craddock test for testing the homogeneity of yearly average temperatures of Milan vs Turin

data(yearly.average.temperature.Turin.Milan)

craddock.result <- CraddockTest(yearly.average.temperature.Turin.Milan,2,3)

plot(yearly.average.temperature.Turin.Milan[,1],craddock.result,type='l',xlab='',ylab='Craddock')

#

# Example of inhomogeneity

tmp <- yearly.average.temperature.Turin.Milan

tmp[20:43,3] <- tmp[20:43,3]+1 # adding an error of +1 degree to Milan's yearly average temperatures from 1980

craddock.result <- CraddockTest(tmp,2,3)

dev.new()

plot(yearly.average.temperature.Turin.Milan[,1],craddock.result,type='l',xlab='',ylab='Craddock')

#

#Homogénéity Analysis

names(djiclim)

library(ggpubr)

ggqqplot(djiclim$Rain_Rrr)

#

library("car")

qqPlot(djiclim$Rain_Rrr)

#

#shapiro.test(rnorm(100, mean = 5, sd = 3))

shapiro.test(runif(100, min = 2, max = 4))

#require(stats)

shapiro.test(djibclim$Rain_Rrr)

#

library(tseries)

jarque.bera.test(djibclim$Rain_Rrr)

#

#Kolmogorov-Smirnov Tests

t.test(djibclim$Rain_Rrr)

wilcox.test(djibclim$Rain_Rrr)

ks.test(djibclim$Rain_Rrr)

#

#

#

#   2>   >>   << Program Rclim Dex

#library("RClimDex")

#rclimdex.start()

getwd()

setwd("D:/Docs.Abdi-Basid.ADAN/14.Doc.LMME/2.Project 2/Climat/RclimDex")

source("1.0.RclimDex.R.txt")

require("climdex.pcic")

require("Kendall")

require(tcltk)

#year month day without label

#I+1  i-1

#

#   3>   >>   << Program ClimPact2

#Download the above zip file to your computer

#(https://github.com/ARCCSS-extremes/climpact2/archive/master.zip)

# and extract it. This will create a directory named climpact2-master.

#In Windows: open R and select "File -> Change dir..."

#and select the climpact2-master directory created in step 1.

#Then type source('climpact2.GUI.r').

#(NOTE: If nothing happens, try run the additional command startss()).

#In Linux/macOS: change to the climpact2-master directory created in step 1,

#then open R in a terminal window and type source('climpact2.GUI.r').

#The first time Climpact2 is run it will install required R packages.

#This will likely require you to select a mirror from which to download.

getwd()

setwd("D:\\Docs.Abdi-Basid.ADAN\\14.Doc.LMME\\2.Project 2\\Climat\\RClimPact\\climpact2-master")

source("climpact2.GUI.r")

#

#

#   4>   >>   << Program RHtest

#setwd("D:\\Docs.Abdi-Basid.ADAN\\Doc.LMME\\RHtest")

#source ("RHtest_V4.r") 

#source ("RHtest.txt") 

setwd("D:\\Docs.Abdi-Basid.ADAN\\14.Doc.LMME\\RHtest\\RHtests-master")

source("RHtestsV4_20180301.r")

StartGUI()

#   4'>   >>   << Program RHtest

library(PCICt)

## Create a climdexInput object from some data already loaded in and

## ready to go.

## Parse the dates into PCICt.

tmax.dates <- as.PCICt(do.call(paste, ec.1018935.tmax[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

tmin.dates <- as.PCICt(do.call(paste, ec.1018935.tmin[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

prec.dates <- as.PCICt(do.call(paste, ec.1018935.prec[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

## Load the data in.

ci <- climdexInput.raw(ec.1018935.tmax$MAX_TEMP,

ec.1018935.tmin$MIN_TEMP, ec.1018935.prec$ONE_DAY_PRECIPITATION,

tmax.dates, tmin.dates, prec.dates, base.range=c(1971, 2000))

## Create an annual timeseries of the CDD index.

cdd <- climdex.cdd(ci)

#

## Create a climdexInput object from some data already loaded in and

## ready to go.

## Parse the dates into PCICt.

tmax.dates <- as.PCICt(do.call(paste, ec.1018935.tmax[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

tmin.dates <- as.PCICt(do.call(paste, ec.1018935.tmin[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

prec.dates <- as.PCICt(do.call(paste, ec.1018935.prec[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

## Load the data in.

ci <- climdexInput.raw(ec.1018935.tmax$MAX_TEMP,

ec.1018935.tmin$MIN_TEMP, ec.1018935.prec$ONE_DAY_PRECIPITATION,

tmax.dates, tmin.dates, prec.dates, base.range=c(1971, 2000))

## Create an annual timeseries of the cold spell duration index.

csdi <- climdex.csdi(ci)

#

#

#

## Create a climdexInput object from some data already loaded in and

## ready to go.

## Parse the dates into PCICt.

tmax.dates <- as.PCICt(do.call(paste, ec.1018935.tmax[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

tmin.dates <- as.PCICt(do.call(paste, ec.1018935.tmin[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

prec.dates <- as.PCICt(do.call(paste, ec.1018935.prec[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

## Load the data in.

ci <- climdexInput.raw(ec.1018935.tmax$MAX_TEMP,

ec.1018935.tmin$MIN_TEMP, ec.1018935.prec$ONE_DAY_PRECIPITATION,

tmax.dates, tmin.dates, prec.dates, base.range=c(1971, 2000))

## Create an annual timeseries of the CWD index.

cdd <- climdex.cdd(ci)

 

#

#   5>   >>   <<  ANCLIM

 

at=read.table(file("clipboard"),header=T, sep="\t")

write(at, file = "data.txt", sep = " ")

 

#   5>   >>   <<  Geoclim

 

 

#   6>   >>   <<  GeoDa

 

 

 

 

 

 

 

 

 

 

 

 

 

# ANNEXE

########

 

require(ggplot2)

ggplot(data = quakes) +

       geom_density(mapping = aes(x = mag, fill = region), alpha = 0.5)

 

library("RColorBrewer")

display.brewer.all()

 

 

 

# Missing Data Imputation

#########################

library(mice)

Mousey = mice(Greenwich)

Greenwich = complete(Mousey)

 

misp=read.csv(file("clipboard"), header=T, sep="\t")

str(misp)

misp=misp[,-c(1:3)]

library(naniar)

vis_miss(misp)

 

 

#Prediction

###########

 

#Import Data

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

str(data)

summary(data)

library(forecast)

 

fit.series3 <- auto.arima(prectot)

fcast.series3 <- forecast(fit.series3)

plot(fcast.series3)

 

ts_passengers = ts(prectot,start=1961,end=2017,frequency=1)

plot(ts_passengers,xlab="", ylab="")

 

 

m_ets = ets(ts_passengers)

f_ets = forecast(m_ets, h=24) # forecast 24 months into the future

plot(f_ets, type="o", xlab="Year", ylab="Precipitaion(mm)")

 

 

m_tbats = tbats(ts_passengers)

f_tbats = forecast(m_tbats, h=24)

plot(f_tbats)

 

 

m_aa = auto.arima(ts_passengers)

f_aa = forecast(m_aa, h=24)

plot(f_aa)

 

 

barplot(c(ETS=m_ets$aic, ARIMA=m_aa$aic, TBATS=m_tbats$AIC),

    col="light blue",

    ylab="AIC")

 

 

#https://a-little-book-of-r-for-time-series.readthedocs.io/en/latest/src/timeseries.html

#https://otexts.com/fpp2/arima-r.html

 

 

prectot %>% stl(s.window='periodic') %>% seasadj() -> prectot

autoplot(prectot)

 

#Steps to be followed for ARIMA modeling:

#1. Exploratory analysis

#2. Fit the model

#3. Diagnostic measures

tsData = ts(prectot, start = c(1961,1), end=c(2017,1),frequency = 12)

 

#1. Exploratory analysis

components.ts = decompose(tsData)

plot(components.ts)

 

library("fUnitRoots")

urkpssTest(tsData, type = c("tau"), lags = c("short"),use.lag = NULL, doplot = TRUE)

tsstationary = diff(tsData, differences=1)

plot(tsstationary)

 

acf(tsstationary, lag.max=34)

pacf(tsstationary, lag.max=34)

 

fitARIMA <- arima(tsData, order=c(1,1,1),seasonal = list(order = c(1,0,0), period = 12),method="ML")

library(lmtest)

coeftest(fitARIMA)

confint(fitARIMA)

 

acf(fitARIMA$residuals)

library(FitAR)

LjungBoxTest (fitARIMA$residuals,k=2,StartLag=1)

 

qqnorm(fitARIMA$residuals)

qqline(fitARIMA$residuals)

auto.arima(tsData, trace=TRUE)

 

predict(fitARIMA,n.ahead = 20)

require(forecast)

futurVal <- forecast.Arima(fitARIMA,h=10, level=c(99.5))

plot.forecast(futurVal)

plot(fitARIMA,h=10, level=c(99.5))

 

 

A=auto.arima(prectot)

autoplot(forecast(A))

 

 

autoplot(forecast(prectot), n=100)

 

library(forecast)

AutoArimaModel=auto.arima(prectot)

AutoArimaModel

 

plot(AutoArimaModel)

require(tseries); require(astsa)

acf(prectot)

pacf(prectot)

 

precto=ts(prectot, frequency=12, start=1961, end=2017)

 

fit = arima(precto, order = c(0, 0, 0))

pred = predict(fit, n.ahead = 50)

 

 

fit = arima(log(precto), c(1, 1, 0), seasonal = list(order = c(0, 1, 1), period = 12))

pred <- predict(fit, n.ahead = 10*12)

ts.plot(precto,exp(pred$pred), log = "y", lty = c(1,3))

 

od <- options(digits = 5) # avoid too much spurious accuracy

q=predict(arima(lh, order = c(3,0,0)), n.ahead = 12)

 

 

(fit <- arima(USAccDeaths, order = c(0,1,1),

              seasonal = list(order = c(0,1,1))))

 

predict(fit, n.ahead = 6)

 

 

 

ts(vector, start=, end=, frequency=)

# subset the time series (June 2014 to December 2014)

myts2 <- window(myts, start=c(2014, 6), end=c(2014, 12))

 

# plot series

plot(myts)

 

# Seasonal decomposition

fit <- stl(myts, s.window="period")

plot(fit)

 

# additional plots

monthplot(myts)

library(forecast)

seasonplot(myts)

 

 

# simple exponential - models level

fit <- HoltWinters(myts, beta=FALSE, gamma=FALSE)

# double exponential - models level and trend

fit <- HoltWinters(myts, gamma=FALSE)

# triple exponential - models level, trend, and seasonal components

fit <- HoltWinters(myts)

 

# predictive accuracy

library(forecast)

accuracy(fit)

 

# predict next three future values

library(forecast)

forecast(fit, 3)

plot(forecast(fit, 3))

 

 

# fit an ARIMA model of order P, D, Q

fit <- arima(myts, order=c(p, d, q)

 

# predictive accuracy

library(forecast)

accuracy(fit)

 

# predict next 5 observations

library(forecast)

forecast(fit, 5)

plot(forecast(fit, 5))

 

 

library(forecast)

# Automated forecasting using an exponential model

fit <- ets(myts)

 

# Automated forecasting using an ARIMA model

fit <- auto.arima(myts)

 

 

#The forecast package provides functions for the automatic selection

#of exponential and ARIMA models. The ets() function

#supports both additive and multiplicative models.

#The auto.arima() function can handle both seasonal

#and nonseasonal ARIMA models. Models are chosen to maximize one of

#several fit criteria.

 

#lag(ts, k)     lagged version of time series, shifted back k observations

#diff(ts, differences=d)   difference the time series d times

#ndiffs(ts)     Number of differences required to achieve stationarity (from the forecast package)

#acf(ts)   autocorrelation function

#pacf(ts)  partial autocorrelation function

#adf.test(ts)   Augemented Dickey-Fuller test. Rejecting the null hypothesis suggests that a time series is stationary (from the tseries package)

#Box.test(x, type="Ljung-Box")   Pormanteau test that observations in vector or time series x are independent

 

 

x <- c(32,64,96,118,126,144,152.5,158) 

y <- c(99.5,104.8,108.5,100,86,64,35.3,15)

 

 

x <- 1:10

y <- x + c(-0.5,0.5)

 

plot(x,y, xlim=c(0,11), ylim=c(-1,12))

 

fit1 <- lm( y~offset(x) -1 )

fit2 <- lm( y~x )

fit3 <- lm( y~poly(x,3) )

fit4 <- lm( y~poly(x,9) )

library(splines)

fit5 <- lm( y~ns(x, 3) )

fit6 <- lm( y~ns(x, 9) )

 

fit7 <- lm( y ~ x + cos(x*pi) )

 

xx <- seq(0,11, length.out=250)

lines(xx, predict(fit1, data.frame(x=xx)), col='blue')

lines(xx, predict(fit2, data.frame(x=xx)), col='green')

lines(xx, predict(fit3, data.frame(x=xx)), col='red')

lines(xx, predict(fit4, data.frame(x=xx)), col='purple')

lines(xx, predict(fit5, data.frame(x=xx)), col='orange')

lines(xx, predict(fit6, data.frame(x=xx)), col='grey')

lines(xx, predict(fit7, data.frame(x=xx)), col='black')

 

 

polyfit <- function(i) x <- AIC(lm(y~poly(x,i)))

as.integer(optimize(polyfit,interval = c(1,length(x)-1))$minimum)

 

for (i in 2:length(x)-1) print(polyfit(i))

 

 

lm(y ~ x + I(x^2) + I(x^3))

lm(y ~ poly(x, 3, raw=TRUE))

 

 

 

#Reseau Neurone Prediction

 

# reseaux neurone  application sous R

 

library(MASS)

library(nnet)

 

# apprentissage

nnet.reg=nnet(O3obs~.,data=datappr,size=5,decay=1,linout=TRUE,maxit=500)

summary(nnet.reg)

 

 

library(e1071)

plot(tune.nnet(O3obs~.,data=datappr,size=c(2,3,4),

decay=c(1,2,3),maxit=200,linout=TRUE))

plot(tune.nnet(O3obs~.,data=datappr,size=4:5,decay=1:10)

 

nnet.reg=nnet(O3obs~.,data=datappr,size=3,decay=2,

linout=TRUE,maxit=200)

# calcul et graphe des résidus

fit.nnetr=predict(nnet.reg,data=datappr)

res.nnetr=fit.nnetr-datappr[,"O3obs"]

plot.res(fit.nnetr,res.nnetr)

 

 

# apprentissage

nnet.dis=nnet(DepSeuil~.,data=datappq,size=5,decay=1)

summary(nnet.reg)

#matrice de confusion

table(nnet.dis$fitted.values>0.5,datappq$DepSeuil)

 

 

function(formula, data, size, niter = 1,

nplis = 10, decay = 0, maxit = 100)

{

n = nrow(data)

tmc=0

un = rep(1, n)

ri = sample(nplis, n, replace = T)

cat(" k= ")

for(i in sort(unique(ri))) {

cat(" ", i, sep = "")

for(rep in 1:niter) {

learn = nnet(formula, data[ri != i, ],

size = size,trace = F, decay = decay,

maxit = maxit)

tmc = tmc + sum(un[(data$DepSeuil[ri == i]

== "TRUE") != (predict(learn, data[ri == i,

]) > 0.5)])

}

}

cat("\n", "Taux de mal classes")

tmc/(niter * length(unique(ri)) * n)

}

 

CVnn(DepSeuil~.,data=datappq,size=7, decay=0)

...

# exécuter pour différentes valeur du decay

 

pred.nnetr=predict(nnet.reg,newdata=datestr)

pred.nnetq=predict(nnet.dis,newdata=datestq)

# Erreur quadratique moyenne de prévision

sum((pred.nnetr-datestr[,"O3obs"])^2)/nrow(datestr)

# Matrice de confusion pour la prévision du

# dépassement de seuil (régression)

table(pred.nnetr>150,datestr[,"O3obs"]>150)

# Même chose pour la discrimination

table(pred.nnetq>0.5,datestq[,"DepSeuil"])

 

library(ROCR)

rocnnetr=pred.nnetr/300

prednnetr=prediction(rocnnetr,datestq$DepSeuil)

perfnnetr=performance(prednnetr,"tpr","fpr")

rocnnetq=pred.nnetq

prednnetq=prediction(rocnnetq,datestq$DepSeuil)

perfnnetq=performance(prednnetq,"tpr","fpr")

# tracer les courbes ROC en les superposant

# pour mieux comparer

plot(perflogit,col=1)

plot(perfnnetr,col=2,add=TRUE)

plot(perfnnetq,col=3,add=TRUE)

 

 

 

 

#Extreme Value Analysis for Climate Change

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

str(r)

attach(r)

prcp=precipitation

moy=mean(precipitation)

 

sigma=sqrt(1/(length(precipitation)-1))*sum((precipitation-moy)^2)

k=(sigma/moy)^-1.086

 

 

x=precipitation

GEV=(1/sigma)*exp(- (1+(k*(x-moy)/sigma))^-(1/k)  )*(1+(k*(x-moy)/sigma ))^(-1-(1/k))

GEV

barplot(GEV,type="o")

GP=(1/sigma)*(1+(k*((x-moy)/sigma)) ^(-1-(1/k)))

GP

plot(GP,type="o")

GEV/GP

 

 

 

 

# load packages

library(extRemes)

library(xts)

 

# get data from eHYD

ehyd_url <- "http://ehyd.gv.at/eHYD/MessstellenExtraData/nlv?id=105700&file=2"

precipitation_xts <- read_ehyd(ehyd_url)

 

# mean residual life plot:

mrlplot(precipitation_xts, main="Mean Residual Life Plot")

# The mean residual life plot depicts the Thresholds (u) vs Mean Excess flow.

# The idea is to ?nd the lowest threshold where the plot is nearly linear;

# taking into account the 95% con?dence bounds.

 

# fitting the GPD model over a range of thresholds

threshrange.plot(precipitation_xts, r = c(30, 45), nint = 16)

# ismev implementation is faster:

# ismev::gpd.fitrange(precipitation_xts, umin=30, umax=45, nint = 16)

# set threshold

th <- 40

 

# maximum likelihood estimation

pot_mle <- fevd(as.vector(precipitation_xts), method = "MLE", type="GP", threshold=th)

# diagnostic plots

plot(pot_mle)

rl_mle <- return.level(pot_mle, conf = 0.05, return.period= c(2,5,10,20,50,100))

 

# L-moments estimation

pot_lmom <- fevd(as.vector(precipitation_xts), method = "Lmoments", type="GP", threshold=th)

# diagnostic plots

plot(pot_lmom)

rl_lmom <- return.level(pot_lmom, conf = 0.05, return.period= c(2,5,10,20,50,100))

 

# return level plots

par(mfcol=c(1,2))

# return level plot w/ MLE

plot(pot_mle, type="rl",

     main="Return Level Plot for Oberwang w/ MLE",

     ylim=c(0,200), pch=16)

loc <- as.numeric(return.level(pot_mle, conf = 0.05,return.period=100))

segments(100, 0, 100, loc, col= 'midnightblue',lty=6)

segments(0.01,loc,100, loc, col='midnightblue', lty=6)

 

# return level plot w/ LMOM

plot(pot_lmom, type="rl",

     main="Return Level Plot for Oberwang w/ L-Moments",

     ylim=c(0,200))

loc <- as.numeric(return.level(pot_lmom, conf = 0.05,return.period=100))

segments(100, 0, 100, loc, col= 'midnightblue',lty=6)

segments(0.01,loc,100, loc, col='midnightblue', lty=6)

 

# comparison of return levels

results <- t(data.frame(mle=as.numeric(rl_mle),

                        lmom=as.numeric(rl_lmom)))

colnames(results) <- c(2,5,10,20,50,100)

round(results,1)

 

 

 

 

 

 

library(extRemes)

library(ismev)

 

# Southwest-England rainfall data from Coles

data(rain)

 

# simple threshold (usually one should not use fixed quantiles)

u < - quantile(rain, 0.9)

 

# fit GP using Bayesian parameter estimation

x <- fevd(rain, threshold = u , type='GP', method='Bayesian')

 

 

 

 

B1.fit=fevd(B1[,2], data=B1, threshold=B1.th, type="GEV",method ="MLE", units="KVA",time.units="seconds",period = "Seconds")

B1.fit1=fevd(B1[,2], data=B1, threshold=B1.th,type="GP",method ="MLE", units="KVA",time.units="seconds",period = "Seconds")

B1.fit2=fevd(B1[,2], data=B1, threshold=B1.th,type="Gumbel", method ="MLE",units="KVA",time.units="seconds",period = "Seconds")

B1.fit3=fevd(B1[,2], data=B1, threshold=B1.th,type="Exponential",method ="MLE", units="KVA",time.units="seconds",period = "Seconds")

 

fit.AIC=summary(B1.fit, silent=TRUE)$AIC

fit1.AIC=summary(B1.fit1, silent=TRUE)$AIC

fit2.AIC=summary(B1.fit2, silent=TRUE)$AIC

fit3.AIC=summary(B1.fit3, silent=TRUE)$AIC

 

fit.AIC

# [1] 39976258

fit1.AIC

# [1] 466351.5

fit2.AIC

# [1] 13934878

fit3.AIC

# [1] 466330.8

 

plot(B1.fit)

plot(B1.fit1)

plot(B1.fit2)

plot(B1.fit3)

 

 

 

 

 

 

 

 

 

 

rm(list=ls())

rm(list=ls())

rm(list=ls())

 

 

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

getwd()

setwd("C:/Users/Lenovo/Documents")

write.table(rm, file="anclim.txt",row.names=F)

 

 

rm=read.table(file("clipboard"),header=T, sep="\t")

 

str(rm)

attach(rm)

 

 

#plot(0,0,xlim=c(1961,2017), ylim=c(0,300))

DJF=ts(DJF, start=1961,end=2017)

Y=ts(Y, start=1961, end=2017)

#par(new=TRUE)

#plot(DJF, type="o", xlab="", ylab="",axes=FALSE)

#par(new=TRUE)

#plot(Y, type="l", xlab="", ylab="", add=TRUE, axes=FALSE)

 

names(r)

reg=lm(SNO.tav~X,data=r)

summary(reg)

 

plot(X,MAM, type="o",lty=9, xlab="Year", ylab="Precipitation(mm)")

d=abline(reg)

legend("topright",c("precipitation(mm)","adjusted"),col=c("black","black"),cex=c(0.7,0.7),lty=c(9,1))

legend(locator(1),c("y= -0.323 x+677

P=.526

R²=.0073"),cex=0.65,bg="NA",box.col="white")

 

 

 

str(r)

library(climatol) # load the functions of the package

homogen("r", 1980, 2017, expl=TRUE)

#Missing Value

library(naniar)

vis_miss(r[,-1])

#dd2m("r", 1981, 2000, homog=TRUE)

#dahstat(’Ttest’, 1981, 2000, stat=’series’)

 

library(naniar)

require("UpSetR")

gg_miss_upset(r)

 

library(mice)

md.pattern(r)

library(reshape2)

library(ggplot2

Abdi-Basid Analysis

abdi-basid@outlook.com

 

 

#Import Data

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

str(data)

summary(data)

#Homogeneous

boxplot(data)

hist(data)

 

#median ajustement

pairs(datatable, col="blue", main="Scatterplots")

Y=cbind(LRY)

X=cbind(LRV, LRC, INT)

#

hist(Y, prob=TRUE, col = "blue", border = "black")

lines(density(Y))

#

OLSreg=lm(Y~X)

summary(OLSreg)

#

Qreg25=rq(Y~X, tau=0.25)

summary(Qreg25)

#

QR=rq(Y~X, tau=seq(0.2, 0.8, by=0.1))

sumQR=summary(QR)

#

anova(Qreg25, Qreg75)

#

QR=rq(Y~X, tau=seq(0.2, 0.8, by=0.1))

sumQR=summary(QR)

#

plot(sumQR)

 

# Check for Break point

 library("bfast")

 library("zoo")

 library("strucchange")

 

ts(vector, start=, end=, frequency=)

# subset the time series (June 2014 to December 2014)

myts2 <- window(myts, start=c(2014, 6), end=c(2014, 12))

 

# plot series

plot(myts)

 

# Seasonal decomposition

fit <- stl(myts, s.window="period")

plot(fit)

 

# additional plots

monthplot(myts)

library(forecast)

seasonplot(myts)

 

 

# simple exponential - models level

fit <- HoltWinters(myts, beta=FALSE, gamma=FALSE)

# double exponential - models level and trend

fit <- HoltWinters(myts, gamma=FALSE)

# triple exponential - models level, trend, and seasonal components

fit <- HoltWinters(myts)

 

# predictive accuracy

library(forecast)

accuracy(fit)

 

# predict next three future values

library(forecast)

forecast(fit, 3)

plot(forecast(fit, 3))

 

 

# fit an ARIMA model of order P, D, Q

fit <- arima(myts, order=c(p, d, q)

 

# predictive accuracy

library(forecast)

accuracy(fit)

 

# predict next 5 observations

library(forecast)

forecast(fit, 5)

plot(forecast(fit, 5))

 

 

library(forecast)

# Automated forecasting using an exponential model

fit <- ets(myts)

 

# Automated forecasting using an ARIMA model

fit <- auto.arima(myts)

 

 

#The forecast package provides functions for the automatic selection

#of exponential and ARIMA models. The ets() function

#supports both additive and multiplicative models.

#The auto.arima() function can handle both seasonal

#and nonseasonal ARIMA models. Models are chosen to maximize one of

#several fit criteria.

 

#lag(ts, k)     lagged version of time series, shifted back k observations

#diff(ts, differences=d)   difference the time series d times

#ndiffs(ts)     Number of differences required to achieve stationarity (from the forecast package)

#acf(ts)   autocorrelation function

#pacf(ts)  partial autocorrelation function

#adf.test(ts)   Augemented Dickey-Fuller test. Rejecting the null hypothesis suggests that a time series is stationary (from the tseries package)

#Box.test(x, type="Ljung-Box")   Pormanteau test that observations in vector or time series x are independent

 

 plot(Nile, ylab="Annual Flow of the river Nile")

    abline(h= mean(Nile),col='blue')

 

 plot(merge(

 Nile = as.zoo(Nile),

 zoo(mean(Nile), time(Nile)),

 CUSUM = cumsum(Nile - mean(Nile)),

 zoo(0, time(Nile)),

 MOSUM = rollapply(Nile - mean(Nile), 15, sum),

 zoo(0, time(Nile))

 ), screen = c(1, 1, 2, 2, 3, 3), main = "", xlab = "Time",

 col = c(1, 4, 1, 4, 1, 4)

 ) 

 

plot(merge(

Nile = as.zoo(Nile),

zoo(c(NA, cumsum(head(Nile, -1))/1:99), time(Nile)),

CUSUM = cumsum(c(0, recresid(lm(Nile ~ 1)))),

zoo(0, time(Nile))

), screen = c(1, 1, 2, 2), main = "", xlab = "Time",

col = c(1, 4, 1, 4)

)

 

ocus.nile <- efp(Nile ~ 1, type = "OLS-CUSUM")

omus.nile <- efp(Nile ~ 1, type = "OLS-MOSUM")

rocus.nile <- efp(Nile ~ 1, type = "Rec-CUSUM")

 

 

opar <- par(mfrow=c(2,2))

plot(ocus.nile)

plot(omus.nile)

plot(rocus.nile)

par(opar)

 

plot(1870 + 5:95, sapply(5:95, function(i) {

before <- 1:i

after <- (i+1):100

res <- c(Nile[before] - mean(Nile[before]), Nile[after] - mean(Nile[after]))

sum(res^2)

}), type = "b", xlab = "Time", ylab = "RSS")

 

 

bp.nile <- breakpoints(Nile ~ 1)

nile.fac <- breakfactor(bp.nile, breaks = 1 )

fm1.nile <- lm(Nile ~ nile.fac - 1)

plot(bp.nile)

 

 

 

 

opar <- par(mfrow=c(2,1), mar=c(2,2,0,2))

plot(ocus.nile, alt.boundary=F,main="")

abline(v= 1898, lty=2, col='red')

plot(Nile, ylab="Annual Flow of the river Nile")

abline(h= mean(Nile),col='blue')

abline(v= 1898, lty=2, col='red')

lines(ts(predict(fm1.nile),start=1871,freq=1), col='darkgreen',lwd=2)

par(opar)

 

 

x <- c(32,64,96,118,126,144,152.5,158) 

y <- c(99.5,104.8,108.5,100,86,64,35.3,15)

 

 

x <- 1:10

y <- x + c(-0.5,0.5)

 

plot(x,y, xlim=c(0,11), ylim=c(-1,12))

 

fit1 <- lm( y~offset(x) -1 )

fit2 <- lm( y~x )

fit3 <- lm( y~poly(x,3) )

fit4 <- lm( y~poly(x,9) )

library(splines)

fit5 <- lm( y~ns(x, 3) )

fit6 <- lm( y~ns(x, 9) )

 

fit7 <- lm( y ~ x + cos(x*pi) )

 

xx <- seq(0,11, length.out=250)

lines(xx, predict(fit1, data.frame(x=xx)), col='blue')

lines(xx, predict(fit2, data.frame(x=xx)), col='green')

lines(xx, predict(fit3, data.frame(x=xx)), col='red')

lines(xx, predict(fit4, data.frame(x=xx)), col='purple')

lines(xx, predict(fit5, data.frame(x=xx)), col='orange')

lines(xx, predict(fit6, data.frame(x=xx)), col='grey')

lines(xx, predict(fit7, data.frame(x=xx)), col='black')

 

 

polyfit <- function(i) x <- AIC(lm(y~poly(x,i)))

as.integer(optimize(polyfit,interval = c(1,length(x)-1))$minimum)

 

for (i in 2:length(x)-1) print(polyfit(i))

 

 

lm(y ~ x + I(x^2) + I(x^3))

lm(y ~ poly(x, 3, raw=TRUE))

 

 

 

 

 

 

 

 

 

 

library(mice)

Mousey = mice(Greenwich)

Greenwich = complete(Mousey)

 

misp=read.csv(file("clipboard"), header=T, sep="\t")

str(misp)

misp=misp[,-c(1:3)]

library(naniar)

vis_miss(misp)

 

 

#                       PROGRAM CLIMATE CHANGE WITH R

#                         abdi-basid@outlook.com

#

#

#

#   0>   >>   <<  Importation Data

rm(list=ls())

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

#File Change dir

#getwd()

#setwd("D:/Docs.Abdi-Basid.ADAN/14.Doc.LMME/A.ClimDjibouti/0.Data")

#save(djiclim, file = "djiclim.rda")

#load(file = "djibclim.rda")

#View(djibclim)

#str(djibclim);summary(djiclim)

#sapply(djibclim,sd)

#sapply(djibclim, mean, na.rm=TRUE)

#library(psych)

#describe(djiclim[,4:6])

#Different Plot Types:

#plot(r,type="l",col=2)

#plot(r,type="b")

#plot(r,type="p")

#plot(r,type="o")

#plot(r,type="h")

#plot(r,type="s", col=4)

#plot(r,type="c")

plot(r,type="o", main="", xlab="Year", ylab="Precipitation (mm)")

attach(r)

summary(lm(prectot~Year, data=r))

#

#

#   1>   >>   <<  source import Rclimtool

#File change dir

#getwd()

setwd("D:/Docs.Abdi-Basid.ADAN/14.Doc.LMME/2.Project 2")

source("RClimTool\\RClimTool.R")

#source("RClimTool\\RClimTool_v2.R")

#folder na gen, na, missing before homogeneous

#day month year  without label

#

#tmax = cargar(gfile(type = "open"))

#tmin = cargar(gfile(type = "open"))

#precip = cargar(gfile(type = "open"))

#

#plot(x = day, main = "Title", xlab = "Label for the x axis", ylab = "Label for the y axis")

#hist(x = day, main = "Title", xlab = "Label for the x axis", ylab = "Label for the y axis")

#boxplot(x = day, main = "Title", ylab = "Label for the y axis")

#

setwd("D:\\Docs.Abdi-Basid.ADAN\\14.Doc.LMME\\Rclimtrends\\R")

#library(climtrends)

source("climtrends.R")

names(djibclim)

attach(djibclim)

CraddockTest(Days[,Temp_Tn])

#

# Craddock test for testing the homogeneity of yearly average temperatures of Milan vs Turin

data(yearly.average.temperature.Turin.Milan)

craddock.result <- CraddockTest(yearly.average.temperature.Turin.Milan,2,3)

plot(yearly.average.temperature.Turin.Milan[,1],craddock.result,type='l',xlab='',ylab='Craddock')

#

# Example of inhomogeneity

tmp <- yearly.average.temperature.Turin.Milan

tmp[20:43,3] <- tmp[20:43,3]+1 # adding an error of +1 degree to Milan's yearly average temperatures from 1980

craddock.result <- CraddockTest(tmp,2,3)

dev.new()

plot(yearly.average.temperature.Turin.Milan[,1],craddock.result,type='l',xlab='',ylab='Craddock')

#

#Homogénéity Analysis

names(djiclim)

library(ggpubr)

ggqqplot(djiclim$Rain_Rrr)

#

library("car")

qqPlot(djiclim$Rain_Rrr)

#

#shapiro.test(rnorm(100, mean = 5, sd = 3))

shapiro.test(runif(100, min = 2, max = 4))

#require(stats)

shapiro.test(djibclim$Rain_Rrr)

#

library(tseries)

jarque.bera.test(djibclim$Rain_Rrr)

#

#Kolmogorov-Smirnov Tests

t.test(djibclim$Rain_Rrr)

wilcox.test(djibclim$Rain_Rrr)

ks.test(djibclim$Rain_Rrr)

#

#

#   2>   >>   << Program Rclim Dex

#library("RClimDex")

#rclimdex.start()

getwd()

setwd("D:/Docs.Abdi-Basid.ADAN/14.Doc.LMME/2.Project 2/Climat/RclimDex")

source("1.0.RclimDex.R.txt")

require("climdex.pcic")

require("Kendall")

require(tcltk)

#year month day without label

#I+1  i-1

#

#

#   3>   >>   << Program ClimPact2

#Download the above zip file to your computer

#(https://github.com/ARCCSS-extremes/climpact2/archive/master.zip)

# and extract it. This will create a directory named climpact2-master.

#In Windows: open R and select "File -> Change dir..."

#and select the climpact2-master directory created in step 1.

#Then type source('climpact2.GUI.r').

#(NOTE: If nothing happens, try run the additional command startss()).

#In Linux/macOS: change to the climpact2-master directory created in step 1,

#then open R in a terminal window and type source('climpact2.GUI.r').

#The first time Climpact2 is run it will install required R packages.

#This will likely require you to select a mirror from which to download.

getwd()

setwd("D:\\Docs.Abdi-Basid.ADAN\\14.Doc.LMME\\2.Project 2\\Climat\\RClimPact\\climpact2-master")

source("climpact2.GUI.r")

#

#   4>   >>   << Program RHtest

#setwd("D:\\Docs.Abdi-Basid.ADAN\\Doc.LMME\\RHtest")

#source ("RHtest_V4.r") 

#source ("RHtest.txt") 

setwd("D:\\Docs.Abdi-Basid.ADAN\\14.Doc.LMME\\RHtest\\RHtests-master")

source("RHtestsV4_20180301.r")

StartGUI()

#   4'>   >>   << Program RHtest

library(PCICt)

## Create a climdexInput object from some data already loaded in and

## ready to go.

## Parse the dates into PCICt.

tmax.dates <- as.PCICt(do.call(paste, ec.1018935.tmax[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

tmin.dates <- as.PCICt(do.call(paste, ec.1018935.tmin[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

prec.dates <- as.PCICt(do.call(paste, ec.1018935.prec[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

## Load the data in.

ci <- climdexInput.raw(ec.1018935.tmax$MAX_TEMP,

ec.1018935.tmin$MIN_TEMP, ec.1018935.prec$ONE_DAY_PRECIPITATION,

tmax.dates, tmin.dates, prec.dates, base.range=c(1971, 2000))

## Create an annual timeseries of the CDD index.

cdd <- climdex.cdd(ci)

#

## Create a climdexInput object from some data already loaded in and

## ready to go.

## Parse the dates into PCICt.

tmax.dates <- as.PCICt(do.call(paste, ec.1018935.tmax[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

tmin.dates <- as.PCICt(do.call(paste, ec.1018935.tmin[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

prec.dates <- as.PCICt(do.call(paste, ec.1018935.prec[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

## Load the data in.

ci <- climdexInput.raw(ec.1018935.tmax$MAX_TEMP,

ec.1018935.tmin$MIN_TEMP, ec.1018935.prec$ONE_DAY_PRECIPITATION,

tmax.dates, tmin.dates, prec.dates, base.range=c(1971, 2000))

## Create an annual timeseries of the cold spell duration index.

csdi <- climdex.csdi(ci)

#

## Create a climdexInput object from some data already loaded in and

## ready to go.

## Parse the dates into PCICt.

tmax.dates <- as.PCICt(do.call(paste, ec.1018935.tmax[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

tmin.dates <- as.PCICt(do.call(paste, ec.1018935.tmin[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

prec.dates <- as.PCICt(do.call(paste, ec.1018935.prec[,c("year",

"jday")]), format="%Y %j", cal="gregorian")

## Load the data in.

ci <- climdexInput.raw(ec.1018935.tmax$MAX_TEMP,

ec.1018935.tmin$MIN_TEMP, ec.1018935.prec$ONE_DAY_PRECIPITATION,

tmax.dates, tmin.dates, prec.dates, base.range=c(1971, 2000))

## Create an annual timeseries of the CWD index.

cdd <- climdex.cdd(ci)

 

#

#   5>   >>   <<  ANCLIM

 

at=read.table(file("clipboard"),header=T, sep="\t")

write(at, file = "data.txt", sep = " ")

 

 

#   6>   >>   <<  ANNEXE

pairs(datatable, col="blue", main="Scatterplots")

Y=cbind(LRY)

X=cbind(LRV, LRC, INT)

#

hist(Y, prob=TRUE, col = "blue", border = "black")

lines(density(Y))

#

OLSreg=lm(Y~X)

summary(OLSreg)

#

Qreg25=rq(Y~X, tau=0.25)

summary(Qreg25)

#

QR=rq(Y~X, tau=seq(0.2, 0.8, by=0.1))

sumQR=summary(QR)

#

anova(Qreg25, Qreg75)

#

QR=rq(Y~X, tau=seq(0.2, 0.8, by=0.1))

sumQR=summary(QR)

#

plot(sumQR)

 

 

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

str(r)

attach(r)

names(r)

dim(r)

 

summary(r)

 

library(Hmisc)

describe(r,num.desc=c("mean","median","var","sd","valid.n"),horizontal=TRUE)

 

sapply(r, sd)

sapply(r,range)

 

t=na.omit(r)

round(cor(t),3)

 

#e=scale(r, center=TRUE, scale=T)

library(caret)

preproc1 <- preProcess(r, method=c("center", "scale"))

n <- predict(preproc1, r);summary(n)

 

library(corrplot)

mydata.cor = cor(t, method = c("pearson"))

corrplot(mydata.cor, method = "number", type = "lower")    

#methode = number, ellipse, square, shade, color, pie,

#type = full" "upper" "lower"

 

library(RColorBrewer)

corrplot(mydata.cor, type = "upper", order = "hclust",col = brewer.pal(n = 8, name = "PuOr"))

 

palette = colorRampPalette(c("yellow", "orange", "red")) (20)

heatmap(x = mydata.cor, col = palette, symm = TRUE)

#https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html

names(t)

#http://www.sthda.com/french/wiki/parametres-graphiques

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

t=na.omit(s)

attach(t)

 

reg1=lm(OB~CH,data=t)

reg2=lm(OB~PE,data=t)

reg3=lm(OB~TA,data=t)

reg4=lm(OB~AR,data=t)

reg5=lm(OB~ER,data=t)

 

limx=c(0,500);limy=c(0,900)   #windows(height = 70, width = 70)

plot(-20,-20,xaxt="n",yaxt="n",xlim=limx,ylim=limy,cex.lab=1.2,xlab="Ground Based (mm/month)",ylab="Remotely sensed (mm/month)")

axis(1,cex.axis=1.3);axis(2,cex.axis=1.3)

 

par(new=TRUE)

plot(OB~CH,xlim=limx,ylim=limy,pch=20,xaxt="n",yaxt="n",col="red",xlab="",ylab="");abline(reg1,col="red",lwd=2)

par(new=TRUE)

plot(OB~PE,xlim=limx,ylim=limy,pch=20,xaxt="n",yaxt="n",col="blue",xlab="",ylab="");abline(reg2,col="blue",lwd=2)

par(new=TRUE)

plot(OB~TA,xlim=limx,ylim=limy,pch=20,xaxt="n",yaxt="n",col="brown",xlab="",ylab="");abline(reg3,col="brown",lwd=2)

par(new=TRUE)

plot(OB~AR,xlim=limx,ylim=limy,pch=20,xaxt="n",yaxt="n",col="orange",xlab="",ylab="");abline(reg4,col="yellow",lwd=2)

par(new=TRUE)

plot(OB~ER,xlim=limx,ylim=limy,pch=20,xaxt="n",yaxt="n",col="darkgreen",xlab="",ylab="");abline(reg5,col="turquoise1",lwd=2)

par(new=TRUE)

abline(0,1.33,col="black",lwd=2,lty=2)

 

legend(30,400, legend=c("CH", "PE", "TA", "AR", "ER"),horiz=T,bty ="n",

       col=c("red","blue","brown","orange","darkgreen"), lty=c(1,1,1,1,1), lwd=c(3,3,3,3,3), cex=0.8)

 

 

 

summary(reg1)

summary(reg2)

summary(reg3)

summary(reg4)

summary(reg5)

 

 

require(hydroGOF)

names(r);attach(r)

rmsec=sqrt(sum((OB-CH)^2)/length(OB));round(rmsec,3)

rmsec=sqrt(sum((OB-PE)^2)/length(OB));round(rmsec,3)

rmsec=sqrt(sum((OB-TA)^2)/length(OB));round(rmsec,3)

rmsec=sqrt(sum((OB-AR)^2)/length(OB));round(rmsec,3)

rmsec=sqrt(sum((OB-ER)^2)/length(OB));round(rmsec,3)

#rmse(sim=Data_Mon_11.325, obs=Datat_Obser)

 

require(hydroGOF)

PBIAS = 100 * (abs(sum(OB-CH)) / sum(OB));round(PBIAS,3)

PBIAS = 100 * (abs(sum(OB-CH)) / sum(OB));round(PBIAS,3)

PBIAS = 100 * (abs(sum(OB-CH)) / sum(OB));round(PBIAS,3)

PBIAS = 100 * (abs(sum(OB-CH)) / sum(OB));round(PBIAS,3)

PBIAS = 100 * (abs(sum(OB-CH)) / sum(OB));round(PBIAS,3)

#pbias(sim=CH, obs=OB, na.rm=TRUE)

 

require(hydroGOF)

# mse(CH, OB)

# mae(CH, OB)

gof(CH, OB)

ggof(sim=CH, obs=OB, ftype="dm", FUN=mean)

 

 

 

#   STDE  /  R2  /  SLOPE  /  r  /  CD / CV RSD      

################################################

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

 

attach(r)

names(r)

# "OB" "CH" "PE" "TA" "AR" "ER"

round(sd(PE),3)

 

reg=lm(OB~ER,data=r);summary(reg)

 

round(cor(r),3)

 

BIAS = sum(OB-TA)/length(OB);round(BIAS,3)

 

RMSE=sqrt(sum((OB-CH)^2)/length(OB));round(RMSE,3)

RMSE=sqrt(sum((OB-PE)^2)/length(OB));round(RMSE,3)

RMSE=sqrt(sum((OB-TA)^2)/length(OB));round(RMSE,3)

RMSE=sqrt(sum((OB-AR)^2)/length(OB));round(RMSE,3)

RMSE=sqrt(sum((OB-ER)^2)/length(OB));round(RMSE,3)

 

RMSD = sqrt(sum((R$OB-R$PE)^2)/length(R$OB));round(RMSD,3)

 

names(n)

#########

 [1] "JF.OB"   "JF.CH"   "JF.PE"   "JF.TA"   "JF.AR"   "JF.ER"   "MAM.OB"

 [8] "MAM.CH"  "MAM.PE"  "MAM.TA"  "MAM.AR"  "MAM.ER"  "JJAS.OB" "JJAS.CH"

[15] "JJAS.PE" "JJAS.TA" "JJAS.AR" "JJAS.ER" "OND.OB"  "OND.CH"  "OND.PE"

[22] "OND.TA"  "OND.AR"  "OND.ER"

 

 

##########

RSD = abs(sd(CH)/mean(CH));round(RSD, digits = 3)

 

 

 

 

###########################################

# display the diagram with the better model

#oldpar<-taylor.diagram(OB,CH,pch=19)

#taylor.diagram.modified(OB,CH, text="Model 1")

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

attach(s)

names(s)

str(s)

cbind(sapply(s, sd, na.rm=TRUE))

 

 

CHrmse=sqrt(sum((OB-CH)^2)/length(OB));round(CHrmse,3)

PErmse=sqrt(sum((OB-PE)^2)/length(OB));round(PErmse,3)

TArmse=sqrt(sum((OB-TA)^2)/length(OB));round(TArmse,3)

ARrmse=sqrt(sum((OB-AR)^2)/length(OB));round(ARrmse,3)

ERrmse=sqrt(sum((OB-ER)^2)/length(OB));round(ERrmse,3)

rbind(CHrmse,PErmse,TArmse,ARrmse,ERrmse)

 

 

OB=AIRPORT

CH=CHIRPS  

PE=PERSIANN

TA=TAMSATV3

AR=ARCV2   

ER=ERA5

 

#

par(new=TRUE)

 

require(plotrix)

oldpar<-taylor.diagram(OB,CH,add=F, pch=19,pos.cor=TRUE,

  xlab="Standard deviation",ylab="Standard Deviation",main="",

  show.gamma=TRUE,ngamma=10,gamma.col="green",sd.arcs=1,

  ref.sd=TRUE,sd.method="sample",grad.corr.lines=c(0.1,

  0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.95,0.99),col="blue",

  pcex=1.5,cex.axis=1.1,normalize=F)

 

# now add the worse model

taylor.diagram(OB,PE,add=TRUE,col="black", pcex=1.5,cex.axis=1.1,normalize=F)

taylor.diagram(OB,TA,add=TRUE,col="pink", pcex=1.5,cex.axis=1.1,normalize=F)

taylor.diagram(OB,AR,add=TRUE,col="brown", pcex=1.5,cex.axis=1.1,normalize=F)

taylor.diagram(OB,ER,add=TRUE,col="green", pcex=1.5,cex.axis=1.1,normalize=F)

 

 

# get approximate legend position # add a legend

legend(1.3,1.6,legend=c("JF.OB","JF.CH","JF.PE","JF.TA","JF.AR","JF.ER"),horiz=FALSE,

    pch=c(15,19,19,19,19,19),col=c("darkgreen","red","blue","brown","orange","darkgreen"), cex=0.7)

 

 

# SAISONNALITY

#par(mfrow=c(1,2))

#"red","blue","brown","orange","darkgreen"

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

names(s)

attach(s)

cor(s)

str(s)

 

# show the "all correlation" display

require(plotrix)

taylor.diagram(JF.OB,  JF.CH,           col="blue",       pos.cor=F,pcex=1.5,normalize=F)

taylor.diagram(JF.OB,  JF.PE,add=TRUE,  col="black",      pcex=1.5,normalize=F)

taylor.diagram(JF.OB,  JF.TA,add=TRUE,  col="pink",       pcex=1.5,normalize=F)

taylor.diagram(JF.OB,  JF.AR,add=TRUE,  col="brown",      pcex=1.5,normalize=F)

taylor.diagram(JF.OB,  JF.ER,add=TRUE,  col="green",      pcex=1.5,normalize=F)

 

require(plotrix)

taylor.diagram(MAM.OB,  MAM.CH,           col="blue",       pos.cor=F,pcex=1.5,normalize=F)

taylor.diagram(MAM.OB,  MAM.PE,add=TRUE,  col="black",      pcex=1.5,normalize=F)

taylor.diagram(MAM.OB,  MAM.TA,add=TRUE,  col="pink",       pcex=1.5,normalize=F)

taylor.diagram(MAM.OB,  MAM.AR,add=TRUE,  col="brown",      pcex=1.5,normalize=F)

taylor.diagram(MAM.OB,  MAM.ER,add=TRUE,  col="green",      pcex=1.5,normalize=F)

 

require(plotrix)

taylor.diagram(JJAS.OB,  JJAS.CH,           col="blue",       pos.cor=F,pcex=1.5,normalize=F)

taylor.diagram(JJAS.OB,  JJAS.PE,add=TRUE,  col="black",      pcex=1.5,normalize=F)

taylor.diagram(JJAS.OB,  JJAS.TA,add=TRUE,  col="pink",       pcex=1.5,normalize=F)

taylor.diagram(JJAS.OB,  JJAS.AR,add=TRUE,  col="brown",      pcex=1.5,normalize=F)

taylor.diagram(JJAS.OB,  JJAS.ER,add=TRUE,  col="green",      pcex=1.5,normalize=F)

 

require(plotrix)

taylor.diagram(OND.OB,  OND.CH,           col="blue",       pos.cor=F,pcex=1.5,normalize=F)

taylor.diagram(OND.OB,  OND.PE,add=TRUE,  col="black",      pcex=1.5,normalize=F)

taylor.diagram(OND.OB,  OND.TA,add=TRUE,  col="pink",       pcex=1.5,normalize=F)

taylor.diagram(OND.OB,  OND.AR,add=TRUE,  col="brown",      pcex=1.5,normalize=F)

taylor.diagram(OND.OB,  OND.ER,add=TRUE,  col="green",      pcex=1.5,normalize=F)

 

 

legend(30,53

,legend=c("OND.OBSERVATON","OND.CHIRPS","OND.PESERIANNCDR","OND.TAMSAT","OND.ARC","OND.ERA"),horiz=FALSE,

 pch=c(15,19,19,19,19,19),col=c("darkgreen","red","blue","brown","orange","darkgreen"), cex=0.7)

 

CHrmse=sqrt(sum((OND.OB-OND.CH)^2)/length(OND.OB))

PErmse=sqrt(sum((OND.OB-OND.PE)^2)/length(OND.OB))

TArmse=sqrt(sum((OND.OB-OND.TA)^2)/length(OND.OB))

ARrmse=sqrt(sum((OND.OB-OND.AR)^2)/length(OND.OB))

ERrmse=sqrt(sum((OND.OB-OND.ER)^2)/length(OND.OB))

round(rbind(CHrmse,PErmse,TArmse,ARrmse,ERrmse),3)

 

 

#RMS_Diff = sum(((OND.CH-mean(OND.CH))-(OND.OB-mean(OND.OB)))^2)/length(OND.OB)

OBsd=sd(OND.OB)

CHsd=sd(OND.CH)

PEsd=sd(OND.PE)

TAsd=sd(OND.TA)

ARsd=sd(OND.AR)

ERsd=sd(OND.ER)

round(rbind(CHsd,PEsd,TAsd,ARsd,ERsd),3)

 

CHBIAS = sum(OND.OB-OND.CH)/length(OND.OB)

PEBIAS = sum(OND.OB-OND.PE)/length(OND.OB)

TABIAS = sum(OND.OB-OND.TA)/length(OND.OB)

ARBIAS = sum(OND.OB-OND.AR)/length(OND.OB)

ERBIAS = sum(OND.OB-OND.ER)/length(OND.OB)

round(rbind(CHBIAS,PEBIAS,TABIAS,ARBIAS,ERBIAS),3)

 

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

library(caret)

preproc1 <- preProcess(R, method=c("center"))

#"center", "scale"

norm1 <- predict(preproc1,R)

print(norm1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

require(openair)

## in the examples below, most effort goes into making some artificial data

## the function itself can be run very simply

## Not run:

## dummy model data for 2003

dat <- selectByDate(mydata, year = 2003)

dat <- data.frame(date = mydata$date, obs = mydata$nox, mod = mydata$nox)

 

## now make mod worse by adding bias and noise according to the month

## do this for 3 different models

dat <- transform(dat, month = as.numeric(format(date, "%m")))

mod1 <- transform(dat, mod = mod + 10 * month + 10 * month * rnorm(nrow(dat)),

model = "model 1")

## lag the results for mod1 to make the correlation coefficient worse

## without affecting the sd

mod1 <- transform(mod1, mod = c(mod[5:length(mod)], mod[(length(mod) - 3) :

length(mod)]))

 

## model 2

mod2 <- transform(dat, mod = mod + 7 * month + 7 * month * rnorm(nrow(dat)),

model = "model 2")

## model 3

mod3 <- transform(dat, mod = mod + 3 * month + 3 * month * rnorm(nrow(dat)),

model = "model 3")

 

mod.dat <- rbind(mod1, mod2, mod3)

 

## basic Taylor plot

 

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

 

## Taylor plot by season

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

 

## now show how to evaluate model improvement (or otherwise)

mod1a <- transform(dat, mod = mod + 2 * month + 2 * month * rnorm(nrow(dat)),

model = "model 1")

mod2a <- transform(mod2, mod = mod * 1.3)

mod3a <- transform(dat, mod = mod + 10 * month + 10 * month * rnorm(nrow(dat)),

model = "model 3")

mod.dat2 <- rbind(mod1a, mod2a, mod3a)

mod.dat$mod2 <- mod.dat2$mod

 

## now we have a data frame with 3 models, 1 set of observations

## and TWO sets of model predictions (mod and mod2)

 

## do for all models

TaylorDiagram(mod.dat, obs = "obs", mod = c("mod", "mod2"), group = "model")

 

## End(Not run)

## Not run:

## all models, by season

TaylorDiagram(mod.dat, obs = "obs", mod = c("mod", "mod2"), group = "model",

type = "season")

 

## consider two groups (model/month). In this case all months are shown by model

## but are only differentiated by model.

 

TaylorDiagram(mod.dat, obs = "obs", mod = "mod", group = c("model", "month"))

 

## End(Not run)

 

 

#                ANNEXE             ####################################################3

#Taylor, K.E. (2001) Summarizing multiple aspects of model performance in a single diagram. Journal of Geophysical Research, 106: 7183-7192.

library(datasets)

library(ncdf4)

library(plotrix)

 

taylor.diagram(r,r,add=FALSE,col="red",pch=4,pos.cor=TRUE,xlab="MERRA SD (Normalised)",ylab="RCA4 runs SD (normalised)",main="Taylor Diagram",show.gamma=TRUE,ngamma=3,sd.arcs=1,ref.sd=TRUE,grad.corr.lines=c(0.2,0.4,0.6,0.8,0.9),pcex=1,cex.axis=1,normalize=TRUE,mar=c(5,4,6,6),lwd=10,font=5,lty=3)

lpos<-1.5*sd(Data_Mon_11.275)

legend(1.5,1.5,cex=1.2,pt.cex=1.2,legend=c("volcano"),pch=4,col=c("red"))

taylor.diagram(data,data,normalize=TRUE)

 

 

# fake some reference data

 ref<-rnorm(30,sd=2)

 # add a little noise

 model1<-ref+rnorm(30)/2

 # add more noise

 model2<-ref+rnorm(30)

 # display the diagram with the better model

 oldpar<-taylor.diagram(ref,model1)

 # now add the worse model

 taylor.diagram(ref,model2,add=TRUE,col="blue")

 # get approximate legend position

 lpos<-1.5*sd(ref)

 # add a legend

 legend(lpos,lpos,legend=c("Better","Worse"),pch=19,col=c("red","blue"))

 # now restore par values

 par(oldpar)

 # show the "all correlation" display

 taylor.diagram(ref,model1,pos.cor=FALSE)

 taylor.diagram(ref,model2,add=TRUE,col="blue")

 

 

 

FIN DU PROGRAMME

Enjoy It !

The Abdi-Basid Courses Institute