#argomenti:
#(come commentare)
# 1. usare il ciclo for
# 2. creare funzioni
# 3. uso del pacchetto ggplot2

# applicare i metodi alle distribuzioni conosciute

# 1. esempio sezione 1 ####
## 1.1 sottosezione 1.1 ####
### 1.1.1 sottosezione 1.1.1 ####
# 2. sezione 2 ####

#ecc. 
# 1. tutorial ####
## 1.1. CICLO FOR ####
#per ripetere la stessa funzione
#per diversi paramentri

for (marta in c(1,2,3,4,5)) {
  print(marta)
}

for (a in c(1,2,3,4,5)) {
  for (b in c(1,2,3,4,5)) {
  c <- a + b
  print(c)
  }
}

## 1.2. CREARE FUNZIONI ####
my_print <- function(a){print(a)}
a<-c(1:5)
my_print(a)
b<-c(1:5)
my_sum <- function(a,b){
  c <- rep(a,each=length(b)) + rep(b,length(a))
  return(c)
  }

Mattia<-1:5
Alessandro<-1:5
my_sum(a=Mattia,b=Alessandro)


a<-1:5
b<-1:5


# install.packages("ggplot2")
library(ggplot2)
ggplot()+
  geom_point(aes(x=a,y=b))+
  xlab("x")+ylab("y")

df <- as.data.frame(cbind(a,b))
df$class <- c(1,2,1,2,1)
ggplot(df)+
  geom_point(aes(x=a,y=b,col=class)) #in automatico continua

ggplot(df)+
  geom_point(aes(x=a,y=b,col=as.factor(class))) #in classi

p <- ggplot(df)+
  geom_point(aes(x=a,y=b,col=as.factor(class)))

p
p + ggtitle("plot con ggplot2")

p <- p + ggtitle("plot con ggplot2")

p <- p + scale_colour_discrete(name="classe")
p
p + theme_light()

white_theme <- function(p){
  p <- p + theme_light()
  return(p)
}

p
white_theme(p)
p
p <- white_theme(p)
p

#CREATE THE FOLDER PLOT!
ggsave("plot/plot_con_ggplot.png",plot = p)

png("plot/plot_con_ggplot2.png",width = 300,height = 300)
p
dev.off()

pdf("plot/plot_con_ggplot2.pdf",width = 5,height = 5)
p
dev.off()

# 1. Distribuzione esponenziale ####

## 1.1. Funzione di ripartizione (Fx) ####

### 1.1.1. Visualizzazione ####
# Funzione di ripartizione: Fx
x<-seq(0,10,0.1)
x
lambda<-0.5
Fx <- 1-exp(-lambda*x)

ggplot()+
  geom_point(aes(x=x,y=Fx))

ggplot()+
  geom_col(aes(x=x,y=Fx),width = .05)

ggplot()+
  geom_col(aes(x=x,y=Fx),width = .05)+
  geom_line(aes(x=x,y=Fx),col="blue")+
  ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
          subtitle = "con lambda = 0.5")

### 1.1.2. Ciclo for per lambda ####

# how use paste()
paste("ciao","come","va","?")
paste0("ciao","come","va","?")

for (lambda in c(0.5,1,2,5)) {
  Fx <- 1-exp(-lambda*x)
  
  print(ggplot()+
          geom_col(aes(x=x,y=Fx),width = .05)+
          geom_line(aes(x=x,y=Fx),col="blue")+
          ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
                  subtitle = paste("con lambda =",lambda)))
}

### 1.1.3. Funzione R per plot ####

#creiamo una funzione per plottare
Fx_exp_plot <- function(lambda){
  Fx <- 1-exp(-lambda*x)
  
  print(ggplot()+
          geom_col(aes(x=x,y=Fx),width = .05)+
          geom_line(aes(x=x,y=Fx),col="blue")+
          ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
                  subtitle = paste("con lambda =",lambda)))
}
Fx_exp_plot(lambda=2)
for (lambda in c(0.5,1,2,5)) {Fx_exp_plot(lambda)}

#creiamo una funzione per salvare i plot
Fx_exp_saveplot <- function(lambda){
  Fx <- 1-exp(-lambda*x)
  
  p <- ggplot()+
          geom_col(aes(x=x,y=Fx),width = .05)+
          geom_line(aes(x=x,y=Fx),col="blue")+
          ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
                  subtitle = paste("con lambda =",lambda))
  
  ggsave(paste0("plot/Fx_exp_lambda",lambda,".png"))
}

Fx_exp_saveplot(lambda=1)

for (lambda in c(0.5,1,2,5)) {Fx_exp_saveplot(lambda)}

Fx_exp_saveplot(c(1,2)) # error!

