library("readxl")
library(tidyverse)
library("Hmisc")
library(corrplot)
library(car)
library(psych)
library(broom)
library(sandwich)
library(xtable)
library(lmtest)
library(stargazer)
library(xtable)
library(margins)
spark.1709 <- read_excel("/Users/nikolajdolgih/Desktop/Эконометрика/Проект/SPARK_1709.xlsx")
spark.1714 <- read_excel("/Users/nikolajdolgih/Desktop/Эконометрика/Проект/SPARK_1714.xlsx")
spark.1554 <- read_excel("/Users/nikolajdolgih/Desktop/Эконометрика/Проект/SPARK_1554.xlsx")
spark.1548 <- read_excel("/Users/nikolajdolgih/Desktop/Эконометрика/Проект/SPARK_1548.xlsx")
spark.1541 <- read_excel("/Users/nikolajdolgih/Desktop/Эконометрика/Проект/SPARK_1541.xlsx")
#
spark.1709 = spark.1709[2:3698,]
colnames(spark.1709) = as.character(as.vector(spark.1709[1,]))
spark.1709 = spark.1709[2:3697,]
#
spark.1714 = spark.1714[2:3698,]
colnames(spark.1714) = as.character(as.vector(spark.1714[1,]))
spark.1714 = spark.1714[2:3697,]
#
spark.1554 = spark.1554[2:3698,]
colnames(spark.1554) = as.character(as.vector(spark.1554[1,]))
spark.1554 = spark.1554[2:3697,]
#
spark.1548 = spark.1548[2:3698,]
colnames(spark.1548) = as.character(as.vector(spark.1548[1,]))
spark.1548 = spark.1548[2:3697,]
#
spark.1541 = spark.1541[2:3718,]
colnames(spark.1541) = as.character(as.vector(spark.1541[1,]))
spark.1541 = spark.1541[2:3717,]
#
colnames(spark.1714)[1:2] = c("a", "b")
colnames(spark.1714)[4:5] = c("c", "d")
spark.1714 = spark.1714 %>% select(-a, -b, -c, -d)
#
colnames(spark.1554)[1:2] = c("a", "b")
colnames(spark.1554)[4:5] = c("c", "d")
spark.1554 = spark.1554 %>% select(-a, -b, -c, -d)
#
colnames(spark.1548)[1:2] = c("a", "b")
colnames(spark.1548)[4:5] = c("c", "d")
spark.1548 = spark.1548 %>% select(-a, -b, -c, -d)
#
colnames(spark.1541)[1:2] = c("a", "b")
colnames(spark.1541)[5] = c("c")
colnames(spark.1541)[7] = c("d")
spark.1541 = spark.1541 %>% select(-a, -b, -c, -d)
#
Spark = inner_join(spark.1709, spark.1714, by="Регистрационный номер")
Spark = inner_join(Spark, spark.1554, by="Регистрационный номер")
Spark = inner_join(Spark, spark.1548, by="Регистрационный номер")
Spark = inner_join(Spark, spark.1541, by="Регистрационный номер")
Spark = Spark %>% select("2020, Рентабельность активов (ROA), %", "2020, Уставный капитал , RUB", "2020, Основные средства , RUB" , "Возраст компании, лет", "Размер компании", "2020, Среднесписочная численность работников", "2020, Коэффициент текущей ликвидности, %", "2020, Коэффициент соотношения заемных и собственных средств, %", "2020, Доля краткосрочной в общем объеме задолженности, %")
colnames(Spark) = c("ROA", "Capital", "Pr.means", "Age", "Size", "Avg.empl", "C.R", "KSIZ", "Short.debt")
Spark$ROA = as.numeric(Spark$ROA)
Spark$Capital = as.numeric(Spark$Capital)
Spark$Pr.means = as.numeric(Spark$Pr.means)
Spark$Age = as.numeric(Spark$Age)
Spark$Avg.empl[Spark$Avg.empl == "1 034"] = "1034"
Spark$Avg.empl[Spark$Avg.empl == "1 892"] = "1892"
Spark$Avg.empl = as.numeric(Spark$Avg.empl)
Spark$C.R = as.numeric(Spark$C.R)
Spark$KSIZ = as.numeric(Spark$KSIZ)
Spark$Short.debt = as.numeric(Spark$Short.debt)
Spark$Capital.log = log(Spark$Capital)
Spark$Pr.means.log = log(Spark$Pr.means)
Spark$Avg.empl.log = log(Spark$Avg.empl)
Number = Spark %>% group_by(Size) %>% summarise(number = n())
Number
## # A tibble: 4 × 2
##   Size                number
##   <chr>                <int>
## 1 Крупные предприятия      3
## 2 Малые предприятия      139
## 3 Микропредприятия      3546
## 4 Средние предприятия      8
Spark = Spark %>% filter(Size != "Крупные предприятия")
Spark$Size = as.factor(Spark$Size)
# Shapiro-Wilk normality test for ROA
shapiro.test(Spark$ROA) # => p < 2.2e-16
# Shapiro-Wilk normality test for Capital.log
shapiro.test(Spark$Capital.log) # => p < 2.2e-16
# Shapiro-Wilk normality test for Pr.means
shapiro.test(Spark$Pr.means.log) # => p = 0.005059
# Shapiro-Wilk normality test for Age
shapiro.test(Spark$Age) # => p = 3.494e-09
# Shapiro-Wilk normality test for Avg.empl
shapiro.test(Spark$Avg.empl.log) # => p < 2.2e-16
# Shapiro-Wilk normality test for C.R
shapiro.test(Spark$C.R) # => p < 2.2e-16
# Shapiro-Wilk normality test for KSIZ
shapiro.test(Spark$KSIZ) # => p < 2.2e-16
# Shapiro-Wilk normality test for Short.debt
shapiro.test(Spark$Short.debt) # => p < 2.2e-16

