0% ont trouvé ce document utile (0 vote)
3 vues31 pages

Guide Replication R XLStat

Ce guide de réplication présente les procédures pour reproduire des analyses économétriques et statistiques sur l'impact des critères ESG sur le coût de la dette des entreprises du CAC 40 entre 2015 et 2024, en utilisant R/RStudio et XLStat. Il inclut 14 modèles de régression, des tests statistiques, ainsi que des instructions détaillées pour la préparation des données et l'exécution des analyses. Les résultats attendus et les étapes de validation sont également fournis pour assurer la précision des reproductions.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues31 pages

Guide Replication R XLStat

Ce guide de réplication présente les procédures pour reproduire des analyses économétriques et statistiques sur l'impact des critères ESG sur le coût de la dette des entreprises du CAC 40 entre 2015 et 2024, en utilisant R/RStudio et XLStat. Il inclut 14 modèles de régression, des tests statistiques, ainsi que des instructions détaillées pour la préparation des données et l'exécution des analyses. Les résultats attendus et les étapes de validation sont également fournis pour assurer la précision des reproductions.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

UNIVERSITÉ DE BORDEAUX
Master Finance — Finance Durable

GUIDE DE RÉPLICATION
Modèles Économétriques & Statistiques
Étude ESG & Coût de la dette — CAC 40 (2015–2024)

Procédures pas-à-pas pour R / RStudio et XLStat

14 modèles de régression • Tests statistiques complets • Résultats attendus


N = 352 observations • 39 entreprises • 2015–2024

Université de Bordeaux — Master Finance | Guide Économétrie | Page 1


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

Table des matières


Ce guide documente les procédures exactes pour reproduire l'intégralité des analyses
statistiques et économétriques du mémoire dans deux logiciels : R/RStudio et XLStat. Chaque
section correspond à un groupe de modèles et présente le code R complet, les menus XLStat
étape par étape, et les résultats numériques attendus.

§ Section Fonctions clés

1 Prérequis et préparation des données R (packages) + XLStat (import)

2 Statistiques descriptives describe(), summary(), XLStat >


Describing data

3 Matrice de corrélations [Link](), rcorr(), XLStat >


Correlation

4 M1 — MCO Poolé (baseline) lm(), stargazer(), XLStat > Linear


regression

5 M2 — Effets Fixes Individuels plm(model='within'), XLStat > Panel >


FE

6 M3 — Effets Fixes Doubles (two-way) plm(effect='twoways'), XLStat > Panel


> Two-way

7 M4 — Piliers E et S lm() sur sous-échantillon ESG_E/S

8 M5 — ESG Décalé (t-1) lag() + lm(), XLStat > Lagged


variables

9 M6 — OLS + Interaction Sectorielle lm() avec terme interaction

10 M7 — EF + Interaction Sectorielle plm() avec terme interaction

11 M8 & M9 — Chocs Paris/Covid Variables dummy + plm()

12 M10/M11 — Secteurs séparés (OLS) lm() sur sous-panels

13 M12/M13 — Secteurs séparés (EF) plm() sur sous-panels

14 M14 — Piliers + Interaction lm() sur N=108

15 Tests de spécification Hausman, Breusch-Pagan, VIF, Durbin-


Watson

16 Export et mise en forme des résultats stargazer(), [Link]()

Université de Bordeaux — Master Finance | Guide Économétrie | Page 2


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

1. Prérequis et Préparation des Données

1.1 Installation des packages R nécessaires


Ouvrir RStudio et exécuter le code suivant dans la console pour installer tous les packages
nécessaires à la réplication des 14 modèles.

R
# ─────────────────────────────────────────────────────
# INSTALLATION DES PACKAGES
# À exécuter une seule fois
# ─────────────────────────────────────────────────────

[Link](c(
"plm", # Econométrie des données de panel (effets fixes)
"lmtest", # Tests diagnostiques (Breusch-Pagan, Durbin-Watson)
"sandwich", # Écarts-types robustes (heteroscedasticity)
"car", # VIF (Variance Inflation Factor), Durbin-Watson
"stargazer", # Export des tableaux de régression LaTeX/HTML/text
"Hmisc", # rcorr() : matrice de corrélations avec p-values
"psych", # describe() : statistiques descriptives complètes
"tidyverse", # dplyr, ggplot2 pour manipulation et visualisation
"readxl", # Lecture du fichier Excel de données
"writexl", # Export des résultats en Excel
"ggplot2", # Graphiques
"corrplot", # Visualisation matrice de corrélations
"modelsummary",# Tableaux de régression modernes
"broom" # Tidying des résultats de régression
))

# Charger tous les packages


library(plm); library(lmtest); library(sandwich); library(car)
library(stargazer); library(Hmisc); library(psych); library(tidyverse)
library(readxl); library(writexl); library(corrplot); library(modelsummary)

1.2 Import et préparation des données depuis Excel


Le fichier Excel (onglet '6. Données Panel') contient les 352 observations avec toutes les
variables calculées. Importer ce fichier dans R :

R
# ─────────────────────────────────────────────────────
# IMPORT DES DONNÉES
# ─────────────────────────────────────────────────────

# Adapter le chemin vers votre fichier Excel


panel <- read_excel("analyse_esg_cac40_2015_2024.xlsx",
sheet = "6. Données Panel",

Université de Bordeaux — Master Finance | Guide Économétrie | Page 3


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

skip = 2) # Sauter les 2 lignes de titre

# Vérifier l'import
head(panel)
dim(panel) # Doit afficher : 352 11
names(panel)

# Renommer les colonnes si nécessaire


colnames(panel) <- c("company", "Sector", "year", "CoD", "ESG",
"ESG_E", "ESG_S", "Leverage", "Size", "ROA", "D_Ind")

# Vérification des types


str(panel)

# Forcer les types corrects


panel$year <- [Link](panel$year)
panel$D_Ind <- [Link](panel$D_Ind)
panel$Sector <- [Link](panel$Sector)

# Variables supplémentaires
panel$ESG_lag1 <- ave(panel$ESG, panel$company,
FUN = function(x) c(NA, head(x, -1)))
panel$D_PostParis <- [Link](panel$year >= 2016)
panel$D_Covid <- [Link](panel$year %in% c(2020, 2021))
panel$ESG_x_Ind <- panel$ESG * panel$D_Ind
panel$ESG_x_Paris <- panel$ESG * panel$D_PostParis

# Résumé rapide
cat('N total:', nrow(panel), '\n')
cat('Firmes :', length(unique(panel$company)), '\n')
cat('Années :', min(panel$year), '-', max(panel$year), '\n')
table(panel$Sector)

✅ Résultat attendu : Résultat attendu : dim(panel) → [1] 352 14 (11 colonnes originales + 5 variables
créées). table(Sector) → Industriel: 140, Services: 212

1.3 Déclaration du panel dans plm


R
# ─────────────────────────────────────────────────────
# DÉCLARATION DU PANEL DATA FRAME (objet [Link])
# ─────────────────────────────────────────────────────

# Créer l'objet panel pour les modèles plm


pdata <- [Link](panel, index = c("company", "year"))

