# включение пакетов
library("dplyr")
library("readxl")
library("psych")
library("glmnet")
library("lmtest")
library("car")
library("HSAUR")
library("ggplot2")
library("tidyverse")
data.about.banks <- read_excel("data.xlsx")
# Линейная модель
model.line <- lm(data=data.about.banks,equity~loans.to.citizens+money.of.companies+loans.to.companies+promissories)
summary(model.line) # в целом, модель является значимой: низкий p-value, высокий R^2, большинство коэффициентов значимы
# Мультиколлинеарность
vif(model.line) # вздутия дисперсий не больше 6 - мультиколлинеарности нет
# Рамсей
(ramsey <- resettest(model.line, power = 2:3)) # p-value < 0,05 - есть пропущенные переменные
# На главных компонентах
PC.equity <- data.about.banks$equity # зависимая переменная, отделение в отдельный столбик
equity_stand <- scale(equity) # стандартизация (шкалирование) зависимой переменной
regressors <- data.about.banks[,-1] # объясняющие переменные, отделение в отдельную таблицу
**(PC <- prcomp(regressors, scale = TRUE)) # переход к главным компонентам, стандартизация
summary(PC) # строим модель на первых 3-х главных компонентах, так как cumulative prop. > 0,9 у них
plot(PC) # распределение накопленных дисперсий главных компонент
# выделение первых 3-х главных компонент в матрицы
PC1<-PC$x[,1]
PC2<-PC$x[,2]
PC3<-PC$x[,3]
PC.equity <- data.frame(equity_stand,PC1,PC2,PC3) # создание таблицы с главными компонентами и зависимой переменной в стандартизованном виде
model.PCA <- lm(data = PC.equity, equity_stand~.) # линейная модель, построенная с помощью метода главных компонент
summary(model.PCA) # в целом, модель является значимой: низкий p-value, высокий R^2, большинство коэффициентов значимы**
# Lasso
lambdas.seq = 10^seq(5, -2, length = 100) # ряд лямбд для подбора оптимальной для построения модели
x <- as.matrix(regressors) # модель Лассо работает только с матрицами - объясняющие переменные преобразуем в матрицу
lasso.m <- glmnet(x, equity, alpha = 1, lambda = lambdas.seq) # оценка коэффициентов модели lasso
plot(lasso.m,xvar = 'lambda') # коэффициенты модели сходятся к 0 при больщом логарифме лямбда
set.seed(1) # случайное число
lasso.cv.out = cv.glmnet(x,equity,alpha = 1) # оптимальная лямбда, где коэффициенты будут наилучшими
plot(lasso.cv.out) # зависимость ошибки модели от размера лямбда: левый пунктир - минимальная ошибка, оптимальная лямбда
(lasso.best.lam = lasso.cv.out$lambda.min) # оптимальная лямбда, где ошибки наименьшие
model.lasso = glmnet(x,equity,alpha=1,lambda=lasso.best.lam) # модель lasso
coef(model.lasso) # есть один нулевой коэффициент, векселя - самые значимые, больше информации о модели нет
# Сравнение, выбор лучшей модели и построение прогноза
summary(model.line)
summary(model.PCA)
# коэффициент детерминации (Adjusted R-squared) выше у обычной линейной модели
# исключаем из дальнейшего сравнения модель, построенную с использованием метода главных компонент
x.tab <- as.data.frame(regressors) # перевод зависимых переменных в таблицу
# построение прогнозов, подстановка регрессоров в модели
model.line.p <- c(predict(model.line, x.tab)) # линейная обычная
model.lasso.p <- c(predict(model.lasso, x)) # lasso
# считаем отклонение от прогноза фактических данных - ближе к 1 - лучше прогноз
compar.1 <- cbind(y=equity, pred=model.line.p) # таблица с прогнозом по линейной и факт. данными
(devian.lin<-(mean(apply(compar.1,1,min)/apply(compar.1,1,max)))) # отклонение прогноза от факт. данных = 0.68
compar.2 <- cbind(y=equity, pred=model.lasso.p) # таблица с прогнозом по Лассо и факт. данными
(devian.las<-(mean(apply(compar.2,1,min)/apply(compar.2,1,max)))) # отклонение прогноза от факт. данных = 0.71
# Лучшая для прогноза - модель Lasso-регрессии
# Прогноз по Лассо в максимальных точках
z <- data.frame(loans.to.citizens=c(max(data.about.banks$loans.to.citizens)),
money.of.companies=c(max(data.about.banks$money.of.companies)),
loans.to.companies=c(max(data.about.banks$loans.to.companies)),
promissories=c(max(data.about.banks$promissories)))
z <- as.matrix(z)
(result <- predict(model.lasso, z))
# прогноз равен 63940.12 млн. рублей (величина капитала банка при максимальном значении влияющих факторов)

[1]: https://i.stack.imgur.com/bJnXd.png