Развед анализ

SparkROA = Spark %>% filter(ROA<(quantile(Spark$ROA, 0.75)+1.5*(quantile(Spark$ROA, 0.75) - quantile(Spark$ROA, 0.25))))
ggplot(data = SparkROA, aes(x = Size, y = ROA, color = Size))+
scale_color_manual(values=c("#76D6FF", "#3A3BFF","#191970"), breaks=c("Микропредприятия", "Малые предприятия", "Средние предприятия"), labels=c("Микропредприятия", "Малые предприятия", "Средние предприятия"))+
geom_boxplot()+
labs(title = "Диаграмма распределения ROA для каждого Size")+
labs(color = "Размер")+
xlab("Размер фирмы") + 
ylab("ROA") +
xlim("Микропредприятия", "Малые предприятия", "Средние предприятия")+
theme_minimal()+
theme(axis.text.x = element_text(angle = 30, hjust= 1))

ggplot(data = SparkROA, aes(x = Capital.log, y = ROA))+
geom_point(color = "#191970")+
geom_smooth(method = "lm",color = "#76D6FF", formula = y ~ poly(x, degree = 1))+
xlab("Уставный капитал, руб. (логарифмическая шкала)") + 
ylab("ROA") +
theme_linedraw()

res <-cor.test(SparkROA$ROA, SparkROA$Capital.log,  method = "kendall")
res
## 
##  Kendall's rank correlation tau
## 
## data:  SparkROA$ROA and SparkROA$Capital.log
## z = -5.8942, p-value = 3.764e-09
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##        tau 
## -0.1232796
ggplot(data = SparkROA, aes(x = Pr.means.log, y = ROA))+
geom_point(color = "#191970")+
geom_smooth(method = "lm",color = "#76D6FF", formula = y ~ poly(x, degree = 1))+
xlab("Основные средства, руб. (логарифмическая шкала)") + 
ylab("ROA") +
theme_linedraw()

res <-cor.test(SparkROA$ROA, SparkROA$Pr.means.log,  method = "kendall")
res
## 
##  Kendall's rank correlation tau
## 
## data:  SparkROA$ROA and SparkROA$Pr.means.log
## z = -11.874, p-value < 2.2e-16
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##        tau 
## -0.1784444
ggplot(data = SparkROA, aes(x = Avg.empl.log, y = ROA))+
geom_point(color = "#191970")+
geom_smooth(method = "lm",color = "#76D6FF", formula = y ~ poly(x, degree = 1))+
xlab("Среднесписочная численность работников, чел. (логарифмическая шкала)") + 
ylab("ROA") +
theme_linedraw()

res <-cor.test(SparkROA$ROA, SparkROA$Avg.empl.log,  method = "kendall")
res
## 
##  Kendall's rank correlation tau
## 
## data:  SparkROA$ROA and SparkROA$Avg.empl.log
## z = -3.4778, p-value = 0.0005055
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##         tau 
## -0.04398283
ggplot(data = SparkROA, aes(x = Age, y = ROA))+
geom_point(color = "#191970")+
geom_smooth(method = "lm",color = "#76D6FF", formula = y ~ poly(x, degree = 1))+
xlab("Возраст компании, лет.") + 
ylab("ROA") +
theme_linedraw()