# Vérification
pdim(pdata) # Balanced/unbalanced panel
# Résultat attendu :
# Unbalanced Panel: n = 39, T = 1-10, N = 352

# Sous-panels sectoriels

Université de Bordeaux — Master Finance | Guide Économétrie | Page 4


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

panel_ind <- subset(panel, Sector == 'Industriel')


panel_svc <- subset(panel, Sector == 'Services')

pdata_ind <- [Link](panel_ind, index = c('company', 'year'))


pdata_svc <- [Link](panel_svc, index = c('company', 'year'))

cat('Industriel: N =', nrow(panel_ind), '\n')


cat('Services: N =', nrow(panel_svc), '\n')

✅ Résultat attendu : pdim(pdata) → Unbalanced Panel: n=39, T=1-10, N=352

1.4 Import dans XLStat


Pour importer les données dans XLStat (add-in Excel) :
1. Ouvrir le fichier analyse_esg_cac40_2015_2024.xlsx dans Excel
2. Aller sur l'onglet '6. Données Panel'
3. Sélectionner toutes les données (colonnes A:K, de la ligne d'en-tête jusqu'à la dernière
observation)
4. Dans le ruban XLStat, cliquer sur Préparer les données → Gérer les données manquantes →
vérifier qu'il n'y a aucune cellule vide dans CoD, ESG, Leverage, Size, ROA
5. Pour les modèles de panel : XLStat reconnaît automatiquement l'identifiant entreprise
(colonne A) et l'année (colonne C) comme variables d'index

⚠️Attention : Dans XLStat, s'assurer que les colonnes ESG_E et ESG_S ne sont utilisées que pour
M4/M14 (N=108, lignes 2022–2025 seulement). Les lignes avec ESG_E vide doivent être exclues
manuellement pour ces modèles.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 5


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

2. Statistiques Descriptives

2.1 Procédure R
R
# ─────────────────────────────────────────────────────
# STATISTIQUES DESCRIPTIVES
# ─────────────────────────────────────────────────────

vars_desc <- c('CoD', 'ESG', 'ESG_E', 'ESG_S', 'Leverage', 'Size', 'ROA')

# 1. Tableau complet avec psych::describe()


desc_table <- describe(panel[, vars_desc])
print(round(desc_table[,
c('n','mean','median','sd','min','max','skew','kurtosis')], 4))

# 2. Summary standard
summary(panel[, vars_desc])

# 3. Statistiques par secteur


panel %>%
group_by(Sector) %>%
summarise(
N = n(),
ESG_moy = round(mean(ESG, [Link]=TRUE), 2),
CoD_moy = round(mean(CoD, [Link]=TRUE), 4),
Lev_moy = round(mean(Leverage, [Link]=TRUE), 4),
ROA_moy = round(mean(ROA, [Link]=TRUE), 2),
.groups = 'drop'
) %>% print()

# 4. Test t de Student Industriel vs Services


for (v in c('CoD', 'ESG', 'Leverage', 'ROA', 'Size')) {
ind_v <- panel[panel$Sector=='Industriel', v]
svc_v <- panel[panel$Sector=='Services', v]
tst <- [Link](ind_v, svc_v)
cat(sprintf('%-12s t=%.3f p=%.4f %s\n',
v, tst$statistic, tst$[Link],
ifelse(tst$[Link]<0.01,'***',ifelse(tst$[Link]<0.05,'**',
ifelse(tst$[Link]<0.10,'*','')))))
}

# 5. Évolution annuelle
panel %>%
group_by(year) %>%
summarise(N=n(), ESG=round(mean(ESG),2), CoD=round(mean(CoD),4),
Leverage=round(mean(Leverage),4), ROA=round(mean(ROA),2)) %>%
print(n=10)

✅ Résultat attendu : describe() affiche : CoD mean≈0.1278, sd≈0.1215, skew≈2.31 | ESG mean≈78.27,
sd≈9.14, skew≈-0.83

Université de Bordeaux — Master Finance | Guide Économétrie | Page 6


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

2.2 Procédure XLStat


1. Dans le ruban XLStat → Décrire les données → Statistiques descriptives
2. Dans la fenêtre qui s'ouvre : Données quantitatives → sélectionner les colonnes CoD, ESG,
ESG_E, ESG_S, Leverage, Size, ROA (colonnes D:J)
3. Cocher : Moyenne, Médiane, Écart-type, Min, Max, Asymétrie (Skewness), Kurtosis
4. Onglet 'Options' : cocher 'Statistiques manquantes' → Exclure
5. Cliquer OK → XLStat génère une nouvelle feuille avec le tableau

Pour la comparaison sectorielle avec test t :


1. XLStat → Tests paramétriques → Test t de Student pour deux échantillons indépendants
2. Échantillon 1 : Sélectionner les valeurs de CoD où Sector = 'Industriel'
3. Échantillon 2 : Sélectionner les valeurs de CoD où Sector = 'Services'
4. Hypothèse : bilatérale (H₀ : μ₁ = μ₂) → niveau de signif. 5%
5. Répéter pour ESG, Leverage, ROA
⚠️Attention : Pour filtrer par secteur dans XLStat, utiliser d'abord un filtre Excel standard (Données →
Filtrer) avant de lancer le test.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 7


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

3. Matrice de Corrélations de Pearson

3.1 Procédure R
R
# ─────────────────────────────────────────────────────
# MATRICE DE CORRÉLATIONS
# ─────────────────────────────────────────────────────

vars_corr <- c('CoD','ESG','ESG_E','ESG_S','Leverage','Size','ROA')


corr_data <- [Link](panel[, vars_corr])

# 1. Matrice de corrélations simples


corr_mat <- cor(corr_data, method = 'pearson')
print(round(corr_mat, 4))

# 2. Matrice avec p-values (Hmisc::rcorr)


corr_rcorr <- rcorr([Link](corr_data), type = 'pearson')
print(round(corr_rcorr$r, 4)) # Coefficients
print(round(corr_rcorr$P, 4)) # P-values

# 3. Fonction pour afficher r et étoiles ensemble


corr_table <- function(r_mat, p_mat) {
out <- matrix('', nrow=nrow(r_mat), ncol=ncol(r_mat),
dimnames=dimnames(r_mat))
for(i in 1:nrow(r_mat)) for(j in 1:ncol(r_mat)) {
if(i==j) { out[i,j] <- '1.000'; next }
stars <- ifelse(p_mat[i,j]<0.01,'***',
ifelse(p_mat[i,j]<0.05,'**',
ifelse(p_mat[i,j]<0.10,'*','')))
out[i,j] <- paste0(round(r_mat[i,j],3), stars)
}
return(out)
}
print(corr_table(corr_rcorr$r, corr_rcorr$P))

# 4. Visualisation graphique
corrplot(corr_mat, method='color', type='upper',
[Link]=0.8, [Link]='black', [Link]=0.7,
col=colorRampPalette(c('#B91C1C','white','#166534'))(200),
title='Matrice de corrélations - Panel CAC40 2015-2024')

Résultats attendus de la matrice de corrélations :

Paire r (Pearson) p-value Interprétation


