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

Análise Exploratória dos Dados

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)")

Especificando o Modelo

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:

  1. lucro_1: lucro/prejuízo da empresa no primeiro ano

  2. incub: se a empresa é incubada ou não

  3. centro: se a empresa está em um grande centro

  4. 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

Transformação de coeficientes em probabilidades

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)