Modelos Paramétricos e regressão de Cox

Análise de Sobrevivência

1 Introdução

     Neste trabalho iremos aplicar os modelos de regressão paramétricos e o modelo de Cox no banco de dados de CSGO: ping’s data. Portanto, o banco de dados é referente a certas estatíticas de partidas jogadas por um certo jogador no período entre 2015 a 2018, inicialmente com 17 variáveis e 1133 linhas, após uma filtragem dos dados realizados no último trabalho obtivemos um total de 12 variáveis e 1042 observações. Portanto, teremos as seguintes variáveis:

  • Map: Mapas jogados por esse player durante esse período;
  • Match Time(s): Tempo total, em segundos, de duração de uma certa partida;
  • Team A Rounds: Quantidade de rodadas vencidas pelo time A;
  • Team B Rounds: Quantidade de rodadas vencidas pelo time B;
  • Ping: Tempo de latência da resposta entre o computador do usuário com o servidor do jogo;
  • Kills: Quantidade de mortes causadas pelo jogador em uma certa partida;
  • Assists: Quantidade de vezes que o jogador ajudou um aliado a matar algum jogador adversário em uma certa partida;
  • Deaths: Quantidades de vezes que o jogador morreu em uma certa partida;
  • Mvp’s: Quantidades de vezes que o jogador foi o melhor em alguma rodada de uma certa partida;
  • HS%: A proporção de headshots (Tiros na cabeça) acertados pelo jogador em uma certa partida;
  • Points: Total de pontos obtidos pelo jogador em uma certa partida;
  • Result: Resultado final de uma partida;

     Podemos conferir as informações citadas acima na tabela:

As 10 primeiras observações do banco de dados CSGO: ping’s data.
Map Match Time(s) Team A Rounds Team B Rounds Ping Kills Assists Deaths Mvp’s HS% Points Result
Mirage 2906 16 13 215 17 2 21 2 5 45 Win
Mirage 2592 16 11 199 13 4 24 2 0 40 Lost
Mirage 2731 16 14 85 15 3 18 3 26 37 Win
Mirage 2379 11 16 93 12 2 15 2 16 30 Lost
Mirage 3467 15 15 94 33 5 20 5 30 83 Tie
Mirage 1881 16 4 88 13 2 17 1 38 34 Lost
Dust II 3194 16 14 89 19 5 24 2 15 52 Lost
Mirage 2859 16 14 82 17 1 25 0 35 37 Lost
Mirage 2300 16 8 112 25 10 12 4 16 70 Win
Mirage 2184 6 16 89 13 1 17 0 61 31 Lost

     Porém, para a aplicação dos modelos iremos utilizar as variáveis:

  • Tempo de falha: Match Time(s);
  • Covariáveis: Team A Rounds, Team B Rounds, Map e Result;

2 Metodologia

     A escolha do melhor modelo paramétrico se dará pela comparação com a curva de Kaplan-Meier, aquele que mais se aproximar da curva de KM irá ser considerado o melhor modelo. Os modelos que serão analisados são:

  • Modelo Exponencial;
  • Modelo Weibull;
  • Modelo Log-Normal;

     Além de modelos paramétricos, iremos aplicar o modelo de regressão de Cox, considerado um modelo semiparamétrico, onde não iremos supor que o tempo de sobrevivência siga uma determinada distribuição e com isso iremos modelar diretamente na função de risco, estimando os efeitos das covariáveis a partir da proporcionalidade do risco ao longo do tempo.

     Com isso, foi necessário transformar as covariáveis Map e Result em dummys, obtendo assim a seguinte base de dados:

Match Time(s) Team A Rounds Team B Rounds Map_Dust II Map_Inferno Map_Mirage Result_Lost Result_Tie Result_Win
2906 16 13 0 0 1 0 0 1
2592 16 11 0 0 1 1 0 0
2731 16 14 0 0 1 0 0 1
2379 11 16 0 0 1 1 0 0
3467 15 15 0 0 1 0 1 0
1881 16 4 0 0 1 1 0 0
3194 16 14 1 0 0 1 0 0
2859 16 14 0 0 1 1 0 0
2300 16 8 0 0 1 0 0 1
2184 6 16 0 0 1 1 0 0

     Onde iremos utilizar na variável Map os mapas Mirage e Dust II e para a variável Result serão utilizados os resultados Lost e Tie.

3 Curva de Kaplan-Meier

4 Aplicação dos modelos paramétricos

4.1 Modelo Exponencial

## 
## Call:
## survreg(formula = Surv(`Match Time(s)`) ~ ., data = df_new, dist = "exponential")
##                    Value Std. Error     z       p
## (Intercept)      6.49599    0.21316 30.47 < 2e-16
## `Team A Rounds`  0.05083    0.00896  5.67 1.4e-08
## `Team B Rounds`  0.05122    0.00905  5.66 1.5e-08
## `Map_Dust II`   -0.04927    0.09708 -0.51    0.61
## Map_Mirage      -0.02909    0.10175 -0.29    0.77
## Result_Lost     -0.00212    0.06487 -0.03    0.97
## Result_Tie      -0.02102    0.13054 -0.16    0.87
## 
## Scale fixed at 1 
## 
## Exponential distribution
## Loglik(model)= -9079.5   Loglik(intercept only)= -9101.3
##  Chisq= 43.46 on 6 degrees of freedom, p= 9.5e-08 
## Number of Newton-Raphson Iterations: 2 
## n= 1042