CoD ↔ ESG -0.098 p=0.068* Faible relation négative

CoD ↔ Levier -0.302 p<0.001*** Relation négative modérée

CoD ↔ ROA +0.532 p<0.001*** Relation positive forte

CoD ↔ Taille -0.201 p<0.001*** Relation négative faible

Université de Bordeaux — Master Finance | Guide Économétrie | Page 8


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

Paire r (Pearson) p-value Interprétation


ESG ↔ Taille +0.190 p<0.001*** Plus grande → mieux noté

Taille ↔ ROA -0.424 p<0.001*** Grandes firmes = ROA modéré

3.2 Procédure XLStat


1. XLStat → Analyse des données → Matrices de corrélation
2. Sélectionner les colonnes : CoD (D), ESG (E), Leverage (H), Size (I), ROA (J)
3. Cocher : Corrélation de Pearson + Test de significativité
4. Niveau de significativité : 0.05
5. Cocher 'Afficher la matrice de corrélation avec les p-values'
6. Option graphique : cocher 'Corrélogramme' pour la visualisation
7. Cliquer OK → XLStat génère la matrice avec les étoiles de significativité

💡 Note : XLStat affiche les coefficients de Pearson et indique avec * / ** / *** la significativité. Vérifier que
CoD↔ROA donne r=0.532 (***) et CoD↔Levier donne r=-0.302 (***)

Université de Bordeaux — Master Finance | Guide Économétrie | Page 9


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

4. M1 — Régression MCO Poolée (Baseline)


Modèle : CoD_it = α + β₁ESG + β₂Size + β₃Leverage + β₄ROA + ε_it

4.1 Procédure R
R
# ─────────────────────────────────────────────────────
# M1 : MCO POOLÉ (Ordinary Least Squares Pooled)
# ─────────────────────────────────────────────────────

# Estimation
M1_ols <- lm(CoD ~ ESG + Size + Leverage + ROA, data = panel)

# Résumé complet
summary(M1_ols)

# Résultats avec écarts-types robustes (White HC1)


coeftest(M1_ols, vcov = vcovHC(M1_ols, type = 'HC1'))

# Extraire les coefficients, SE, t-stats, p-values


tidy(M1_ols) %>%
mutate(stars = case_when(
[Link] < 0.01 ~ '***',
[Link] < 0.05 ~ '**',
[Link] < 0.10 ~ '*',
TRUE ~ ''
)) %>%
mutate(coef_str = paste0(round(estimate,4), stars, '\
n(',round([Link],4),')')) %>%
select(term, coef_str, statistic, [Link])

# Statistiques du modèle
cat('R² =', round(summary(M1_ols)$[Link], 4), '\n')
cat('R² ajust =', round(summary(M1_ols)$[Link], 4), '\n')
cat('F-stat =', round(summary(M1_ols)$fstatistic[1], 3), '\n')
cat('N =', nobs(M1_ols), '\n')

# Test d'hétéroscédasticité (Breusch-Pagan)


bptest(M1_ols)
# Si p < 0.05 → hétéroscédasticité → utiliser SE robustes (HC1/HC3)

# Test de multicolinéarité (VIF)


vif(M1_ols)
# VIF > 10 → problème de multicolinéarité

Résultats numériques attendus pour M1 :

Université de Bordeaux — Master Finance | Guide Économétrie | Page 10


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

Variable Coefficient Éc.-type t-stat p-value Sig.


(Constante) 1.1394 0.1372 8.306 <0.001 ***

Score ESG -0.0000 0.0008 -0.004 0.997

Taille ln(A) -0.0469 0.0074 -6.336 <0.001 ***

Levier (D/A) -0.6519 0.0669 -9.743 <0.001 ***

ROA (%) 0.0047 0.0020 2.350 0.019 **

R² R² ajusté F-stat p(F) N


0.3443 0.3367 45.544 < 0.001 352

4.2 Procédure XLStat


1. XLStat → Modélisation des données → Régression linéaire
2. Variable Y (dépendante) : sélectionner la colonne CoD (colonne D, 352 lignes)
3. Variables X (explicatives) : sélectionner ESG, Size, Leverage, ROA (colonnes E, I, H, J)
4. Cocher 'Constante dans le modèle'
5. Onglet 'Validation' → cocher Test de Fisher (F-test global) + Test de Student (t-test
individuel)
6. Onglet 'Résidus' → cocher 'Test de Durbin-Watson' et 'Graphique des résidus'
7. Onglet 'Options' → cocher 'Intervalles de confiance à 95%'
8. Cliquer OK

✅ Résultat attendu : XLStat affiche : R²=0.3443, R²ajusté=0.3367, F=45.544 (p<0.001). Coefficients :


Constante=1.139 (***), ESG≈0.000 (ns), Taille=-0.047 (***), Levier=-0.652 (***), ROA=0.005 (**).
⚠️Attention : Si XLStat n'affiche pas les mêmes résultats, vérifier que les 352 lignes sont bien
sélectionnées et qu'aucune cellule vide n'est présente dans les colonnes X/Y.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 11


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

5. M2 — Effets Fixes Individuels (Within Estimator)


Modèle : CoD_it = α_i + β₁ESG + β₂Size + β₃Leverage + β₄ROA + ε_it
L'estimateur within élimine les effets individuels non observés constants dans le temps en
centrant chaque variable par rapport à la moyenne individuelle (déméanage).

5.1 Procédure R
R
# ─────────────────────────────────────────────────────
# M2 : EFFETS FIXES INDIVIDUELS (plm)
# ─────────────────────────────────────────────────────

M2_fe <- plm(CoD ~ ESG + Size + Leverage + ROA,


data = pdata,
model = 'within', # Within = effets fixes
effect = 'individual' # Effets sur les entités (entreprises)
)

# Résumé
summary(M2_fe)

# Écarts-types robustes (clusterisés par entreprise)


coeftest(M2_fe, vcov = vcovHC(M2_fe, type='HC1', cluster='group'))

# Statistiques du modèle
cat('R² within =', round(summary(M2_fe)$[Link]['rsq'], 4), '\n')
cat('F-stat =', round(summary(M2_fe)$fstatistic$statistic, 3), '\n')
cat('N =', pdim(pdata)$N, '\n')

# Récupérer les effets fixes estimés (α_i)


fixef_vals <- fixef(M2_fe)
summary(fixef_vals) # Distribution des effets fixes
head(sort(fixef_vals, decreasing=TRUE), 5) # Top 5 entreprises
head(sort(fixef_vals, decreasing=FALSE), 5) # Bottom 5 entreprises

# Test de Hausman : FE vs RE (choisir entre EF et effets aléatoires)


M2_re <- plm(CoD ~ ESG + Size + Leverage + ROA,
data=pdata, model='random')
phtest(M2_fe, M2_re) # Si p<0.05 → préférer effets fixes

Résultats attendus pour M2 :

Variable Coefficient Éc.-type t-stat p-value Sig.


ESG (within) -0.0003 0.0010 -0.303 0.762

Taille ln(A) -0.1392 0.0141 -9.872 <0.001 ***

