# ========================================================= # Correction controle continu 2018 # ========================================================= rm(list=ls()) # ------------ Partie 1 (sujet A) ------------ # 1. library(MASS) dd= nlschools # help(nlschools) pour avoir des infos sur ce jeu de donnees # 2. lang= dd$lang # La variable lang etant de nature quantitative continue, la representation adaptee est celle de l'histogramme des frequences hist(lang, freq=FALSE, xlab='lang', ylab='Frequence', main='Histogramme de la variable lang') # 3. # La loi normale est caracterisee par deux parametres : moyenne et ecart-type (ou variance). # Estimation de la moyenne a l'aide de la moyenne empirique : mhat= mean(lang) # 40.935... # Estimation de l'ecart-type a l'aide de l'ecart-type empirique : sdhat= sd(lang) # 9.004... # 4. x= seq(5,60,0.1) lines(x, dnorm(x,mhat,sdhat), col='red') # attention, la fonction dnorm attend l'ecart type et non la variance legend("topleft", c('observation', 'modele'), lty=c(1,1), col=c('black','red')) # La densite sort du graphique. On pourrait relancer la commande hist et prendre un ylim assez grand. Par exemple : # hist(lang, freq=FALSE, xlab='lang', ylab='Frequence', main='Histogramme de la variable lang', ylim=c(0,0.045)) # Puis refaire lines et legend. # La modelisation ne s'ajuste pas correctement sur l'histogramme. # Modeliser la distribution de lang avec une loi normale ne semble donc pas pertinent. # 5. # On peut remarquer que la distribution de lang n'est pas symetrique. Une maniere de quantifier cette observation serait de calculer le coefficient d'asymetrie de la variable lang. # n = length(lang) # CD = n*sum(((lang-mhat)/sdhat)^3)/((n-1)*(n-2)) # Ici on obtiendrait CD = -0.52, signe d'une asymetrie a gauche (CD < 0). # Si toutefois la distribution etait symetrique, nous pourrions egalement comparer l'applatissement de lang a l'aide du coefficient d'applatissement (aussi appele kurtosis). # 6. # La variable COMB est de nature qualitative categorielle et n'admet que deux valeurs : 0 et 1 # 1 si l'eleve est dans une classe a niveau multiple, 0 pour une classe a niveau unique. dev.off() boxplot(lang~dd$COMB, main="Influence de la nature de la classe sur lang", xlab='classe multi-niveaux ?', ylab='lang') # En moyenne, on constate que les individus dans une classe a niveau unique (0) reussissent mieux le test de langue. # De plus, leurs performances sont plus homogenes (boite a moustache moins etendue). # ------------ Partie 1 (sujet B) ------------ # 1. library(MASS) dd= crabs # help(crabs) pour avoir des infos sur ce jeu de donnees # 2. RW= dd$RW # La variable RW etant de nature quantitative continue, la representation adaptee est celle de l'histogramme des frequences hist(RW, freq=FALSE, xlab='RW', ylab='Frequence', main='Histogramme de la variable RW') # 3. # D'apres l'histogramme, la loi normale pourrait etre une bonne modelisation de la loi de RW. # La loi normale est caracterisee par deux parametres : moyenne et ecart-type (ou variance). # Estimation de la moyenne a l'aide de la moyenne empirique : mhat= mean(RW) # 12.7385 # Estimation de l'ecart-type a l'aide de l'ecart-type empirique : sdhat= sd(RW) # 2.573... # 4. x= seq(5,25,0.1) lines(x, dnorm(x,mhat,sdhat), col='red') # attention, la fonction dnorm attend l'ecart type et non la variance legend("topleft", c('observation', 'modele'), lty=c(1,1), col=c('black','red')) # La densite de la loi normale estimee suit bien la tendance de l'histogramme. La modelisation est donc satisfaisante. # 5. # La variable sp est de nature qualitative categorielle et n'admet que deux valeurs : B et O (pour Bleu et Orange) dev.off() boxplot(RW~dd$sp, main="Influence de l'espece sur RW", xlab='sp (espece)', ylab='RW') # On constate que les individus O ont en moyenne un RW plus important. # De plus, le RW presente une plus grande variabilite dans l'espece O que dans l'espece B (boite a moustache plus etendue) # ------------ Partie 2 ------------ 12 points # 1. # Il faut telecharger les donnees de la page de malot sous le nom 'S&P.txt' et les recuperer dans ton dossier. appel= read.table('C:/Users/Etudiant/nomdossier/S&P.txt', header=TRUE) # 2. # Deux commandes pour deduire les descriptives statistiques : # Executer la commande summary() pour definir la nature de variables (quantitatives discretes ou continues), avec # summary(Data$variable) definir la description d'une variable. Il s'agit de determiner ('min, max, mean, quantile'), # Exectuer la commande mean() pour determiner xbar de la variable et var(x,x) pour calculer variance et deduire son ecart type (sqrt(var)). summary(appel) # Min. 1st Qu. Median Mean 3rd Qu. Max. # # Interpreter la mean, la sd et les quantiles: # mean -> la valeur moyenne # mode -> la valeur la plus frequente (annee dans notre cas) # sd -> la mesure de la dispersion des donnees # 3. x <- appel$Taille_Firme #(taille de la firme) ou x=appel[,10] y <- appel$Cout_Dette #(cout de la dette) ou y=appel[,2] # a. # x et y deux variables quantitatives -> un nuage de points plot(x, y, main ='Etude du lien entre le cout de la dette et la taille de la firme', xlab ='Taille de la firme', ylab ='Cout de la dette', col ='red') # b. # Regression simple Y= ax + b +erreur reg1= lm(y~x) reg1 # Call: # lm(formula = y ~ x) # # Coefficients: # (Intercept) x # -14.540 1.278 summary(reg1) # Call: # lm(formula = y ~ x) # # Residuals: # Min 1Q Median 3Q Max # -0.89364 -0.38300 -0.01835 0.27458 1.02213 # # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) -14.5398 5.4804 -2.653 0.0379 * # x 1.2777 0.4485 2.849 0.0292 * # --- # Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 # # Residual standard error: 0.6423 on 6 degrees of freedom # Multiple R-squared: 0.5749, Adjusted R-squared: 0.5041 # F-statistic: 8.115 on 1 and 6 DF, p-value: 0.02923 # coefficient: hat(b) = -14.540 # hat (a)= 1.278 # ----> on deduit de la regression une relation positive entre x et y (quand x augmente d'1 unite, y augmente de 1.278 unites). # c. # Valeur predites : val_pred1=fitted.values(reg1) val_pred1 # 1 2 3 4 5 6 7 8 # -0.1936235 0.3645702 0.8936390 1.1004703 1.2452697 1.5327971 1.6637738 1.8608035 # =====> le cout de la dette estime (hat(y)) augmente bien avec la taille de la firme (x). plot(x, y, pch=1, main ='Etude du lien entre le cout de la dette et la taille de la firme', xlab ='Taille de la firme', ylab ='Cout de la dette', col ='red') points(x, val_pred1, pch=4) legend("topleft", c("Observation","Valeur predite"), pch=c(1,4), col=c("red","black")) hist(y, freq=FALSE) # 4. y # [1] 0.0000 0.0000 0.0000 2.1226 1.7627 1.5410 1.2255 1.8159 w=appel[,3] # ou w = appel$std w # [1] 0.1036 0.0657 0.9458 0.2126 0.8394 0.5024 0.3585 0.4071 # Cette variable est une mesure de risque, elle definie l'amplitude de la variation du cours d'un actif financier sur le marche boursier. Plus la volatilite est elevee, plus l'investissement dans cet actif est risque. # Donc, l'esperance de son gain (ou de sa perte) est elevee. # Regression simple entre la volatilite (std) (w) et le cout de la dette (y): reg2= lm(y~w) reg2 # Call: # lm(formula = y ~ w) # # Coefficients: # (Intercept) w # 0.9129 0.3389 summary(reg2) # Call: # lm(formula = y ~ w) # # Residuals: # Min 1Q Median 3Q Max # -1.2335 -0.9384 0.3244 0.6152 1.1376 # # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 0.9129 0.6007 1.520 0.179 # w 0.3389 1.1439 0.296 0.777 # # Residual standard error: 0.9781 on 6 degrees of freedom # Multiple R-squared: 0.01442, Adjusted R-squared: -0.1498 # F-statistic: 0.08776 on 1 and 6 DF, p-value: 0.777 # Valeurs predites du cout de la dette de la firme appel en fonction du risque financier : val_pred2 = fitted.values(reg2) val_pred2 # 1 2 3 4 5 6 7 8 # 0.9480569 0.9352130 1.2334688 0.9849957 1.1974110 1.0832056 1.0344395 1.0509095 # ===> On remarque que w et y evolue en meme sens, autrement, l'entreprise est sensible au risque financier. # Le poid de la dette depend de la structure de l'actif sur le marche financier, l'entreprise est de plus en plus endette # Dans notre cas, (hata = 0.3389) on peut deduire que l'entreprise endettee depend de caracterestique de la volatilite de son action. plot(y, type='l') # ===> la taille de la firme influe en plus le cout de la dette que la volatilite (amplitude du mouvement est deduite dans le plot de Y en type 'l', entre 2013 2014 le cours augmente brutalement et redescend jusquau 2017 pourreprendre sa hausse debut de cette annee). plot(w, y, pch=1, main ="Representation de l'estimation du cout de la dette en fonction du std", xlab ="risque financier", ylab ="cout de la dette", col ='red') points(w, val_pred2, pch=4) legend("topleft", c("Observation","Valeur predite"), pch=c(1,4), col=c("red","black")) #5. # coefficient de correlation: on deduit la nature de modele et sa qualite cor.test(x,y) # Pearson's product-moment correlation # # data: x and y # t = 2.8486, df = 6, p-value = 0.02923 # alternative hypothesis: true correlation is not equal to 0 # 95 percent confidence interval: # 0.1150018 0.9534632 # sample estimates: # cor # 0.7582289 # ---> On peut deduire un modele statistiquement correcte (r > 0.5). cor.test(w,y) # Pearson's product-moment correlation # # data: w and y # t = 0.29625, df = 6, p-value = 0.777 # alternative hypothesis: true correlation is not equal to 0 # 95 percent confidence interval: # -0.6386396 0.7604039 # sample estimates: # cor # 0.1200675 # ---> on deduit une faible correlation entre w et y => x explique y mieux que w. # idem ce qu on trouve avec boites a moustaches des residus. #6. # Distribution des residus: # regression cout de la dette en fonction de x: residus1= residuals(reg1) residus1 # 1 2 3 4 5 6 7 8 # 0.193623509 -0.364570206 -0.893638971 1.022129672 0.517430345 0.008202917 -0.438273751 -0.044903515 # regression cout de la dette en fonction de w: residus2= residuals(reg2) residus2 # 1 2 3 4 5 6 7 8 # -0.9480569 -0.9352130 -1.2334688 1.1376043 0.5652890 0.4577944 0.1910605 0.7649905 par(mfrow=c(1,2)) hist(residus1, freq= FALSE, xlim=c(-1.5,1.5), main='residus selon la taille de la firme', xlab="taille de la firme") hist(residus2, freq= FALSE, xlim=c(-1.5,1.5), main='residus selon la volatilite', xlab="volatilite") # les deux distributions semblent symetriques par rapport a 0 # la distribution des residus de la 1ere regression est plus resserree autour de 0 que celle par rapport a la volatilite # ---> meilleure qualite de la premiere regression # 7. boxplot(residus1, residus2, names=c("taille de la firme", "volatilite"), main="distribution des residus des regressions", col='grey') # on observe le meme resultat sur la comparaison des boites a moustache, le premier modele donne bien de meilleurs resultats