Este é um modelo de classificação (logit) que tem como objetivo investigar as variáveis que podem explicar se um Startup é comprada ou não.
Carregando a base de dados.
library(rms)
library(pROC)
library(pscl)
library(ggplot2)
dados <- read.csv2("C:/Users/Daniel/Desktop/Projetos/Logit/dados.csv")
head(dados)
## ï..id lucro_1 midia incub inv_inic idade centro meses comprada
## 1 92 -35532 10 1 98772 25 0 31 0
## 2 122 -39546 4 0 97853 44 1 9 0
## 3 60 -36121 12 0 41234 54 0 16 0
## 4 218 -16442 12 0 40344 23 1 21 0
## 5 21 -8377 8 0 34505 21 0 5 0
## 6 126 -45169 7 1 91488 56 1 8 0
summary(dados)
## ï..id lucro_1 midia incub
## Min. : 1.00 Min. :-79793 Min. : 0.000 Min. :0.0000
## 1st Qu.: 98.75 1st Qu.:-45577 1st Qu.: 4.000 1st Qu.:0.0000
## Median :196.50 Median : -2823 Median : 7.000 Median :1.0000
## Mean :196.50 Mean : -1942 Mean : 6.992 Mean :0.5026
## 3rd Qu.:294.25 3rd Qu.: 39208 3rd Qu.:10.000 3rd Qu.:1.0000
## Max. :392.00 Max. : 98586 Max. :17.000 Max. :1.0000
## inv_inic idade centro meses
## Min. :10030 Min. :18.00 Min. :0.0000 Min. : 1.00
## 1st Qu.:29309 1st Qu.:27.00 1st Qu.:0.0000 1st Qu.:13.00
## Median :41283 Median :39.00 Median :0.0000 Median :20.00
## Mean :45164 Mean :39.55 Mean :0.4974 Mean :19.93
## 3rd Qu.:58196 3rd Qu.:50.00 3rd Qu.:1.0000 3rd Qu.:28.00
## Max. :99755 Max. :65.00 Max. :1.0000 Max. :36.00
## comprada
## Min. :0.0000
## 1st Qu.:0.0000
## Median :1.0000
## Mean :0.5153
## 3rd Qu.:1.0000
## Max. :1.0000
As variáveis lucro_1 (lucro/prejuízo da empresa no primeiro ano) e inv_inic (valor do investimento inicial) são variáveis contínuas.
Por sua vez, midia (número de aparições na mídia), idade (idade do founder) e meses (idade da empresa em meses) são variáveis discretas.
Finalmente, incub (se a empresa está incubada), centro (se a empresa está em um grande centro) e comprada (se a empresa foi comprada) são variáveis binárias. Esta última é a variável dependente.
correlacao <- cor(dados[2:9])
correlacao <- round(correlacao, 4)
cor_down <- correlacao
cor_down[upper.tri(correlacao)] <- ""
cor_down <- as.data.frame(cor_down)
cor_down
## lucro_1 midia incub inv_inic idade centro meses comprada
## lucro_1 1
## midia 0.1495 1
## incub -0.0048 -0.0604 1
## inv_inic -0.0535 -0.0407 0.0523 1
## idade 0.0224 -0.0422 -0.0142 0.0427 1
## centro 0.0518 -0.015 -0.0204 0.0351 -0.1024 1
## meses -0.0051 0.0595 0.1579 0.0324 0.0816 0.0583 1
## comprada 0.1541 0.0787 0.1479 0.0748 0.072 0.138 0.3312 1
Nenhuma variável está fortemente correlacionada. Isto evitará problemas de multicolinearidade.
par(mfrow=c(1,3))
boxplot(dados[2], main="Lucro/Prejuízo no Primeiro Ano")
boxplot(dados[3], main="Aparições na Mídia")
boxplot(dados[5], main="Investimento Inicial")
boxplot(dados[6], main="Idade Founder")
boxplot(dados[8], main="Meses de Vida)")
Uma regressão logística (logit) será utilizada para identificar quais variáveis auxiliam a classificação de uma Start-Up como comprada (1) ou não (0).
modelo <- lrm(comprada~lucro_1+midia+incub+inv_inic+idade+centro+meses, data=dados)
modelo
## Logistic Regression Model
##
## lrm(formula = comprada ~ lucro_1 + midia + incub + inv_inic +
## idade + centro + meses, data = dados)
##
## Model Likelihood Discrimination Rank Discrim.
## Ratio Test Indexes Indexes
## Obs 392 LR chi2 70.43 R2 0.219 C 0.728
## 0 190 d.f. 7 g 1.094 Dxy 0.456
## 1 202 Pr(> chi2) <0.0001 gr 2.986 gamma 0.456
## max |deriv| 0.0005 gp 0.236 tau-a 0.228
## Brier 0.208
##
## Coef S.E. Wald Z Pr(>|Z|)
## Intercept -2.9059 0.5753 -5.05 <0.0001
## lucro_1 0.0000 0.0000 3.00 0.0027
## midia 0.0341 0.0289 1.18 0.2391
## incub 0.5038 0.2247 2.24 0.0250
## inv_inic 0.0000 0.0000 1.39 0.1650
## idade 0.0108 0.0083 1.29 0.1972
## centro 0.5755 0.2247 2.56 0.0104
## meses 0.0722 0.0124 5.82 <0.0001
##
Os coeficientes estatisticamente significantes em 5% foram:
lucro_1: lucro/prejuízo da empresa no primeiro ano
incub: se a empresa é incubada ou não
centro: se a empresa está em um grande centro
meses: a idade da empresa em meses
Calculando o intervalo de confiança dos coeficientes do modelo.
confint.default(modelo)
## 2.5 % 97.5 %
## Intercept -4.033467e+00 -1.778241e+00
## lucro_1 2.516374e-06 1.200491e-05
## midia -2.265143e-02 9.079222e-02
## incub 6.339605e-02 9.442116e-01
## inv_inic -3.122813e-06 1.829799e-05
## idade -5.592968e-03 2.711477e-02
## centro 1.350621e-01 1.015947e+00
## meses 4.787581e-02 9.647225e-02
coef.modelo <- cbind(modelo$coefficients[2:8], exp(modelo$coefficients[2:8]), exp(modelo$coefficients[2:8])-1)
colnames(coef.modelo)<-c("Beta", "ExpBeta", "ExpBeta-1")
round(coef.modelo, 5)
## Beta ExpBeta ExpBeta-1
## lucro_1 0.00001 1.00001 0.00001
## midia 0.03407 1.03466 0.03466
## incub 0.50380 1.65500 0.65500
## inv_inic 0.00001 1.00001 0.00001
## idade 0.01076 1.01082 0.01082
## centro 0.57550 1.77803 0.77803
## meses 0.07217 1.07484 0.07484
Ao calcular o odds ratio de cada variável a interpretação do modelo fica mais clara.
É possível notar que para cada incremento no lucro do primeiro ano de atividade, a probabilidade de ser comprada aumenta em 0,001%. Considerando que a a empresa mais lucrativa da amostra registrou lucro de 10.000, enquanto a média foi de prejuízo de 2.000, ter uma Startup que gera lucro já no primeiro ano é muito importante para que ela seja comprada.
Estar incubada e estar em um grande centro aumenta em, respectivamente, 65% e 77% a chance de uma Startup ser comprada. A idade da empresa também está associada ao fato dela ser comprada. Em média, 1 mês a mais de vida da empresa aumenta em 7% a chance de ser comprada. Vale destacar que a amostra tem empresas de até 3 anos. Esta relação, possivelmente, não é linear. Ou seja, é razoável acreditar que empresas com mais de 36 meses talvez não estejam associadas com uma maior probabilidade de serem compradas.
# Teste de VIF
vif(modelo)
## lucro_1 midia incub inv_inic idade centro meses
## 1.042821 1.037356 1.028772 1.013972 1.031229 1.029020 1.021459
Os valores de VIF abaixo de 10 indicam que o modelo não apresenta problema de multicolinearidade, logo, não é necessário retirar ou alterar nenhum variável.
Cálculo da quantidade de preditos corretos
probab.modelo <- predict(modelo, data=dados, type="fitted")
pred.modelo <- round(probab.modelo)
table(dados$comprada,pred.modelo)
## pred.modelo
## 0 1
## 0 117 73
## 1 55 147
A tabela acima indica que das 392 observações, o modelo consegue classificar corretamente 266 observações (122+144).
Calculando e plotando a Curva ROC
# Curva ROC
prob <- predict(modelo)
a1 <- roc(comprada ~ prob, data = dados)
plot(a1)
a1
##
## Call:
## roc.formula(formula = comprada ~ prob, data = dados)
##
## Data: prob in 190 controls (comprada 0) < 202 cases (comprada 1).
## Area under the curve: 0.7281
A área abaixo da curva ROC de 0.74 indica que o modelo tem boa capacidade classificação.
Pseudo R2: indica o poder explicativo do modelo (McFadden = 13%).
pR2(modelo)
## llh llhNull G2 McFadden
## -236.3154414 -271.5299926 70.4291024 0.1296894
Por fim, o gráfico abaixo apresenta as startups compradas (azul) e as não compradas (preto) em relação às duas variáveis quanti que foram significativas no modelo (lucro no primeiro ano e idade em meses). É possível notar que são poucas as startups compradas com menos de 10 meses e são poucas as que não foram compradas com um lucro maior do que 60k.
ggplot(dados, aes(x=lucro_1, y=meses, color=comprada)) +
geom_point(shape=16)