In recent years, there has been a growing recognition of the importance of Environmental, Social and Governance (ESG) factors in the business world. As corporations face increasing pressure to address issues related to sustainability, social responsibility and ethical governance.Understanding the impact of ESG policies on financial stability necessitates an exploration of multifaceted ways in which factors influence corporate behavior and performance. Hence this report will address the question that How do firms’ Environmental, Social and Governance (ESG) policies affecr their capacity to remain financially stable?
The data for ESG scores and the financial factors of companies was taken from FTSE Russell finance data publically posted on Github. These ratings offer perceptions on how a business handles and is exposed to environmental, social, and governance (ESG) concerns in a number of ways. Despite the fact that we may not consistently have the opportunity to view all the information we want, we can still learn a lot about how well firms are performing in terms of environmental sustainability by making use of the data that is already available, such as FTSE Russell’s ESG Scores.
Several important questions will be addressed by the data analysis:
The target audience for this analysis is Investors or Stakeholders of these companies. Nowaday, investors are increasingly considering environmental, social and governance aspects before making any investment.This report will hep investors to make more sustainable and educated investments. This report will delve into the relationship between farious financial key performer indicators and ESG practice by each company.
This analysis will focus on analyzing companies across various sectors, including:
These industries were selected because of their importance to the world economy and because they may have an effect on long-term financial viability. We can uncover patterns, best practices, and opportunities for development by analyzing ESG performance in various industries, which will eventually help investors make more environmentally friendly choices.
First, I will open both datasets, ESG_data and Finance_data, to understand their contents. I’ll take note of the variables present in each dataset and their respective data types. Then, I’ll identify any common identifiers that can be used to merge the datasets, such as company names or ticker symbols.
After understanding the structure of the datasets, I’ll load them into R Studio data analysis environment. Using appropriate functions or methods, I’ll merge the datasets based on the common identifiers in both the datasets.
I’ll check for missing values in the merged dataset and decide how to handle them. Depending on the extent of missing data, I’ll implement strategies like imputation or deletion to address them.
Next, I’ll search for any duplicate entries representing the same company within the dataset. I’ll come up with a plan to remove duplicates while ensuring that relevant information is retained.
As to measure the sustainable finance, I had chosen important industries from the data. Hence in the tidying process I will filter the above mentioned industries from the data to save in the new dataset.
To assess each company’s ESG performance, I’ll create a new variable to store the calculated ESG rating. This rating will be computed by averaging the environmental, social, and governance ratings provided in the dataset.
Finally, I’ll verify the formatting of variables to ensure consistency and accuracy. If necessary, I’ll rename variables and adjust labels for clarity. Once the dataset is cleaned and prepared, it will be ready for further analysis.
In this step, I read the ESG_data and Finance_data files using the readxl package.
library(readxl)
ESG_data <- read_excel("/Users/Shared/Rstudio Project/00_data_raw/ESG_data.xlsx")
Finance_data <- read_excel("/Users/Shared/Rstudio Project/00_data_raw/Finance_data.xlsx")
In this step first i look for the common identifies that I can use to merge both the datasets. Using name function I examined the variable names in both datasets. I found that there are there are four common variables in both the datasets including - Company Name, Industry, country and Ticker Symbol. I merged the ESG_data and Finance_data datasets using “Ticker symbols” as it is a unique identifier and correct variable to merge these datasets.
# Check the name of the varibles in the dataset
names(ESG_data)
## [1] "Company Name" "Industry" "Country" "Ticker Symbol"
## [5] "Enviornmental" "Social" "Governance"
names(Finance_data)
## [1] "Company Name" "Industry"
## [3] "Country" "Ticker Symbol"
## [5] "EPS" "Profit_Margin"
## [7] "Tobins_Q" "ROA"
## [9] "ROE" "Debt_To_Market_Cap_Ratio"
## [11] "Total_Asset_Turnover" "Price_to_Sales_Ratio"
# Merge the datasets
FS_data <- merge(ESG_data, Finance_data)
Next, in this step I looked for any missing values in the data. I found that the total of 66 observations are missing in total of 12 columns. As the information we have for these missing values is the company name and Industry, it is difficult to impute the missing values in the datasets. The no of observations missing is less than 1% of the sample size, I removed the observation with missing value from my dataset using na.omit function.
# Check for missing values in the entire dataset
missing_values <- sum(is.na(FS_data))
# Check for missing values in each column
missing_values_per_column <- colSums(is.na(FS_data))
# Print the total number of missing values
print(paste("Total missing values:", missing_values))
## [1] "Total missing values: 66"
# Print the number of missing values per column
print("Missing values per column:")
## [1] "Missing values per column:"
print(missing_values_per_column)
## Company Name Industry Country
## 0 0 5
## Ticker Symbol Enviornmental Social
## 6 5 5
## Governance EPS Profit_Margin
## 5 5 5
## Tobins_Q ROA ROE
## 5 5 5
## Debt_To_Market_Cap_Ratio Total_Asset_Turnover Price_to_Sales_Ratio
## 5 5 5
# Remove missing values from the data
FS_data1 <- na.omit(FS_data)
##if Step 4: Removing Duplicate Data
In this step I have examined if there are any duplicate company data we have in the dataset. For this I used duplictaed function to check for any duplicate company names in the dataset. I found that about 18 companies has duplicated data present in my dataset. Now after identifying these duplicates observations, I removed these duplicate entries using duplicated function.
# Check for duplicated rows in the entire dataset
duplicated_rows <- FS_data[duplicated(FS_data$`Company Name`), ]
# Print the duplicated rows
print("Duplicated rows:")
## [1] "Duplicated rows:"
print(duplicated_rows$`Company Name`)
## [1] "AP Moller - Maersk A/S" "Atlas Copco AB"
## [3] "Bayerische Motoren Werke AG" "CNP Assurances"
## [5] "FUCHS PETROLUB SE" "Henkel AG & Co KGaA"
## [7] "Liberty Global PLC" "Liberty Media Corp-Liberty SiriusXM"
## [9] "News Corp" "Roche Holding AG"
## [11] "Royal Dutch Shell PLC" "RWE AG"
## [13] "Schibsted ASA" "Schindler Holding AG"
## [15] "Skandinaviska Enskilda Banken AB" "Svenska Handelsbanken AB"
## [17] "Twenty-First Century Fox Inc" "Volkswagen AG"
# Count the number of duplicated rows
num_duplicated <- sum(duplicated(FS_data$`Company Name`))
print(paste("Total duplicated rows:", num_duplicated))
## [1] "Total duplicated rows: 18"
# Remove duplicate values from the data
FS_subset <- FS_data1[!duplicated(FS_data1[c('Company Name')]), ]
Based on my research objectives, I filtered the dataset to include only companies belonging to Financial Services, Utilities, Food, Healthcare, Real Estate, Technology, Transportation and Telecommunications specific industries.
# Filtering data using specific industries for further analysis
Final_data <- FS_subset[FS_subset$Industry %in% c('Financial Services', 'Utilities', 'Food', 'Healthcare', 'Real Estate', 'Technology', 'Transportation and Telecommunication'), ]
Now the important variable for this analysis and the dependent variable of the study is ESG score for each company. I calculated the ESG score by Taking average of environmental, social, and governance ratings of companies in the data. I used mutate function from dplyr package to create a new variable by taking average of the existing variables.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Taking average to create ESG score variable
Final_data <- Final_data %>% rowwise() %>% mutate(ESG = mean(c(Enviornmental,Social,Governance)))
The process for tidying the dataset has been completed using the above all steps. Now before saving the data as our final data, I did some exploratory data analysis to make sure my dataset is properly cleaned to use for analysis. The ESG variable follows normal distribution but the independent variables follows non-normal distribution. This can be because of difference in company size, turnover etc. Thus in order to use these variable in the analysis, I took logarithm of some of the independent variables.
# Histogram for ESG
hist(Final_data$ESG, main = "Histogram of ESG", xlab = "ESG")
# Histograms for independent variables
par(mfrow = c(2, 4)) # Arrange plots in a 2x4 grid
hist(Final_data$Profit_Margin, main = "Histogram of Profit Margin", xlab = "Profit Margin")
hist(Final_data$Tobins_Q, main = "Histogram of Tobin's Q", xlab = "Tobin's Q")
hist(Final_data$ROA, main = "Histogram of ROA", xlab = "ROA")
hist(Final_data$ROE, main = "Histogram of ROE", xlab = "ROE")
hist(Final_data$Debt_To_Market_Cap_Ratio, main = "Histogram of Debt To Market Cap Ratio", xlab = "Debt To Market Cap Ratio")
hist(Final_data$Total_Asset_Turnover, main = "Histogram of Total Asset Turnover", xlab = "Total Asset Turnover")
hist(Final_data$Price_to_Sales_Ratio, main = "Histogram of Price to Sales Ratio", xlab = "Price to Sales Ratio")
Final_data$logProfit_Margin <- log(Final_data$Profit_Margin)
Final_data$logTobins_Q <- log(Final_data$Tobins_Q)
Final_data$logDebt_To_Market_Cap_Ratio <- log(Final_data$Debt_To_Market_Cap_Ratio)
Final_data$logTotal_Asset_Turnover <- log(Final_data$Total_Asset_Turnover)
Final_data$logPrice_to_Sales_Ratio <- log(Final_data$Price_to_Sales_Ratio)
Now the data is cleaned and ready to use for analysis and I stored the data using csv format in the specified folder.
library(readr)
# Save data in csv file
write_csv(Final_data,"/Users/Shared/Rstudio Project/03_data_processed/Final_data.csv")