res <-cor.test(SparkROA$ROA, SparkROA$Age,  method = "kendall")
res
## 
##  Kendall's rank correlation tau
## 
## data:  SparkROA$ROA and SparkROA$Age
## z = -12.689, p-value < 2.2e-16
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##        tau 
## -0.1481319
SparkROAKSIZ = SparkROA %>% filter(KSIZ<(quantile(na.omit(Spark$KSIZ), 0.75)+1.5*(quantile(na.omit(Spark$KSIZ), 0.75) - quantile(na.omit(Spark$KSIZ), 0.25))))
ggplot(data = SparkROAKSIZ, aes(x = KSIZ, y = ROA))+
geom_point(color = "#191970")+
geom_smooth(method = "lm",color = "#76D6FF", formula = y ~ poly(x, degree = 1))+
xlab("Коэффициент соотношения заемных и собственных средств") + 
ylab("ROA") +
theme_linedraw()

res <-cor.test(SparkROAKSIZ$ROA, SparkROAKSIZ$KSIZ,  method = "kendall")
res
## 
##  Kendall's rank correlation tau
## 
## data:  SparkROAKSIZ$ROA and SparkROAKSIZ$KSIZ
## z = -2.0854, p-value = 0.03703
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##         tau 
## -0.02636141
SparkROAC.R = SparkROA %>% filter(C.R<(quantile(Spark$C.R, 0.75)+1.5*(quantile(Spark$C.R, 0.75) - quantile(Spark$C.R, 0.25))))
ggplot(data = SparkROAC.R, aes(x = C.R, y = ROA))+
geom_point(color = "#191970")+
geom_smooth(method = "lm",color = "#76D6FF", formula = y ~ poly(x, degree = 1))+
xlab("Коэффициент текущей ликвидности") + 
ylab("ROA") +
theme_linedraw()

res <-cor.test(SparkROAC.R$ROA, SparkROAC.R$C.R,  method = "kendall")
res
## 
##  Kendall's rank correlation tau
## 
## data:  SparkROAC.R$ROA and SparkROAC.R$C.R
## z = 12.472, p-value < 2.2e-16
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##       tau 
## 0.1539384
SparkROAShort.debt = SparkROA %>% filter(Short.debt>=0 & Short.debt<=1)
ggplot(data = SparkROAShort.debt, aes(x = Short.debt, y = ROA))+
geom_point(color = "#191970")+
geom_smooth(method = "lm",color = "#76D6FF", formula = y ~ poly(x, degree = 1))+
xlab("Доля краткосрочной в объеме задолженности") + 
ylab("ROA") +
theme_linedraw()

res <-cor.test(SparkROAShort.debt$ROA, SparkROAShort.debt$Short.debt,  method = "kendall")
res
## 
##  Kendall's rank correlation tau
## 
## data:  SparkROAShort.debt$ROA and SparkROAShort.debt$Short.debt
## z = 6.7522, p-value = 1.457e-11
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##       tau 
## 0.1343579
Spark = Spark %>% filter(
  ROA<(quantile(Spark$ROA, 0.75)+1.5*(quantile(Spark$ROA, 0.75) - quantile(Spark$ROA, 0.25))) & 
  KSIZ<(quantile(na.omit(Spark$KSIZ), 0.75)+1.5*(quantile(na.omit(Spark$KSIZ), 0.75) - quantile(na.omit(Spark$KSIZ), 0.25))) & 
  C.R<(quantile(Spark$C.R, 0.75)+1.5*(quantile(Spark$C.R, 0.75) - quantile(Spark$C.R, 0.25))) & 
  Short.debt>=0 & Short.debt<=1)
Spark = Spark %>% na.omit()
res<-rcorr(as.matrix(Spark %>% select(-ROA, -Age, -Capital, -Pr.means, -Avg.empl, -Size)), type = "spearman")
diag(res$P)=0
col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
corrplot(res$r, method="color", col=col(200),  
         type="upper", order="hclust", 
         addCoef.col = "black", # Add coefficient of correlation
         tl.col="black", tl.srt=45, #Text label color and rotation
         # Combine with significance
         p.mat = res$P, sig.level = 0.05, 
         # hide correlation coefficient on the principal diagonal
         diag=FALSE 
         )