#intro to if
condizione <- FALSE
if (condizione) {
  print("ho capito come funziona if")
}else{
  print("ritenta!")
}

condizione <- TRUE
if (condizione) {
  print("ho capito come funziona l'if !")
}else{
  print("ritenta!")
}

Fx_exp_saveplot <- function(lambda){
  if (length(lambda)!=1) {
    for (lambda in lambda) {
      Fx <- 1-exp(-lambda*x)
      
      p <- ggplot()+
        geom_col(aes(x=x,y=Fx),width = .05)+
        geom_line(aes(x=x,y=Fx),col="blue")+
        ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
                subtitle = paste("con lambda =",lambda))
      
      ggsave(paste0("plot/Fx_exp_lambda",lambda,".png"))
    }
  }else{
    Fx <- 1-exp(-lambda*x)
  
  p <- ggplot()+
    geom_col(aes(x=x,y=Fx),width = .05)+
    geom_line(aes(x=x,y=Fx),col="blue")+
    ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
            subtitle = paste("con lambda =",lambda))
  
  ggsave(paste0("plot/Fx_exp_lambda",lambda,".png"))
  }
}
Fx_exp_saveplot(lambda=c(0.5,1,2,5))


## 1.2. Funzione di densità di probabilità (fx) ####
lambda <- 0.5
fx <- lambda*exp(-lambda*x)

ggplot()+
  geom_col(aes(x=x,y=fx),width = .05)+
  geom_line(aes(x=x,y=fx),col="blue")+
  ggtitle(label = paste("Funzione di densità di prob. con lambda =",lambda))


for (lambda in c(0.5,1,2,5)) {
  fx <- lambda*exp(-lambda*x) #use find and replace
  
  print(ggplot()+
          geom_col(aes(x=x,y=fx),width = .05)+
          geom_line(aes(x=x,y=fx),col="blue")+
          ggtitle(label = "Funzione di densità di probabilità",
                  subtitle = paste("da una distribuzione esponenziale con lambda =",lambda)))
}

#creiamo una funzione per plottare
fx_exp_plot <- function(lambda){
  fx <- lambda*exp(-lambda*x)
  
  print(ggplot()+
          geom_col(aes(x=x,y=fx),width = .05)+
          geom_line(aes(x=x,y=fx),col="blue")+
          ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
                  subtitle = paste("da una distribuzione esponenziale con lambda =",lambda)))
}
fx_exp_plot(1)
for (lambda in c(0.5,1,2,5)) {fx_exp_plot(lambda)}

#creiamo una funzione per plottare
fx_exp_saveplot <- function(lambda){
  fx <- lambda*exp(-lambda*x)
  
  p <- ggplot()+
    geom_col(aes(x=x,y=fx),width = .05)+
    geom_line(aes(x=x,y=fx),col="blue")+
    ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
            subtitle = paste("da una distribuzione esponenziale con lambda =",lambda))
  
  ggsave(paste0("plot/fx_dens_exp_lambda",lambda,".png"),plot = p)
}

fx_exp_saveplot(lambda=1)

for (lambda in c(0.5,1,2,5)) {fx_exp_saveplot(lambda)}

fx_exp_saveplot <- function(lambda){
  for (lambda in lambda) {
    fx <- lambda*exp(-lambda*x)
    
    p <- ggplot()+
      geom_col(aes(x=x,y=fx),width = .05)+
      geom_line(aes(x=x,y=fx),col="blue")+
      ggtitle(label = "Funzione di ripartizione di una distribuzione esponenziale ",
              subtitle = paste("da una distribuzione esponenziale con lambda =",lambda))
    
    ggsave(paste0("plot/fx_dens_exp_lambda",lambda,".png"),plot=p)
  }
}
fx_exp_saveplot(c(0.5,1,2,5))

## 1.3. Indici statistici ####

#calcolare la media e aggiungere le statistiche descrittive al grafico

#Valore atteso : 1/lambda
x<-seq(0,10,0.1)
x
lambda<-0.5
Fx <- 1-exp(-lambda*x)
fx <- lambda*exp(-lambda*x)
df <- as.data.frame(cbind(x,Fx,fx))

ggplot(df)+
  geom_col(aes(x=x,y=fx),width = .05)+
  geom_line(aes(x=x,y=fx),col="blue")+
  geom_vline(xintercept = 1/0.5,col="yellow")+
  geom_text(aes(x=1/0.5,y=0.3,label="Valore Atteso"))


#Mediana : log(2)/lambda
#Varianza : 1/lambda^2


# From P

# 2. distribuzione Gaussiana ####
# 3. distribuzione di Poisson ####
# 4. distribuzione di Bernoulli ####