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:
| 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'