number <- function(x, na.rm = TRUE){return(sum(!is.na(x)))}

theme_set(theme_light(base_size = 12))
Spark_stat <- Spark %>%
  select(-Size, -Capital, -Pr.means, -Avg.empl) %>%
  summarise(across(everything(), 
                   list(n = number, min = min, max = max, mean = mean, median = median, sd = sd), 
                   na.rm = TRUE)) %>% 
  pivot_longer(everything(), names_to = "name", values_to = "value") %>% 
  separate(name, c("variable", "statistic"), sep = "_") %>%
  pivot_wider(names_from = statistic, values_from = value) %>%
  arrange(variable) %>% 
  select(variable, n, min, max, mean, median, sd)
Spark_stat$variable = c("Возраст (Age)", "Среднесписочная численность работников (Avg.empl.log)", "Коэффициент текущей ликвидности (C.R)", "Уставный капитал (Capital.log)","Коэффициент соотношения заемных и собственных средств (KSIZ)", "Основные средства (Pr.means.log)", "Рентабельность активов (ROA)", "Доля краткосрочной в объеме задолженности (Short.debt)")
colnames(Spark_stat) = c("Переменная", "Наблюдения", "Min", "Max","Среднее", "Медиана", "Стандартное отклонение")
Spark_stat %>% xtable()
## % latex table generated in R 4.0.3 by xtable 1.8-4 package
## % Wed Dec  8 04:19:56 2021
## \begin{table}[ht]
## \centering
## \begin{tabular}{rlrrrrrr}
##   \hline
##  & Переменная & Наблюдения & Min & Max & Среднее & Медиана & Стандартное отклонение \\ 
##   \hline
## 1 & Возраст (Age) & 284.00 & 1.00 & 31.00 & 15.93 & 15.50 & 8.03 \\ 
##   2 & Среднесписочная численность работников (Avg.empl.log) & 284.00 & 0.00 & 7.55 & 2.83 & 2.94 & 1.39 \\ 
##   3 & Коэффициент текущей ликвидности (C.R) & 284.00 & 0.00 & 17.48 & 3.07 & 1.91 & 3.25 \\ 
##   4 & Уставный капитал (Capital.log) & 284.00 & 7.60 & 21.05 & 12.06 & 9.90 & 3.55 \\ 
##   5 & Коэффициент соотношения заемных и собственных средств (KSIZ) & 284.00 & 0.03 & 6.18 & 1.24 & 0.62 & 1.43 \\ 
##   6 & Основные средства (Pr.means.log) & 284.00 & 8.70 & 21.45 & 15.95 & 16.20 & 2.59 \\ 
##   7 & Рентабельность активов (ROA) & 284.00 & 0.00 & 0.89 & 0.14 & 0.07 & 0.17 \\ 
##   8 & Доля краткосрочной в объеме задолженности (Short.debt) & 284.00 & 0.00 & 1.00 & 0.70 & 1.00 & 0.39 \\ 
##    \hline
## \end{tabular}
## \end{table}

Регрессионный анализ