Levier (D/A) -0.9514 0.1080 -8.809 <0.001 ***

Université de Bordeaux — Master Finance | Guide Économétrie | Page 12


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

Variable Coefficient Éc.-type t-stat p-value Sig.


ROA (%) -0.0080 0.0019 -4.211 <0.001 ***

R² within F-stat p(F) N Hausman p-val


0.3050 38.075 <0.001 352 < 0.05 → EF préféré

5.2 Procédure XLStat


1. XLStat → Modélisation des données → Données de panel → Modèles à effets fixes
2. Variable dépendante (Y) : colonne CoD
3. Variables explicatives (X) : ESG, Size, Leverage, ROA
4. Identifiant entité : colonne 'Entreprise' (colonne A)
5. Variable temps : colonne 'Année' (colonne C)
6. Type d'effets : Individual (effets individuels fixes uniquement)
7. Estimateur : Within (déméanage par entité)
8. Cocher 'Test de Hausman' dans l'onglet Options
9. Cliquer OK → XLStat estime le modèle et affiche les coefficients within

💡 Note : XLStat panel data est accessible via : XLStat → Advanced features → Econometrics → Panel
data models. La version de base peut ne pas inclure ce module selon la licence.
⚠️Attention : Si votre version XLStat ne dispose pas du module Panel, utiliser la transformation manuelle
: créer les variables déméanées (CoD_demeaned = CoD - mean(CoD par entreprise)) et estimer par
OLS classique avec ces variables transformées.

Alternative XLStat sans module Panel : transformation manuelle


1. Créer une colonne 'CoD_mean_firm' = moyenne de CoD par entreprise (AVERAGEIF)
2. Créer 'CoD_dm' = CoD - CoD_mean_firm (variable déméanée)
3. Répéter pour ESG, Size, Leverage, ROA
4. Faire la régression OLS sur les variables déméanées (sans constante)
5. Les coefficients obtenus sont identiques à l'estimateur within

Université de Bordeaux — Master Finance | Guide Économétrie | Page 13


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

6. M3 — Effets Fixes Doubles (Two-Way Fixed


Effects)
Modèle : CoD_it = α_i + γ_t + β₁ESG + β₂Size + β₃Leverage + β₄ROA + ε_it

6.1 Procédure R
R
# ─────────────────────────────────────────────────────
# M3 : EFFETS FIXES DOUBLES (Two-Way FE)
# ─────────────────────────────────────────────────────

M3_fe2 <- plm(CoD ~ ESG + Size + Leverage + ROA,


data = pdata,
model = 'within',
effect = 'twoways' # Individuel + Temporel
)

summary(M3_fe2)

# Equivalent avec dummies temporelles explicites


M3_alt <- lm(CoD ~ ESG + Size + Leverage + ROA + factor(year) +
factor(company) - 1,
data = panel)
# Note : le -1 supprime la constante globale
# Vérifier que les coefficients non-temporels sont identiques à M3_fe2

# R² within et between
summary(M3_fe2)$[Link]

✅ Résultat attendu : M3 : R²=0.265, coefficients stables vs M2 (ESG non-sig, Levier -0.981***, ROA -
0.009***)

Université de Bordeaux — Master Finance | Guide Économétrie | Page 14


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

7. M4 — Régression sur les Piliers E et S (N=108)


Modèle : CoD_it = α + β₁ESG_E + β₂ESG_S + β₃Size + β₄Leverage + β₅ROA + ε_it

7.1 Procédure R
R
# ─────────────────────────────────────────────────────
# M4 : PILIERS ENVIRONNEMENTAL ET SOCIAL
# Sous-échantillon N=108 (observations avec ESG_E et ESG_S)
# ─────────────────────────────────────────────────────

# Sous-échantillon avec données piliers disponibles


panel_pil <- panel[![Link](panel$ESG_E) & ![Link](panel$ESG_S), ]
cat('N sous-échantillon piliers:', nrow(panel_pil), '\n')
# Doit afficher : 108

# Estimation
M4_pil <- lm(CoD ~ ESG_E + ESG_S + Size + Leverage + ROA, data = panel_pil)
summary(M4_pil)

# Tests de significativité individuelle et jointe


# Test H0 : β_E = β_S = 0 simultanément
library(car)
linearHypothesis(M4_pil, c('ESG_E = 0', 'ESG_S = 0'))
# Si F non-significatif → piliers E/S n'ont pas d'effet joint

# Comparer les coefficients E vs S


linearHypothesis(M4_pil, 'ESG_E = ESG_S')

✅ Résultat attendu : M4 : N=108, R²=0.276. ESG_E : +0.0057 (ns), ESG_S : +0.0025 (ns). Seuls Levier
(***) et ROA (**) significatifs.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 15


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

8. M5 — ESG Décalé (Lag t-1) — Robustesse


Endogénéité
Modèle : CoD_it = α + β₁ESG_{i,t-1} + β₂Size + β₃Leverage + β₄ROA + ε_it

8.1 Procédure R
R
# ─────────────────────────────────────────────────────
# M5 : ESG DÉCALÉ D'UNE PÉRIODE (t-1)
# Atténue le biais d'endogénéité de simultaneité
# ─────────────────────────────────────────────────────

# Créer le lag ESG dans l'objet [Link]


pdata$ESG_lag1 <- lag(pdata$ESG, k = 1)

# Vérification
head(pdata[pdata$company=='ACCOR SA', c('year','ESG','ESG_lag1')], 6)
# ESG_lag1 en 2016 = ESG de 2015, etc.

# Sous-panel sans valeurs manquantes sur lag


panel_lag <- [Link](panel[, c('company','year','CoD','ESG_lag1',
'Size','Leverage','ROA')])
cat('N avec ESG_lag1:', nrow(panel_lag), '\n') # → 317

M5_lag <- lm(CoD ~ ESG_lag1 + Size + Leverage + ROA, data = panel_lag)


summary(M5_lag)

# Comparer les coefficients M1 vs M5


cat('\nComparaison ESG contemporain vs lagué:\n')
cat('M1 : β_ESG(t) =', round(coef(M1_ols)['ESG'], 5), '\n')
cat('M5 : β_ESG(t-1) =', round(coef(M5_lag)['ESG_lag1'], 5), '\n')

✅ Résultat attendu : M5 : N=317, R²=0.357. ESG_lag1 : +0.001 (ns). La non-significativité est robuste à
l'inversion causale.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 16


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

9. M6 & M7 — OLS et EF avec Interaction Sectorielle


Modèle M6 : CoD = α + β₁ESG + β₂D_Ind + β₃(ESG×D_Ind) + β₄Size + β₅Leverage +
β₆ROA + ε

9.1 Procédure R — M6 (OLS + Interaction)


R
# ─────────────────────────────────────────────────────
# M6 : OLS + TERME D'INTERACTION ESG × SECTEUR
# ─────────────────────────────────────────────────────

# Créer le terme d'interaction


panel$ESG_x_Ind <- panel$ESG * panel$D_Ind

# Estimation M6
M6_int <- lm(CoD ~ ESG + D_Ind + ESG_x_Ind + Size + Leverage + ROA,
data = panel)
summary(M6_int)

