A linear regression model with factors affecting the impact of ESG indicators and ESG investor quotas on changes in company capitalization

set.seed(1976)

n <- 100

ESG     <- runif(n, 0, 1)              # индекс ESG/green branding [0;1]
Quota   <- runif(n, 0, 0.5)            # доля фондов с ESG-квотой
Size    <- rnorm(n, mean = 10, sd = 1) # лог(активов)
Leverage<- rnorm(n, mean = 0.5, sd = 0.1)


alpha   <- 0.0
b1      <- 0.5   #  ESG effect
b2      <- 0.8   # esg quota of funds
b3      <- 1.2   #ESG with a high quote
b4      <- 0.1
b5      <- -0.2
eps     <- rnorm(n, mean = 0, sd = 0.2)

# Change in capitalization (or profitability) as a function of factors
CapChange <- alpha +
  b1 * ESG +
  b2 * Quota +
  b3 * ESG * Quota +
  b4 * Size +
  b5 * Leverage +
  eps


df <- data.frame(CapChange, ESG, Quota, Size, Leverage)

model <- lm(CapChange ~ ESG * Quota + Size + Leverage, data = df)
summary(model)
## 
## Call:
## lm(formula = CapChange ~ ESG * Quota + Size + Leverage, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.39675 -0.14175 -0.01617  0.15826  0.47471 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.08176    0.24430   0.335 0.738610    
## ESG          0.44032    0.14709   2.994 0.003524 ** 
## Quota        0.94121    0.33796   2.785 0.006474 ** 
## Size         0.08653    0.02151   4.023 0.000116 ***
## Leverage    -0.10751    0.17606  -0.611 0.542912    
## ESG:Quota    0.95765    0.62841   1.524 0.130886    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1996 on 94 degrees of freedom
## Multiple R-squared:  0.6537, Adjusted R-squared:  0.6353 
## F-statistic: 35.49 on 5 and 94 DF,  p-value: < 2.2e-16
Quota_low  <- 0.05
Quota_high <- 0.4

ESG_grid <- seq(0, 1, length.out = 50)

# predict
Size_mean     <- mean(df$Size)
Leverage_mean <- mean(df$Leverage)

new_low <- data.frame(
  ESG      = ESG_grid,
  Quota    = Quota_low,
  Size     = Size_mean,
  Leverage = Leverage_mean
)

new_high <- data.frame(
  ESG      = ESG_grid,
  Quota    = Quota_high,
  Size     = Size_mean,
  Leverage = Leverage_mean
)

pred_low  <- predict(model, newdata = new_low)
pred_high <- predict(model, newdata = new_high)

Plot

#график
plot(ESG_grid, pred_low, type = "l", lwd = 3, col = "darkblue",
     xlab = "ESG(индекс зеленого бренда)",
     ylab = "Изменение капитализации ",
     main = "ESG-эффект при разной квоте фондов")
lines(ESG_grid, pred_high, lwd = 3, col ="darkgreen")
legend("topleft",
       legend = c("Низкая квота ESG-фондов", "Высокая квота ESG-фондов"),
       col    = c("darkblue", "darkgreen"),
       lwd    = 2, bty = "n")
plot of chunk unnamed-chunk-2