# оценка МНК, функция lm()
M1 <- lm(ROA ~ 1 + Capital.log + Age + C.R + KSIZ + Short.debt, data=Spark)
# оценка стандартных ошибок,
# робастная формула
cov_M1 <- vcovHC(M1, type = "HC0")
se_M1 <- sqrt(diag(cov_M1))
coeftest(M1, df = Inf, vcov. = vcovHC, type = "HC0")
## 
## z test of coefficients:
## 
##                Estimate  Std. Error z value  Pr(>|z|)    
## (Intercept)  2.0694e-01  3.9306e-02  5.2647 1.404e-07 ***
## Capital.log -4.5231e-03  2.5328e-03 -1.7858  0.074134 .  
## Age         -3.3616e-03  1.2299e-03 -2.7334  0.006269 ** 
## C.R         -7.1559e-05  3.2328e-03 -0.0221  0.982340    
## KSIZ        -5.4868e-03  6.0160e-03 -0.9120  0.361751    
## Short.debt   6.1882e-02  2.3821e-02  2.5978  0.009383 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# оценка МНК, функция lm()
M2 <- lm(ROA ~ 1 + Pr.means.log + Age + C.R + KSIZ + Short.debt, data=Spark)
# оценка стандартных ошибок,
# робастная формула
cov_M2 <- vcovHC(M2, type = "HC0")
se_M2 <- sqrt(diag(cov_M2))
coeftest(M2, df = Inf, vcov. = vcovHC, type = "HC0")
## 
## z test of coefficients:
## 
##                Estimate Std. Error z value  Pr(>|z|)    
## (Intercept)   0.4983628  0.0819435  6.0818 1.188e-09 ***
## Pr.means.log -0.0209016  0.0044799 -4.6656 3.077e-06 ***
## Age          -0.0016805  0.0012170 -1.3808    0.1673    
## C.R          -0.0033733  0.0030693 -1.0990    0.2718    
## KSIZ         -0.0089943  0.0059455 -1.5128    0.1303    
## Short.debt    0.0264481  0.0234220  1.1292    0.2588    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# оценка МНК, функция lm()
M3 <- lm(ROA ~ 1 + Avg.empl.log + Age + C.R + KSIZ + Short.debt, data=Spark)
# оценка стандартных ошибок,
# робастная формула
cov_M3 <- vcovHC(M3, type = "HC0")
se_M3 <- sqrt(diag(cov_M3))
coeftest(M3, df = Inf, vcov. = vcovHC, type = "HC0")
## 
## z test of coefficients:
## 
##                 Estimate  Std. Error z value  Pr(>|z|)    
## (Intercept)   0.15274229  0.03445263  4.4334 9.276e-06 ***
## Avg.empl.log  0.00090198  0.00646269  0.1396  0.889002    
## Age          -0.00383495  0.00125700 -3.0509  0.002282 ** 
## C.R           0.00018341  0.00330040  0.0556  0.955684    
## KSIZ         -0.00441389  0.00625778 -0.7053  0.480596    
## Short.debt    0.06544583  0.02421371  2.7028  0.006875 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# оценка МНК, функция lm()
M4 <- lm(ROA ~ 1 + Size + Age + C.R + KSIZ + Short.debt, data=Spark)
# оценка стандартных ошибок,
# робастная формула
cov_M4 <- vcovHC(M4, type = "HC0")
se_M4 <- sqrt(diag(cov_M4))
coeftest(M4, df = Inf, vcov. = vcovHC, type = "HC0")
## 
## z test of coefficients:
## 
##                            Estimate  Std. Error z value  Pr(>|z|)    
## (Intercept)              0.15847413  0.03778160  4.1945 2.735e-05 ***
## SizeМикропредприятия    -0.00328729  0.02447510 -0.1343  0.893156    
## SizeСредние предприятия  0.03578362  0.03692421  0.9691  0.332490    
## Age                     -0.00380106  0.00124824 -3.0451  0.002326 ** 
## C.R                      0.00011616  0.00335552  0.0346  0.972386    
## KSIZ                    -0.00480039  0.00625919 -0.7669  0.443120    
## Short.debt               0.06472441  0.02453205  2.6384  0.008331 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
stargazer(M1, M2, M3, M4, 
          se = list(se_M1, se_M2, se_M3, se_M4), 
          title = "Regression results",
          keep.stat = "n",
          notes = "Robust standard errors in parentheses",
          type = 'latex',  keep = c("Capital.log", "Pr.means.log", "Avg.empl.log", "SizeМикропредприятия", "SizeСредние предприятия"))