4.2 Modelo Weibull

## 
## Call:
## survreg(formula = Surv(`Match Time(s)`) ~ ., data = df_new, dist = "weibull")
##                     Value Std. Error       z       p
## (Intercept)      6.601237   0.018655  353.86 < 2e-16
## `Team A Rounds`  0.048215   0.000786   61.31 < 2e-16
## `Team B Rounds`  0.048082   0.000797   60.35 < 2e-16
## `Map_Dust II`   -0.043827   0.007842   -5.59 2.3e-08
## Map_Mirage      -0.024577   0.008201   -3.00  0.0027
## Result_Lost     -0.006845   0.005236   -1.31  0.1911
## Result_Tie      -0.009746   0.010674   -0.91  0.3612
## Log(scale)      -2.520680   0.022206 -113.51 < 2e-16
## 
## Scale= 0.0804 
## 
## Weibull distribution
## Loglik(model)= -6979.8   Loglik(intercept only)= -7899.5
##  Chisq= 1839.46 on 6 degrees of freedom, p= 0 
## Number of Newton-Raphson Iterations: 6 
## n= 1042

4.3 Modelo Log Normal

## 
## Call:
## survreg(formula = Surv(`Match Time(s)`) ~ ., data = df_new, dist = "lognormal")
##                     Value Std. Error       z       p
## (Intercept)      6.484150   0.017615  368.10 < 2e-16
## `Team A Rounds`  0.051180   0.000739   69.22 < 2e-16
## `Team B Rounds`  0.051581   0.000747   69.02 < 2e-16
## `Map_Dust II`   -0.049683   0.008116   -6.12 9.3e-10
## Map_Mirage      -0.029409   0.008508   -3.46 0.00055
## Result_Lost     -0.002026   0.005426   -0.37 0.70885
## Result_Tie      -0.022445   0.010895   -2.06 0.03939
## Log(scale)      -2.481456   0.021905 -113.28 < 2e-16
## 
## Scale= 0.0836 
## 
## Log Normal distribution
## Loglik(model)= -6926.8   Loglik(intercept only)= -7974
##  Chisq= 2094.38 on 6 degrees of freedom, p= 0 
## Number of Newton-Raphson Iterations: 6 
## n= 1042

5 Escolhendo a Melhor distribuição

5.1 Kaplan-Meier x modelos aplicados

5.2 Resíduos Deviance dos modelos

6 Escolha da melhor distribuição com resíduos CDF

6.1 Gráfico de comparação

6.2 Gráfico dos resíduos deviance

6.3 Gráfico para valores influentes

7 Regressão de Cox

7.1 Modelo proporcional de Cox

## Call:
## coxph(formula = Surv(`Match Time(s)`) ~ ., data = df_new)
## 
##   n= 1042, number of events= 1042 
## 
##                     coef exp(coef) se(coef)       z Pr(>|z|)    
## `Team A Rounds` -0.62631   0.53456  0.01696 -36.920  < 2e-16 ***
## `Team B Rounds` -0.62399   0.53580  0.01666 -37.456  < 2e-16 ***
## `Map_Dust II`    0.55993   1.75055  0.09808   5.709 1.14e-08 ***
## Map_Mirage       0.34340   1.40973  0.10247   3.351 0.000804 ***
## Result_Lost      0.10434   1.10998  0.06557   1.591 0.111572    
## Result_Tie       0.10692   1.11285  0.13747   0.778 0.436684    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                 exp(coef) exp(-coef) lower .95 upper .95
## `Team A Rounds`    0.5346     1.8707    0.5171    0.5526
## `Team B Rounds`    0.5358     1.8664    0.5186    0.5536
## `Map_Dust II`      1.7505     0.5712    1.4444    2.1216
## Map_Mirage         1.4097     0.7094    1.1532    1.7233
## Result_Lost        1.1100     0.9009    0.9761    1.2622
## Result_Tie         1.1129     0.8986    0.8500    1.4570
## 
## Concordance= 0.879  (se = 0.003 )
## Likelihood ratio test= 1876  on 6 df,   p=<2e-16
## Wald test            = 1546  on 6 df,   p=<2e-16
## Score (logrank) test = 1931  on 6 df,   p=<2e-16
##                   chisq df       p
## `Team A Rounds`  0.0738  1 0.78586
## `Team B Rounds` 14.4857  1 0.00014
## `Map_Dust II`    2.8859  1 0.08936
## Map_Mirage       0.4683  1 0.49376
## Result_Lost      1.7315  1 0.18822
## Result_Tie       4.0487  1 0.04421
## GLOBAL          66.9516  6 1.7e-12

7.2 Teste de proporcionalidade

## Warning: `gather_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `gather()` instead.
## ℹ The deprecated feature was likely used in the survminer package.
##   Please report the issue at <https://github.com/kassambara/survminer/issues>.
## `geom_smooth()` using formula 'y ~ x'