# Interpréter l'interaction
# L'effet marginal de ESG pour les Services = β_ESG
# L'effet marginal de ESG pour l'Industriel = β_ESG + β_interaction
b_esg <- coef(M6_int)['ESG']
b_int <- coef(M6_int)['ESG_x_Ind']
cat('Effet ESG pour Services: ', round(b_esg, 5), '\n')
cat('Effet ESG pour Industriel: ', round(b_esg + b_int, 5), '\n')

# ─────────────────────────────────────────────────────
# M7 : EF + TERME D'INTERACTION
# ─────────────────────────────────────────────────────

pdata$ESG_x_Ind <- pdata$ESG * pdata$D_Ind

M7_fe_int <- plm(CoD ~ ESG + ESG_x_Ind + Size + Leverage + ROA,


data = pdata,
model = 'within',
effect = 'individual')
summary(M7_fe_int)

# Note : D_Ind est absorbé par les effets fixes individuels


# seule l'interaction ESG_x_Ind est identifiée dans FE

✅ Résultat attendu : M6 : ESG×Industriel = +0.0004 (ns, p=0.77). M7 idem. L'hétérogénéité sectorielle


est capturée par les secteurs séparés (M10-M13) plutôt que par le terme d'interaction.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 17


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

10. M8 & M9 — Chocs Exogènes (Accord de Paris,


Covid-19)

10.1 M8 — Interaction avec l'Accord de Paris (≥2016)


R
# ─────────────────────────────────────────────────────
# M8 : EF + ACCORD DE PARIS (Post-2016 dummy)
# H : L'Accord de Paris a-t-il renforcé le lien ESG–CoD ?
# ─────────────────────────────────────────────────────

panel$D_PostParis <- [Link](panel$year >= 2016)


panel$ESG_x_Paris <- panel$ESG * panel$D_PostParis

pdata$D_PostParis <-
[Link]([Link]([Link](index(pdata,'time'))) >= 2016)
pdata$ESG_x_Paris <- pdata$ESG * pdata$D_PostParis

M8_paris <- plm(CoD ~ ESG + D_PostParis + ESG_x_Paris + Size + Leverage +


ROA,
data = pdata,
model = 'within',
effect = 'individual')
summary(M8_paris)

# Interpréter :
# β_ESG = effet ESG avant 2016 (pré-Paris)
# β_ESG_x_Paris = différence d'effet ESG après 2016
# β_ESG + β_ESG_x_Paris = effet ESG post-Paris

# ─────────────────────────────────────────────────────
# M9 : EF + COVID DUMMY (2020-2021)
# ─────────────────────────────────────────────────────

pdata$D_Covid <- [Link]([Link]([Link](index(pdata,'time')))


%in% c(2020,2021))

M9_covid <- plm(CoD ~ ESG + D_Covid + Size + Leverage + ROA,


data = pdata,
model = 'within',
effect = 'individual')
summary(M9_covid)

# Résultat attendu : D_Covid ≈ -0.020 (légèrement négatif, non-sig)


# → Politiques monétaires accommodantes BCE ont légèrement réduit le CoD

✅ Résultat attendu : M8 : ESG_x_Paris = +0.0016 (ns, p=0.15). M9 : D_Covid = -0.020 (ns, p=0.18).
Aucun choc significatif.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 18


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

11. M10 & M11 — Régressions OLS par Secteur

11.1 Procédure R
R
# ─────────────────────────────────────────────────────
# M10 : OLS SECTEUR INDUSTRIEL (N=140)
# M11 : OLS SECTEUR SERVICES (N=212)
# ─────────────────────────────────────────────────────

# Vérification des sous-échantillons


cat('Industriel N =', nrow(panel_ind), '\n') # → 140
cat('Services N =', nrow(panel_svc), '\n') # → 212

# M10 : Industriel
M10_ind <- lm(CoD ~ ESG + Size + Leverage + ROA, data = panel_ind)
summary(M10_ind)

# M11 : Services
M11_svc <- lm(CoD ~ ESG + Size + Leverage + ROA, data = panel_svc)
summary(M11_svc)

# Comparaison des R² (IMPORTANT)


cat('\nComparaison R² :\n')
cat('M10 Industriel R² =', round(summary(M10_ind)$[Link], 4), '\n')
cat('M11 Services R² =', round(summary(M11_svc)$[Link], 4), '\n')

# Test de Chow : les coefficients sont-ils égaux entre secteurs ?


# Méthode : ajouter toutes les interactions avec D_Ind et tester
globalement
M_chow <- lm(CoD ~ ESG*D_Ind + Size*D_Ind + Leverage*D_Ind + ROA*D_Ind,
data = panel)
linearHypothesis(M_chow, c('ESG:D_Ind=0','Size:D_Ind=0',
'Leverage:D_Ind=0','ROA:D_Ind=0'))
# F significatif → coefficients différents entre secteurs (structural
break)

# Comparaison des coefficients ESG


cat('\nCoefficient ESG :\n')
cat('M10 Industriel β_ESG =', round(coef(M10_ind)['ESG'], 5), '\n')
cat('M11 Services β_ESG =', round(coef(M11_svc)['ESG'], 5), '\n')

# Tableau comparatif avec stargazer