## 
## % Table created by stargazer v.5.2.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
## % Date and time: ср, дек 08, 2021 - 04:19:56
## \begin{table}[!htbp] \centering 
##   \caption{Regression results} 
##   \label{} 
## \begin{tabular}{@{\extracolsep{5pt}}lcccc} 
## \\[-1.8ex]\hline 
## \hline \\[-1.8ex] 
##  & \multicolumn{4}{c}{\textit{Dependent variable:}} \\ 
## \cline{2-5} 
## \\[-1.8ex] & \multicolumn{4}{c}{ROA} \\ 
## \\[-1.8ex] & (1) & (2) & (3) & (4)\\ 
## \hline \\[-1.8ex] 
##  Capital.log & $-$0.005$^{*}$ &  &  &  \\ 
##   & (0.003) &  &  &  \\ 
##   & & & & \\ 
##  Pr.means.log &  & $-$0.021$^{***}$ &  &  \\ 
##   &  & (0.004) &  &  \\ 
##   & & & & \\ 
##  Avg.empl.log &  &  & 0.001 &  \\ 
##   &  &  & (0.006) &  \\ 
##   & & & & \\ 
##  SizeМикропредприятия &  &  &  & $-$0.003 \\ 
##   &  &  &  & (0.024) \\ 
##   & & & & \\ 
##  SizeСредние предприятия &  &  &  & 0.036 \\ 
##   &  &  &  & (0.037) \\ 
##   & & & & \\ 
## \hline \\[-1.8ex] 
## Observations & 284 & 284 & 284 & 284 \\ 
## \hline 
## \hline \\[-1.8ex] 
## \textit{Note:}  & \multicolumn{4}{r}{$^{*}$p$<$0.1; $^{**}$p$<$0.05; $^{***}$p$<$0.01} \\ 
##  & \multicolumn{4}{r}{Robust standard errors in parentheses} \\ 
## \end{tabular} 
## \end{table}
t1 <- abs(coef(M1)["Capital.log"]/se_M1[2])
Pv1 <- 1-pnorm(t1) #односторонняя
cat("p-value:", Pv1)
## p-value: 0.03706721
t2 <- abs(coef(M2)["Pr.means.log"]/se_M2[2])
Pv2 <- 1-pnorm(t2) #односторонняя
cat("p-value:", Pv2)
## p-value: 1.53859e-06
t3 <- abs(coef(M3)["Avg.empl.log"]/se_M3[2])
Pv3 <- 1-pnorm(t3) #односторонняя
cat("p-value:", Pv3)
## p-value: 0.4445012
car::linearHypothesis(M4, c("SizeМикропредприятия = 0", "SizeСредние предприятия = 0"), test = "Chisq", white.adjust = "hc0")
## Linear hypothesis test
## 
## Hypothesis:
## SizeМикропредприятия = 0
## SizeСредние предприятия = 0
## 
## Model 1: restricted model
## Model 2: ROA ~ 1 + Size + Age + C.R + KSIZ + Short.debt
## 
## Note: Coefficient covariance matrix supplied.
## 
##   Res.Df Df  Chisq Pr(>Chisq)
## 1    279                     
## 2    277  2 1.6287     0.4429
# оценка МНК, функция lm()
M_1 <- lm(ROA ~ 1 + Capital.log + Size + Age + Capital.log*Age + Size*Age + KSIZ + Short.debt + KSIZ*Short.debt, data=Spark)
# оценка стандартных ошибок,
# робастная формула
cov_M_1 <- vcovHC(M_1, type = "HC0")
se_M_1 <- sqrt(diag(cov_M_1))
coeftest(M_1, df = Inf, vcov. = vcovHC, type = "HC0")
## 
## z test of coefficients:
## 
##                                Estimate  Std. Error z value  Pr(>|z|)    
## (Intercept)                  3.7959e-01  1.1315e-01  3.3547 0.0007944 ***
## Capital.log                 -1.9070e-02  6.1733e-03 -3.0891 0.0020077 ** 
## SizeМикропредприятия         1.4466e-02  6.1563e-02  0.2350 0.8142257    
## SizeСредние предприятия      4.6670e-02  6.2177e-02  0.7506 0.4528887    
## Age                         -1.1105e-02  5.8217e-03 -1.9075 0.0564547 .  
## KSIZ                        -2.1154e-02  9.6876e-03 -2.1836 0.0289923 *  
## Short.debt                   3.7694e-02  3.6279e-02  1.0390 0.2988118    
## Capital.log:Age              8.1312e-04  3.4034e-04  2.3891 0.0168887 *  
## SizeМикропредприятия:Age    -1.9380e-03  3.0439e-03 -0.6367 0.5243357    
## SizeСредние предприятия:Age -5.6689e-05  4.1610e-03 -0.0136 0.9891301    
## KSIZ:Short.debt              1.8278e-02  1.4625e-02  1.2498 0.2113657    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# оценка МНК, функция lm()
M_2 <- lm(ROA ~ 1 + Pr.means.log + Size + Age + Pr.means.log*Age + Size*Age + KSIZ + Short.debt + KSIZ*Short.debt, data=Spark)
# оценка стандартных ошибок,
# робастная формула
cov_M_2 <- vcovHC(M_2, type = "HC0")
se_M_2 <- sqrt(diag(cov_M_2))
coeftest(M_2, df = Inf, vcov. = vcovHC, type = "HC0")
## 
## z test of coefficients:
## 
##                                Estimate  Std. Error z value  Pr(>|z|)    
## (Intercept)                  0.71565988  0.17100561  4.1850 2.852e-05 ***
## Pr.means.log                -0.03468622  0.00891277 -3.8917 9.953e-05 ***
## SizeМикропредприятия        -0.00870701  0.05390388 -0.1615   0.87168    
## SizeСредние предприятия      0.05799541  0.05477118  1.0589   0.28966    
## Age                         -0.01278480  0.01045332 -1.2230   0.22132    
## KSIZ                        -0.02068897  0.00901016 -2.2962   0.02167 *  
## Short.debt                   0.01455712  0.03439578  0.4232   0.67213    
## Pr.means.log:Age             0.00084464  0.00055502  1.5218   0.12805    
## SizeМикропредприятия:Age    -0.00252774  0.00284689 -0.8879   0.37460    
## SizeСредние предприятия:Age  0.00218576  0.00363640  0.6011   0.54779    
## KSIZ:Short.debt              0.01559137  0.01319236  1.1818   0.23727    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# оценка МНК, функция lm()
M_3 <- lm(ROA ~ 1 + Avg.empl.log + Size + Age + Avg.empl.log*Age + Size*Age + KSIZ + Short.debt + KSIZ*Short.debt, data=Spark)
# оценка стандартных ошибок,
# робастная формула
cov_M_3 <- vcovHC(M_3, type = "HC0")
se_M_3 <- sqrt(diag(cov_M_3))
coeftest(M_3, df = Inf, vcov. = vcovHC, type = "HC0")
## 
## z test of coefficients:
## 
##                                Estimate  Std. Error z value Pr(>|z|)  
## (Intercept)                  0.06687450  0.09743783  0.6863  0.49251  
## Avg.empl.log                 0.01325030  0.01839607  0.7203  0.47135  
## SizeМикропредприятия         0.08464270  0.07265692  1.1650  0.24403  
## SizeСредние предприятия     -0.01219801  0.08039484 -0.1517  0.87940  
## Age                          0.00319760  0.00507173  0.6305  0.52838  
## KSIZ                        -0.01942983  0.00964899 -2.0137  0.04404 *
## Short.debt                   0.03683877  0.03715222  0.9916  0.32141  
## Avg.empl.log:Age            -0.00081267  0.00097208 -0.8360  0.40315  
## SizeМикропредприятия:Age    -0.00542919  0.00349182 -1.5548  0.11999  
## SizeСредние предприятия:Age  0.00641840  0.00494213  1.2987  0.19404  
## KSIZ:Short.debt              0.02152804  0.01493940  1.4410  0.14958  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
stargazer(M_1, M_2, M_3, 
          se = list(se_M_1, se_M_2, se_M_3), 
          title = "Regression results",
          keep.stat = "n",
          notes = "Robust standard errors in parentheses",
          type = 'latex',  keep = c("Capital.log","Capital.log:Age","Pr.means.log","Pr.means.log:Age", "Avg.empl.log", "Avg.empl.log:Age","SizeМикропредприятия", "SizeМикропредприятия:Age" ,"SizeСредние предприятия","SizeСредние предприятия:Age"))
