
# *********************************************************************
# **  Licences Sciences pour la Santé - L2 - Statistiques - TD1      **
# **             Simulation de lois Student et Fisher		         **
# *********************************************************************


rm(list=ls())

# chemin du répertoire
Dir <- "U:/enseignement/SciencesSante/L2/TD/TD1_Simu_loi_Student_Fisher/"


sink(paste0(Dir,"TD1.lis"))

date()
system("hostname", intern=T)

print(sessionInfo())


#----------------------------------------------------------------------------------------------------------------------------------------
## 1 ==>  Simulation d'une loi normale centrée réduite

# simulation d'1 valeur + histogramme
x = rnorm(1,mean=0,sd=1)
hist(x)

# simulation de 10 valeurs + histogramme
x = rnorm(10,mean=0,sd=1)
hist(x)

# simulation de 100 valeurs + histogramme
x = rnorm(100,mean=0,sd=1)
hist(x)

# simulation de 1000 valeurs + histogramme
x = rnorm(1000,mean=0,sd=1)
hist(x)

# simulation de 1 000 000 valeurs + histogramme
x = rnorm(10^6,mean=0,sd=1)
hist(x)


#------- comparer la simulation avec la densité théorique

# moyenne

mean(x) # espérance théorique = 0

# variance

var(x) # variance théorique = 1

# distribution

hist(x,freq=FALSE)

nx <- seq(-100,100,length=5000)
lines(nx,dnorm(nx,mean=0,sd=1),col="red")

# quantiles

qqnorm(x, pch = 1, frame = FALSE)
qqline(x, col = "steelblue", lwd = 2)


#---- faire son propre graph quantile-quantile

x = rnorm(10,mean=0,sd=1)

x = sort(x)

x

# nombre de valeurs

nb <- length(x)

nb

# rang des valeurs

rang <- 1:nb

rang

# percentiles

perc <- (rang-0.5)/nb

perc

# Z-scores : valeurs d'une loi normale centrée réduite correspondant aux percentiles calculés

Zscore <- qnorm(perc,mean=0,sd=1)


# QQplot

par(mfrow=c(1,2))
plot(Zscore,x,xlab="théorique",ylab="observé")


qqnorm(x, pch = 1, frame = FALSE)
qqline(x, col = "steelblue", lwd = 2)



#----------------------------------------------------------------------------------------------------------------------------------------
## 2. ==>  Simulation d'une loi du khi deux

# Loi du khi-deux à 1 degré de liberté

x2 <- x^2


mean(x2) # espérance théorique = df

var(x2) # variance théorique = 2*df


hist(x2,freq=FALSE)

nx <- seq(-100,100,length=5000)
lines(nx,dchisq(nx,df=1),col="red")


# Loi du khi-deux à 3 degrés de liberté

n = 1000

x1 <- rnorm(n,mean=0,sd=1)
x2 <- rnorm(n,mean=0,sd=1)
x3 <- rnorm(n,mean=0,sd=1)

x <- x1^2 + x2^2 + x3^2



mean(x) # espérance théorique = df

var(x) # variance théorique = 2*df


hist(x,freq=FALSE)

nx <- seq(-100,100,length=5000)
lines(nx,dchisq(nx,df=3),col="red")



# qqplot
par(mfrow=c(1,1))
y <- qchisq(ppoints(length(x)),df=3)
qqplot(x,y)


#----------------------------------------------------------------------------------------------------------------------------------------
## 3. ==>  Simulation d'une loi de Student

n=10^5

df1 = 50



x <- rnorm(n,mean=0,sd=1)/sqrt(rchisq(n,df=df1)/df1)



# moyenne

mean(x) # espérance théorique 0


# variance

var(x) # variance théorique (df/(df-2))

df1/(df1-2)



# distribution

hist(x,freq=FALSE)

nx <- seq(-15,15,length=5000)
lines(nx,dt(nx,df=3),col="red")

lines(nx,dnorm(nx,mean=0,sd=df1/(df1-2)),col="blue3")


# qqplot
par(mfrow=c(1,1))
y <- qt(ppoints(length(x)),df=df1)
qqplot(x,y)




#----------------------------------------------------------------------------------------------------------------------------------------
## 4. ==>  Simulation d'une loi de Fisher


n=10^5

df1 = 10
df2 = 15


x <- rchisq(n,df=df1)/df1/(rchisq(n,df=df2)/df2)



# moyenne

mean(x) # espérance théorique (df2/(df2-2))

df2/(df2-2)



# variance

var(x) # variance théorique (2*df2^2*(df1+df2-2)/(df1*(df2-2)^2*(df2-4)))

2*df2^2*(df1+df2-2)/(df1*(df2-2)^2*(df2-4))




# distribution

hist(x,freq=FALSE)

nx <- seq(0,30,length=5000)
lines(nx,df(nx,df1=df1,df2=df2),col="red")




# qqplot
par(mfrow=c(1,1))
y <- qf(ppoints(length(x)),df1=df1,df2=df2)
qqplot(x,y)




date()

sink()





