stargazer(M1_ols, M10_ind, M11_svc,
type = 'text',
title = 'Comparaison OLS : Panel complet vs Secteurs',
[Link] = c('Full Panel', 'Industriel', 'Services'),
[Link] = 'Coût de la dette (CoD)',
[Link] = c('Score ESG','Taille ln(A)','Levier (D/A)','ROA
(%)'),

Université de Bordeaux — Master Finance | Guide Économétrie | Page 19


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

[Link] = c(0.10, 0.05, 0.01),


digits = 4,
[Link] = TRUE
)

Résultats attendus — comparaison clé :

Statistique M1 Full Panel M10 Industriel M11 Services


R² 0.3443 0.2655 0.4613

R² ajusté 0.3367 0.2437 0.4509

β_ESG ≈0.000 (ns) 0.001 (ns) 0.001 (ns)

β_Levier -0.652*** -0.630*** -0.702***

β_ROA 0.005** -0.010*** 0.011***

F-stat 45.54 12.20 44.31

N 352 140 212

⚠️Attention : Notez l'inversion de signe du ROA entre les secteurs (- pour Industriel, + pour Services) :
c'est un résultat économétriquement important qui justifie l'analyse séparée.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 20


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

12. M12 & M13 — Effets Fixes par Secteur

12.1 Procédure R
R
# ─────────────────────────────────────────────────────
# M12 : EF SECTEUR INDUSTRIEL
# M13 : EF SECTEUR SERVICES
# ─────────────────────────────────────────────────────

M12_fe_ind <- plm(CoD ~ ESG + Size + Leverage + ROA,


data = pdata_ind,
model = 'within',
effect = 'individual')
summary(M12_fe_ind)

M13_fe_svc <- plm(CoD ~ ESG + Size + Leverage + ROA,


data = pdata_svc,
model = 'within',
effect = 'individual')
summary(M13_fe_svc)

# Comparer ESG within chaque secteur


b_esg_ind_fe <- coef(M12_fe_ind)['ESG']
b_esg_svc_fe <- coef(M13_fe_svc)['ESG']
cat('M12 β_ESG Ind FE =', round(b_esg_ind_fe, 5), '\n') # → -0.003
cat('M13 β_ESG Svc FE =', round(b_esg_svc_fe, 5), '\n') # → -0.000

# Comparaison R² OLS vs FE par secteur


cat('\nR² OLS Ind:', round(summary(M10_ind)$[Link], 4),' FE:',
round(summary(M12_fe_ind)$[Link]['rsq'], 4), '\n')
cat('R² OLS Svc:', round(summary(M11_svc)$[Link], 4),' FE:',
round(summary(M13_fe_svc)$[Link]['rsq'], 4), '\n')

Université de Bordeaux — Master Finance | Guide Économétrie | Page 21


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

13. Tests de Spécification Économétrique


Cette section présente les tests diagnostiques essentiels que le directeur de mémoire peut
demander pour valider les choix méthodologiques.

13.1 Test de Hausman (FE vs RE)


Le test de Hausman permet de choisir entre effets fixes (within) et effets aléatoires (random). Si
p < 0.05, les effets fixes sont préférés.
R
# ─────────────────────────────────────────────────────
# TEST DE HAUSMAN
# H0 : Effets aléatoires cohérents (préférer RE)
# H1 : Effets fixes nécessaires (préférer FE)
# ─────────────────────────────────────────────────────

M2_fe <- plm(CoD ~ ESG + Size + Leverage + ROA,


data=pdata, model='within', effect='individual')
M2_re <- plm(CoD ~ ESG + Size + Leverage + ROA,
data=pdata, model='random')

test_hausman <- phtest(M2_fe, M2_re)


print(test_hausman)

cat('Chi² =', round(test_hausman$statistic, 4), '\n')


cat('p-value =', round(test_hausman$[Link], 4), '\n')
cat('Conclusion :', ifelse(test_hausman$[Link] < 0.05,
'Effets fixes préférés (rejet H0)', 'Effets aléatoires acceptables'), '\
n')

✅ Résultat attendu : Résultat attendu : Chi² ≈ 28.4 (df=4), p < 0.001 → rejeter H0 → effets fixes
appropriés

13.2 Test de Breusch-Pagan (Hétéroscédasticité)


R
# ─────────────────────────────────────────────────────
# TEST DE BREUSCH-PAGAN
# H0 : Homoscédasticité
# H1 : Hétéroscédasticité
# ─────────────────────────────────────────────────────

bp_test <- bptest(M1_ols)


print(bp_test)

cat('BP stat =', round(bp_test$statistic, 4), '\n')


cat('p-value =', round(bp_test$[Link], 4), '\n')

Université de Bordeaux — Master Finance | Guide Économétrie | Page 22


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

# Si hétéroscédasticité → utiliser SE robustes (White HC)


if(bp_test$[Link] < 0.05) {
cat('→ Hétéroscédasticité détectée, utiliser SE robustes\n')
robust_se <- coeftest(M1_ols, vcov = vcovHC(M1_ols, type='HC1'))
print(robust_se)
} else {
cat('→ Pas d hétéroscédasticité, SE classiques valides\n')
}

13.3 Test VIF (Multicolinéarité)


R
# ─────────────────────────────────────────────────────
# FACTEURS D'INFLATION DE LA VARIANCE (VIF)
# Règle : VIF > 10 → problème grave, VIF > 5 → attention
# ─────────────────────────────────────────────────────

vif_vals <- vif(M1_ols)


print(round(vif_vals, 3))

cat('\nVIF maximum :', round(max(vif_vals), 3), '\n')


cat('Diagnostic :',
ifelse(max(vif_vals) > 10, 'PROBLÈME GRAVE',
ifelse(max(vif_vals) > 5, 'Attention', 'OK - pas de
multicolinéarité')), '\n')

# Résultat attendu (approximatif) :


# ESG : ~1.07
# Size : ~1.53
# Leverage : ~1.24
# ROA : ~1.23
# → Tous < 5 → pas de multicolinéarité problématique

✅ Résultat attendu : VIF attendus : ESG ≈ 1.07, Size ≈ 1.53, Leverage ≈ 1.24, ROA ≈ 1.23 → Tous < 5
→ Multicolinéarité non-problématique

13.4 Test de Wooldridge (Autocorrélation des résidus en panel)


R
# ─────────────────────────────────────────────────────
# TEST DE WOOLDRIDGE (autocorrélation AR(1) dans panel)
# H0 : pas d'autocorrélation
# ─────────────────────────────────────────────────────

# Installer le package supplémentaire si nécessaire


# [Link]('plmtest')

pbgtest(M2_fe, order = 1) # Test Breusch-Godfrey pour panel

# Alternative : test de Durbin-Watson adapté panel


pdwtest(M2_fe)

Université de Bordeaux — Master Finance | Guide Économétrie | Page 23


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

# Si autocorrélation → utiliser SE clustérisées


coeftest(M2_fe, vcov = vcovHC(M2_fe, type='HC1', cluster='group'))

13.5 Test de normalité des résidus


R
# ─────────────────────────────────────────────────────
# TEST DE NORMALITÉ DES RÉSIDUS (Jarque-Bera)
# H0 : résidus normalement distribués
# ─────────────────────────────────────────────────────

library(tseries)
residus_M1 <- residuals(M1_ols)

# Test Jarque-Bera
jb_test <- [Link](residus_M1)
print(jb_test)

# Q-Q plot
qqnorm(residus_M1, main='Q-Q Plot des résidus M1')
qqline(residus_M1, col='red', lwd=2)

# Histogramme des résidus


hist(residus_M1, breaks=30, col='lightblue',
main='Distribution des résidus M1',
xlab='Résidus', ylab='Fréquence')
curve(dnorm(x, mean=mean(residus_M1), sd=sd(residus_M1))*
length(residus_M1)*diff(range(residus_M1))/30,
add=TRUE, col='red', lwd=2)

Université de Bordeaux — Master Finance | Guide Économétrie | Page 24


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

14. Export et Présentation des Résultats

14.1 Tableau comparatif avec stargazer


R
# ─────────────────────────────────────────────────────
# TABLEAU COMPARATIF PUBLICATION-READY (stargazer)
# ─────────────────────────────────────────────────────

# Tableau principal M1, M2, M3, M4, M5


stargazer(
M1_ols, M2_fe, M3_fe2, M4_pil, M5_lag,
type = 'text', # Changer en 'latex' pour LaTeX
title = 'Déterminants du coût de la dette - CAC40 2015-2024',
[Link] = c('M1 OLS','M2 EF Ent.','M3 EF 2W','M4 Piliers','M5
Lag'),
[Link] = 'Coût de la dette (CoD)',
[Link] = c('ESG','ESG_E','ESG_S','ESG(t-1)',
'Taille','Levier','ROA','Constante'),
[Link] = c(0.10, 0.05, 0.01),
[Link] = list(
c('Effets fixes entité', 'Non','Oui','Oui','Non','Non'),
c('Effets fixes temps', 'Non','Non','Oui','Non','Non')
),
[Link] = c('ser','f'),
digits = 4,
[Link] = TRUE,
out = 'tableau_regressions.txt'
)

# Version HTML (pour copier-coller dans Word)


stargazer(
M1_ols, M2_fe, M3_fe2,
type = 'html',
out = 'tableau_regressions.html'
)

# Version avec modelsummary (alternative moderne à stargazer)


modelsummary(
list('M1 OLS'=M1_ols, 'M2 EF'=M2_fe, 'M3 2WFE'=M3_fe2),
stars = c('*'=0.1,'**'=0.05,'***'=0.01),
gof_map = c('nobs','[Link]','[Link]'),
output = 'tableau_modelsummary.xlsx'
)

14.2 Script R complet en un bloc


Pour regrouper tous les modèles en un seul script d'exécution :
R
# ═══════════════════════════════════════════════════

Université de Bordeaux — Master Finance | Guide Économétrie | Page 25


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

# SCRIPT COMPLET — TOUTES LES RÉGRESSIONS


# Sauvegarder sous : regressions_cac40_esg.R
# ═══════════════════════════════════════════════════

# 0. Setup
rm(list=ls()); [Link](42)
library(plm); library(lmtest); library(sandwich)
library(car); library(stargazer); library(tidyverse)
library(readxl); library(Hmisc); library(psych)

# 1. Import
panel <- read_excel("analyse_esg_cac40_2015_2024.xlsx",
sheet="6. Données Panel", skip=2)
colnames(panel) <- c("company","Sector","year","CoD","ESG",
"ESG_E","ESG_S","Leverage","Size","ROA","D_Ind")
panel$year <- [Link](panel$year)
panel$ESG_lag1 <- ave(panel$ESG, panel$company, FUN=function(x)
c(NA,head(x,-1)))
panel$D_PostParis <- [Link](panel$year >= 2016)
panel$D_Covid <- [Link](panel$year %in% c(2020,2021))
panel$ESG_x_Ind <- panel$ESG * panel$D_Ind
panel$ESG_x_Paris <- panel$ESG * panel$D_PostParis

pdata <- [Link](panel, index=c('company','year'))


panel_ind <- subset(panel, Sector=='Industriel')
panel_svc <- subset(panel, Sector=='Services')
pdata_ind <- [Link](panel_ind, index=c('company','year'))
pdata_svc <- [Link](panel_svc, index=c('company','year'))
panel_lag <-
[Link](panel[,c('company','year','CoD','ESG_lag1','Size','Leverage','ROA')
])
panel_pil <- panel[![Link](panel$ESG_E),]

# 2. Estimations
M1 <- lm(CoD ~ ESG + Size + Leverage + ROA, data=panel)
M2 <- plm(CoD ~ ESG + Size + Leverage + ROA, data=pdata, model='within',
effect='individual')
M3 <- plm(CoD ~ ESG + Size + Leverage + ROA, data=pdata, model='within',
effect='twoways')
M4 <- lm(CoD ~ ESG_E + ESG_S + Size + Leverage + ROA, data=panel_pil)
M5 <- lm(CoD ~ ESG_lag1 + Size + Leverage + ROA, data=panel_lag)
M6 <- lm(CoD ~ ESG + D_Ind + ESG_x_Ind + Size + Leverage + ROA,
data=panel)
pdata$ESG_x_Ind <- pdata$ESG * pdata$D_Ind
M7 <- plm(CoD ~ ESG + ESG_x_Ind + Size + Leverage + ROA, data=pdata,
model='within', effect='individual')
pdata$ESG_x_Paris <- pdata$ESG * pdata$D_PostParis
M8 <- plm(CoD ~ ESG + D_PostParis + ESG_x_Paris + Size + Leverage + ROA,
data=pdata, model='within', effect='individual')
pdata$D_Covid <- [Link]([Link]([Link](index(pdata,'time')))
%in% c(2020,2021))
M9 <- plm(CoD ~ ESG + D_Covid + Size + Leverage + ROA, data=pdata,
model='within', effect='individual')
M10 <- lm(CoD ~ ESG + Size + Leverage + ROA, data=panel_ind)
M11 <- lm(CoD ~ ESG + Size + Leverage + ROA, data=panel_svc)
M12 <- plm(CoD ~ ESG + Size + Leverage + ROA, data=pdata_ind,
model='within', effect='individual')

Université de Bordeaux — Master Finance | Guide Économétrie | Page 26


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

M13 <- plm(CoD ~ ESG + Size + Leverage + ROA, data=pdata_svc,


model='within', effect='individual')
M14 <- lm(CoD ~ ESG_E + ESG_S + ESG_E*D_Ind + Size + Leverage + ROA,
data=panel_pil)

# 3. Tests
cat('\n=== HAUSMAN ===\n'); print(phtest(M2,
plm(CoD~ESG+Size+Leverage+ROA,data=pdata,model='random')))
cat('\n=== BREUSCH-PAGAN ===\n'); print(bptest(M1))
cat('\n=== VIF ===\n'); print(round(vif(M1),3))

# 4. Export
stargazer(M1,M2,M3,M10,M11, type='text', out='resultats_principaux.txt',
[Link]=c('Full OLS','Full FE','Full 2WFE','Ind OLS','Svc OLS'),
[Link]=c(0.10,0.05,0.01), digits=4)

cat('\n✅ Script terminé avec succès!\n')

✅ Résultat attendu : Copier-coller l'intégralité de ce script dans RStudio et appuyer sur Source
(Ctrl+Shift+S). Le fichier resultats_principaux.txt sera généré dans le répertoire de travail.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 27


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

15. Guide XLStat Complet — Menus Pas-à-Pas


Cette section décrit en détail tous les clics nécessaires dans XLStat pour reproduire chaque
analyse, sans écrire de code.

15.1 Stats descriptives complètes


1. Ouvrir l'onglet '6. Données Panel' du fichier Excel
2. Ruban XLStat → Describing data → Descriptive statistics
3. Champ 'Quantitative data' : sélectionner D2:J353 (CoD à ROA, 352 lignes)
4. Cocher dans la section Statistics : Mean, Median, Std. deviation, Min, Max, Skewness
(asymétrie), Kurtosis (aplatissement), Coeff. variation
5. Onglet 'Charts' : cocher Box plots → pour visualiser la distribution de chaque variable
6. Cliquer OK → nouvelle feuille 'Descriptive statistics'

15.2 Matrice de corrélations


1. XLStat → Describing data → Correlation matrix
2. Sélectionner D2:J353 (toutes variables quantitatives)
3. Type de corrélation : Pearson
4. Cocher : Significance test → bilatéral, niveau 5%
5. Cocher : Display p-values → cocher aussi 'Show significance stars'
6. Onglet 'Charts' : cocher Correlogram
7. OK → XLStat génère la matrice avec *, **, ***

15.3 Régression linéaire (M1 — MCO Poolé)


1. XLStat → Modeling data → Linear regression
2. Y / Response variable : sélectionner D2:D353 (colonne CoD, en-tête inclus)
3. X / Explanatory variables : sélectionner E2:E353;H2:J353 (ESG, Leverage, Size, ROA)
4. Cocher 'Variable labels' si l'en-tête est sélectionné
5. Onglet 'Validation' : cocher F-test, t-tests, Confidence intervals (95%), VIF
6. Onglet 'Residuals' : cocher Residuals vs fitted, Q-Q plot, Durbin-Watson
7. OK → résultats dans nouvelle feuille

💡 Note : Dans XLStat, le tableau de régression affiche : le coefficient, l'écart-type, la statistique t, la p-


value, et les intervalles de confiance à 95% pour chaque variable.

Université de Bordeaux — Master Finance | Guide Économétrie | Page 28


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

15.4 Régression sur sous-groupe sectoriel (M10/M11)


1. Filtrer les données : sélectionner colonne B (Sector) → Données → Filtrer → 'Industriel'
2. Copier les lignes filtrées (352 → 140 lignes) dans une nouvelle feuille 'Data_Industriel'
3. Répéter XLStat → Modeling data → Linear regression sur ces 140 lignes
4. Même procédure pour Services (212 lignes) dans 'Data_Services'
5. Comparer les tableaux R² : Services devrait afficher R²≈0.46 vs Industriel R²≈0.27

15.5 Test t de comparaison sectorielle


1. XLStat → Parametric tests → Two-sample t-test
2. Sample 1 : valeurs de CoD pour Industriel (colonne filtrée, 140 obs)
3. Sample 2 : valeurs de CoD pour Services (212 obs)
4. Alternative hypothesis : bilatéral (μ1 ≠ μ2)
5. Alpha = 0.05
6. Cocher : Levene test pour égalité des variances
7. OK → XLStat affiche t-stat, p-value et si différence significative
8. Répéter pour ESG, Leverage, ROA

15.6 Régression avec variable dummy et interaction (M6)


1. Ajouter dans Excel deux colonnes : D_Ind (déjà présent, col K) et ESG_x_Ind = col E × col
K
2. XLStat → Modeling data → Linear regression
3. Y : CoD (col D)
4. X : ESG, D_Ind, ESG_x_Ind, Size, Leverage, ROA (6 colonnes)
5. Ne pas cocher 'Qualitative variables' pour D_Ind (c'est déjà 0/1 numérique)
6. OK → le coefficient de ESG_x_Ind est le terme d'interaction

💡 Note : Dans M6, le coefficient ESG_x_Ind = 0.0004 (ns, p=0.77) indique que l'effet de l'ESG ne diffère
pas significativement entre secteurs.

15.7 Régression avec ESG décalé (M5)


1. Créer la colonne ESG_lag1 : pour chaque entreprise, décaler ESG d'une ligne vers le bas
2. Formule Excel dans la colonne ESG_lag1 (col L) : si l'entreprise en ligne n est la même
qu'en ligne n-1, alors ESG de ligne n-1, sinon vide
3. Exemple : =IF(A3=A2, E2, "") à partir de la ligne 3
4. Filtrer les lignes où ESG_lag1 n'est pas vide (317 observations)
5. Copier dans nouvelle feuille 'Data_Lag' et faire la régression OLS
6. Comparer avec M1 : le coefficient ESG_lag1 doit rester non-significatif

Université de Bordeaux — Master Finance | Guide Économétrie | Page 29


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

15.8 Vérification finale des résultats


Tableau de contrôle : comparer systématiquement les sorties XLStat avec les résultats du
tableau Excel onglet '2. Régressions Principales'.

Modèle R² XLStat attendu t(Levier) attendu p(ESG) attendu Cohérence


M1 OLS Full 0.3443 t = -9.74*** p > 0.10 (ns) ✅

M10 OLS Ind 0.2655 t = -6.65*** p > 0.10 (ns) ✅

M11 OLS Svc 0.4613 t = -7.92*** p > 0.10 (ns) ✅

M4 Piliers 0.2756 t = -2.85*** E: ns, S: ns ✅

M5 ESG Lag 0.3571 t = -9.19*** p > 0.10 (ns) ✅

⚠️Attention : Si vos R² ou coefficients diffèrent de plus de ±0.005 des valeurs attendues, vérifier : (1) le
filtrage des observations manquantes, (2) la winsorisation à 1%-99% sur CoD, (3) la présence des 352
observations nettes (ni plus, ni moins).

Université de Bordeaux — Master Finance | Guide Économétrie | Page 30


Guide de Réplication | R & XLStat | ESG & Coût de la dette CAC 40 | 2015–2024

16. Récapitulatif des 14 Modèles


Ce tableau récapitule les 14 modèles estimés avec leur équation, leur logiciel, et les résultats
attendus pour validation rapide.

M Spécification Fonction R N / R² β_ESG (p-val) Conclusion


ESG

M1 OLS Poolé baseline lm(CoD~ESG+...) 352 / 0.344 −0.000 (p=0.997) Non-sig.

M2 EF Individuel plm(model='withi 352 / 0.305 −0.000 (p=0.762) Non-sig.


(within) n')

M3 EF Double (two- plm(effect='twow 352 / 0.265 −0.000 (p=0.884) Non-sig.


way) ays')

M4 Piliers E et S lm(CoD~ESG_E+ESG 108 / 0.276 E:+0.006 (ns) Non-sig.


_S)

M5 ESG Lagué (t-1) lm(CoD~ESG_lag1) 317 / 0.357 0.001 (p=0.446) Non-sig.

M6 OLS+Interaction lm(ESG+D_Ind+ESG 352 / 0.345 −0.000 (p=0.851) Non-sig.


sect. ×Ind)

M7 EF+Interaction sect. plm(ESG+ESG_x_In 352 / 0.305 −0.000 (p=0.787) Non-sig.


d)

M8 EF+Accord de Paris plm(ESG+Paris+ES 352 / 0.310 −0.001 (p=0.473) Non-sig.


G×Par)

M9 EF+Covid dummy plm(ESG+D_Covid) 352 / 0.309 −0.000 (p=0.972) Non-sig.

M1 OLS Industriel seul lm() sur 140 / 0.266 0.001 (p=0.224) Non-sig.
0 panel_ind

M1 OLS Services seul lm() sur 212 / 0.461 0.001 (p=0.370) Non-sig.
1 panel_svc

M1 EF Industriel seul plm() sur 140 / 0.258 −0.003 (p=0.128) Non-sig.


2 pdata_ind

M1 EF Services seul plm() sur 212 / 0.398 −0.000 (p=0.948) Non-sig.


3 pdata_svc

M1 Piliers+Interaction lm(ESG_E+ESG_S+E 108 / 0.288 E:−0.001 (ns) Non-sig.


4 ×Ind)

💡 Note : Le levier financier est significatif à p<0.001 dans les 14 modèles. Le score ESG n'atteint jamais
le seuil de 10% de significativité. Ces résultats sont cohérents quel que soit le logiciel utilisé (R, XLStat,
Stata, Python).

Université de Bordeaux — Master Finance | Guide Économétrie | Page 31

Vous aimerez peut-être aussi