## 
## % Table created by stargazer v.5.2.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
## % Date and time: ср, дек 08, 2021 - 04:19:56
## \begin{table}[!htbp] \centering 
##   \caption{Regression results} 
##   \label{} 
## \begin{tabular}{@{\extracolsep{5pt}}lccc} 
## \\[-1.8ex]\hline 
## \hline \\[-1.8ex] 
##  & \multicolumn{3}{c}{\textit{Dependent variable:}} \\ 
## \cline{2-4} 
## \\[-1.8ex] & \multicolumn{3}{c}{ROA} \\ 
## \\[-1.8ex] & (1) & (2) & (3)\\ 
## \hline \\[-1.8ex] 
##  Capital.log & $-$0.019$^{***}$ &  &  \\ 
##   & (0.006) &  &  \\ 
##   & & & \\ 
##  Pr.means.log &  & $-$0.035$^{***}$ &  \\ 
##   &  & (0.009) &  \\ 
##   & & & \\ 
##  Avg.empl.log &  &  & 0.013 \\ 
##   &  &  & (0.018) \\ 
##   & & & \\ 
##  SizeМикропредприятия & 0.014 & $-$0.009 & 0.085 \\ 
##   & (0.062) & (0.054) & (0.073) \\ 
##   & & & \\ 
##  SizeСредние предприятия & 0.047 & 0.058 & $-$0.012 \\ 
##   & (0.062) & (0.055) & (0.080) \\ 
##   & & & \\ 
##  Capital.log:Age & 0.001$^{**}$ &  &  \\ 
##   & (0.0003) &  &  \\ 
##   & & & \\ 
##  Pr.means.log:Age &  & 0.001 &  \\ 
##   &  & (0.001) &  \\ 
##   & & & \\ 
##  Avg.empl.log:Age &  &  & $-$0.001 \\ 
##   &  &  & (0.001) \\ 
##   & & & \\ 
##  SizeМикропредприятия:Age & $-$0.002 & $-$0.003 & $-$0.005 \\ 
##   & (0.003) & (0.003) & (0.003) \\ 
##   & & & \\ 
##  SizeСредние предприятия:Age & $-$0.0001 & 0.002 & 0.006 \\ 
##   & (0.004) & (0.004) & (0.005) \\ 
##   & & & \\ 
## \hline \\[-1.8ex] 
## Observations & 284 & 284 & 284 \\ 
## \hline 
## \hline \\[-1.8ex] 
## \textit{Note:}  & \multicolumn{3}{r}{$^{*}$p$<$0.1; $^{**}$p$<$0.05; $^{***}$p$<$0.01} \\ 
##  & \multicolumn{3}{r}{Robust standard errors in parentheses} \\ 
## \end{tabular} 
## \end{table}
me_M_1_capital <- summary(margins(M_1,
                                variables = "Capital.log", 
                                at = list(Age = seq(1, 31, by = 0.5)), 
                                vcov = vcovHC(M_1, type = "HC0")))
me_M_1_Size <- summary(margins(M_1,
                                variables = "Size", 
                                at = list(Age = seq(1, 31, by = 0.5)), 
                                vcov = vcovHC(M_1, type = "HC0")))
ggplot(me_M_1_capital) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект уставного капитала \n для каждого уровня возраста") +
theme_linedraw()

ggplot(me_M_1_Size %>% filter(factor == "SizeМикропредприятия")) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект уменьшения размера до микро \n для каждого уровня возраста") +
theme_linedraw()

ggplot(me_M_1_Size %>% filter(factor == "SizeСредние предприятия")) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект увеличения размера до среднего \n для каждого уровня возраста") +
theme_linedraw()

me_M_2_pr.means <- summary(margins(M_2,
                                variables = "Pr.means.log", 
                                at = list(Age = seq(1, 31, by = 0.5)), 
                                vcov = vcovHC(M_2, type = "HC0")))
me_M_2_Size <- summary(margins(M_2,
                                variables = "Size", 
                                at = list(Age = seq(1, 31, by = 0.5)), 
                                vcov = vcovHC(M_2, type = "HC0")))
ggplot(me_M_2_pr.means) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект основных средств \n для каждого уровня возраста") +
theme_linedraw()

ggplot(me_M_2_Size %>% filter(factor == "SizeМикропредприятия")) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект уменьшения размера до микро \n для каждого уровня возраста") +
theme_linedraw()

ggplot(me_M_2_Size %>% filter(factor == "SizeСредние предприятия")) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект увеличения размера до среднего \n для каждого уровня возраста") +
theme_linedraw()

me_M_3_avg.empl <- summary(margins(M_3,
                                variables = "Avg.empl.log", 
                                at = list(Age = seq(1, 31, by = 0.5)), 
                                vcov = vcovHC(M_3, type = "HC0")))
me_M_3_Size <- summary(margins(M_3,
                                variables = "Size", 
                                at = list(Age = seq(1, 31, by = 0.5)), 
                                vcov = vcovHC(M_3, type = "HC0")))
ggplot(me_M_3_avg.empl) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект среднесписочной численности работников \n для каждого уровня возраста") +
theme_linedraw()

ggplot(me_M_3_Size %>% filter(factor == "SizeМикропредприятия")) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект уменьшения размера до микро \n для каждого уровня возраста") +
theme_linedraw()

ggplot(me_M_3_Size %>% filter(factor == "SizeСредние предприятия")) +
geom_ribbon(aes(x = Age, ymin = lower, ymax = upper), fill = "grey70", alpha = 0.5) + 
geom_line(aes(Age, AME),color = "#76D6FF") +
geom_hline(yintercept = 0, col = "#191970", linetype = "dashed")+
xlab("Возраст компании, лет.") + 
ylab("Средний предельный эффект") +
labs(title = "Средний предельный эффект увеличения размера до среднего \n для каждого уровня возраста") +
theme_linedraw()