O R é uma linguagem de programação e um software amplamente utilizado para manipulação de dados, análise estatística, cálculos matemáticos e criação de gráficos. Neste estudo, o R foi utilizado para realizar a análise estatística da base de dados gbsg, que está disponível no pacote TH.data.
A base de dados utilizada neste estudo contém 686 unidades experimentais e 12 variáveis que correspondem a pacientes com cancro da mama e as suas características clínicas e biológicas, respetivamente. As variáveis disponíveis são:
— pid : identificação de cada paciente;
— age : idade da paciente no momento do diagnóstico de cancro da mama;
— meno : estado da menopausa da paciente (1=pré-menopausa, 2=pós-menopausa);
— size : tamanho do tumor (em milímetros);
— grade : grau histológico do tumor, que indica o nível de diferenciação das células tumorais (grau 1 = baixo, grau 2 = moderado, grau 3 = alto);
— nodes : número de linfonodos (gânglios linfáticos) positivos com metástases;
— pgr : nível de recetores de progesterona nas células tumorais;
— er : nível de recetores de estrogénio nas células tumorais (1 = positivo, 0 = negativo);
— hormon : indicador de se a paciente recebeu ou não tratamento hormonal (1 = sim, 0 = não);
— rfstime : tempo até à recaída do cancro ou morte (medido em dias);
— status : estado do evento (0 = falecimento não ocorreu, 1 = falecimento ocorreu).
O principal objetivo deste estudo consiste em observar as características clínicas e biológicas das pacientes com cancro da mama.
Fez-se uma pequena análise exploratória aos dados que correspondem a uma tabela de 686 linhas (pacientes) e 11 colunas (variáveis). Através da secção 1.2., podemos observar que a nossa base de dados tem 5 variáveis qualitativas e 6 variáveis quantitativas. As variáveis qualitativas são representadas por vários níveis de resposta. Já as variáveis quantitativas são variáveis que tomam valores numéricos.
library(TH.data)
## Loading required package: survival
## Loading required package: MASS
##
## Attaching package: 'TH.data'
## The following object is masked from 'package:MASS':
##
## geyser
str(gbsg)
## 'data.frame': 686 obs. of 11 variables:
## $ pid : int 132 1575 1140 769 130 1642 475 973 569 1180 ...
## $ age : int 49 55 56 45 65 48 48 37 67 45 ...
## $ meno : int 0 1 1 0 1 0 0 0 1 0 ...
## $ size : int 18 20 40 25 30 52 21 20 20 30 ...
## $ grade : int 2 3 3 3 2 2 3 2 2 2 ...
## $ nodes : int 2 16 3 1 5 11 8 9 1 1 ...
## $ pgr : int 0 0 0 0 0 0 0 0 0 0 ...
## $ er : int 0 0 0 4 36 0 0 0 0 0 ...
## $ hormon : int 0 0 0 0 1 0 0 1 1 0 ...
## $ rfstime: int 1838 403 1603 177 1855 842 293 42 564 1093 ...
## $ status : int 0 1 0 0 0 1 1 0 1 1 ...
Para trocar as variáveis para fatores usamos o comando transform() da seguinte forma:
gbsg <- transform(gbsg,meno = factor(gbsg$meno),grade = factor(gbsg$grade),er = factor(gbsg$er),hormon = factor(gbsg$hormon),status = factor(gbsg$status))
Se corrermos novamente o comando str(gbsg) agora teremos as variáveis bem classificadas e assim poderemos avançar no nosso estudo.
str(gbsg)
## 'data.frame': 686 obs. of 11 variables:
## $ pid : int 132 1575 1140 769 130 1642 475 973 569 1180 ...
## $ age : int 49 55 56 45 65 48 48 37 67 45 ...
## $ meno : Factor w/ 2 levels "0","1": 1 2 2 1 2 1 1 1 2 1 ...
## $ size : int 18 20 40 25 30 52 21 20 20 30 ...
## $ grade : Factor w/ 3 levels "1","2","3": 2 3 3 3 2 2 3 2 2 2 ...
## $ nodes : int 2 16 3 1 5 11 8 9 1 1 ...
## $ pgr : int 0 0 0 0 0 0 0 0 0 0 ...
## $ er : Factor w/ 244 levels "0","1","2","3",..: 1 1 1 5 37 1 1 1 1 1 ...
## $ hormon : Factor w/ 2 levels "0","1": 1 1 1 1 2 1 1 2 2 1 ...
## $ rfstime: int 1838 403 1603 177 1855 842 293 42 564 1093 ...
## $ status : Factor w/ 2 levels "0","1": 1 2 1 1 1 2 2 1 2 2 ...
Para este tipo de variáveis, ir-se-à construir uma tabela de frequências para cada uma das variáveis qualitativas com o objetivo de melhorar a visualização dos dados. Iremos dar destaque às variáveis meno, grade e status, pois estas aparentam ser interessantes para o nosso objetivo de estudo.
Esta variável refere-se ao estado da menopausa da paciente, se a mulher está em pré-menopausa ou pós-menopausa no momento do diagnóstico ou tratamento.
— 0: pré-menopausa;
— 1: pós-menopausa.
Iremos então executar a tabela respetiva à variável.
(tmeno <- table(gbsg$meno))
##
## 0 1
## 290 396
(dtmeno <- data.frame(tmeno, row.names = c("Pré-menopausa", "Pós-menopausa")))
## Var1 Freq
## Pré-menopausa 0 290
## Pós-menopausa 1 396
N_i <- c()
for (i in 1:length(tmeno)) {
N_i[1] <- tmeno[1]
if (i > 1) {
N_i[i] <- N_i[i - 1] + tmeno[i]
}
}
N_i
## [1] 290 686
ptmeno <- prop.table(tmeno)
ptmeno
##
## 0 1
## 0.4227405 0.5772595
dptmeno <- data.frame(ptmeno)
dptmeno
## Var1 Freq
## 1 0 0.4227405
## 2 1 0.5772595
f_i <- dptmeno[, 2]
F_i <- c()
for (i in 1:length(ptmeno)) {
F_i[1] <- ptmeno[1]
if (i > 1) {
F_i[i] <- F_i[i - 1] + ptmeno[i]
}
}
F_i
## [1] 0.4227405 1.0000000
tab <- data.frame(dtmeno, N_i, f_i, F_i)
| Var1 | Freq | N_i | f_i | F_i | |
|---|---|---|---|---|---|
| Pré-menopausa | 0 | 290 | 290 | 0.4227405 | 0.4227405 |
| Pós-menopausa | 1 | 396 | 686 | 0.5772595 | 1.0000000 |
Podemos observar que aproximadamente 42,27% dos pacientes estão na pré-menopausa. Esses pacientes ainda não passaram pela interrupção do ciclo menstrual, apresentando níveis hormonais ativos que podem influenciar o desenvolvimento e a progressão do cancro de mama. Esse grupo representa uma parte significativa da amostra e possui particularidades no tratamento terapêutico, como o impacto da terapia hormonal.
Por outro lado, 57,73% dos pacientes estão na pós-menopausa, indicando que já passaram pela interrupção do ciclo menstrual. Pacientes nesta fase apresentam características hormonais mais estáveis, o que pode alterar a abordagem terapêutica.
Com base nestes dados, verifica-se que a maioria dos pacientes (cerca de 58%) está na pós-menopausa, o que é esperado em populações com maior prevalência de cancro de mama, geralmente diagnosticadas em idades mais avançadas.
Representa o grau histológico do tumor, que indica o nível de diferenciação das células tumorais. O grau 1 classifica-se como baixo, o grau 2 como moderado e por fim o grau 3 por alto.
— grau 1: baixo;
— grau 2: moderado;
— grau 3: alto.
Vamos, então, proceder à criação da tabela correspondente à variável.
grade <- (gbsg$grade)
(t_tgrade <- table(grade))
## grade
## 1 2 3
## 81 444 161
(d_tgrade <- data.frame(t_tgrade, row.names = c("Grau 1", "Grau 2", "Grau 3")))
## grade Freq
## Grau 1 1 81
## Grau 2 2 444
## Grau 3 3 161
N_i <- c()
for (i in 1:length(t_tgrade)) {
N_i[1] <- t_tgrade[1]
if (i > 1) {
N_i[i] <- N_i[i - 1] + t_tgrade[i]
}
}
N_i
## [1] 81 525 686
pt_tgrade <- prop.table(t_tgrade)
dp_tgrade <- data.frame(pt_tgrade)
f_i <- dp_tgrade[, 2]
F_i <- c()
for (i in 1:length(pt_tgrade)) {
F_i[1] <- pt_tgrade[1]
if (i > 1) {
F_i[i] <- F_i[i - 1] + pt_tgrade[i]
}
}
F_i
## [1] 0.1180758 0.7653061 1.0000000
tab_tgrade <- data.frame(d_tgrade, N_i, f_i, F_i)
| grade | Freq | N_i | f_i | F_i | |
|---|---|---|---|---|---|
| Grau 1 | 1 | 81 | 81 | 0.1180758 | 0.1180758 |
| Grau 2 | 2 | 444 | 525 | 0.6472303 | 0.7653061 |
| Grau 3 | 3 | 161 | 686 | 0.2346939 | 1.0000000 |
Podemos observar que 11,81% dos pacientes possuem tumores classificados como Grau 1, ou seja, tumores menos agressivos, com menor potencial de crescimento e disseminação. Esses tumores estão geralmente associados a um melhor prognóstico.
A maioria dos pacientes (64,73%) apresenta tumores classificados como Grau 2, que representam um nível intermediário em termos de agressividade. Este grupo é o mais prevalente na base de dados, sugerindo que muitos dos casos diagnosticados se encontram em uma condição de gravidade moderada.
Por outro lado, 23,47% dos pacientes têm tumores classificados como Grau 3, os mais agressivos. Estes tumores possuem maior potencial de crescimento e metástase, indicando um prognóstico mais desafiador e a necessidade de intervenções mais intensivas.
Com base nesses dados, verifica-se que a maioria dos tumores encontra-se nos graus intermediário (Grau 2) e avançado (Grau 3). Isso ressalta a importância de estratégias de diagnóstico precoce e tratamentos direcionados para melhorar os desfechos clínicos.
A variável informa se o paciente está vivo ou faleceu no final do período de acompanhamento, onde 0 corresponde à sobrevivência do doente enquanto que 1 corresponde ao falecimento.
— 0: paciente está vivo;
— 1: paciente faleceu;
Vamos avançar com a construção da tabela referente à variável.
status <- (gbsg$status)
(t_status <- table(status))
## status
## 0 1
## 387 299
(d_status <- data.frame(t_status, row.names = c("Vivo", "Falecido")))
## status Freq
## Vivo 0 387
## Falecido 1 299
N_i <- c()
for (i in 1:length(t_status)) {
N_i[1] <- t_status[1]
if (i > 1) {
N_i[i] <- N_i[i - 1] + t_status[i]
}
}
N_i
## [1] 387 686
pt_status <- prop.table(t_status)
dp_status <- data.frame(pt_status)
f_i <- dp_status[, 2]
F_i <- c()
for (i in 1:length(pt_status)) {
F_i[1] <- pt_status[1]
if (i > 1) {
F_i[i] <- F_i[i - 1] + pt_status[i]
}
}
F_i
## [1] 0.5641399 1.0000000
tab_status <- data.frame(d_status, N_i, f_i, F_i)
| status | Freq | N_i | f_i | F_i | |
|---|---|---|---|---|---|
| Vivo | 0 | 387 | 387 | 0.5641399 | 0.5641399 |
| Falecido | 1 | 299 | 686 | 0.4358601 | 1.0000000 |
Verifica-se que 56,41% dos pacientes estavam vivos ao final do período de acompanhamento. Esses pacientes não sofreram o evento de interesse (morte) e, por isso, são considerados censurados no contexto de uma análise de sobrevivência. Esse grupo constitui a maioria da amostra, indicando que mais da metade dos pacientes sobreviveu durante o período avaliado.
Por outro lado, 43,59% dos pacientes faleceram durante o período de acompanhamento, o que significa que o evento de interesse ocorreu em quase metade da amostra. Esse resultado evidencia o impacto significativo do câncer de mamanessa população e ressalta a necessidade de identificar os fatores associados à sobrevivência.
Com base nesses dados, conclui-se que, embora a maioria dos pacientes tenha sobrevivido, uma parte substancial experimentou o evento de interesse. Esses resultados reforçam a importância de estratégias terapêuticas mais eficazes e personalizadas, considerando fatores como o grau do tumor, o estado menopausal e o uso de terapias hormonais, com o objetivo de melhorar os desfechos.
É amplamente reconhecido que os gráficos são uma forma eficaz de obter uma perceção visual dos dados, facilitando a sua interpretação e compreensão. Por essa razão, vamos elaborar alguns tipos de gráficos para determinadas variáveis. Neste caso, optaremos por gráficos adequados para a visualização de variáveis qualitativas, como gráficos de barras e gráficos circulares.
pie(tab$f_i, col = c("indianred4", "salmon1"), labels = c("42.27%","57.73%"), main = "Distribuição dos Valores Relativos à Fase da Menopausa")
legend("topleft", fill = c("indianred4", "salmon1"), legend = c("Pré-menopausa", "Pós-menopausa"))
barplot(tab$Freq,col = c("indianred4", "salmon1"), names.arg = c("Pré-menopausa", "Pós-menopausa"), xlab = "Fases da Menopausa", ylab = "Frequências", ylim = c(0, 450), main = "Distribuição dos Valores Relativos à Fase da Menopausa",legend.text = c("Pré-menopausa", "Pós-menopausa"))
Através destes gráficos, entende-se que a maior parte dos pacientes está na fase de pré-menopausa.
pie(tab_tgrade$f_i, col = c("indianred4", "salmon1", "lightskyblue1"), labels = c("11.81%", "64.73%", "23.47%"), main = "Distribuição do Grau do Tumor")
legend("topleft", fill = c("indianred4", "salmon1", "lightskyblue"),legend = c("Grau 1", "Grau 2", "Grau 3"))
barplot(tab_tgrade$Freq, col = c("indianred4","salmon1" , "lightskyblue1"), names.arg = c("Grau 1", "Grau 2", "Grau 3"), xlab = "Grau do Tumor", ylab = "Frequências", ylim = c(0, 500), main = "Distribuição do Grau do Tumor",legend.text = c("Grau 1", "Grau 2", "Grau 3"))
O grau 2 e 3 são os graus predominantes, sendo o grau 2 que mais prevalece sobre os outros, com tumores classificados como moderados.
pie(tab_status$f_i, col = c("indianred4", "salmon1"), labels = c("56.41%", "43.59%"), main = "Distribuição do Status dos Pacientes")
legend("topleft", fill = c("indianred4", "salmon1"), legend = c("Vivo", "Falecido"))
barplot(tab_status$Freq, col = c("indianred4", "salmon1"), names.arg = c("Vivo", "Falecido"), xlab = "Status dos Pacientes", ylab = "Frequências", ylim = c(0, 450), main = "Distribuição do Status dos Pacientes",legend.text = c("Vivo", "Falecido"))
A maior parte dos pacientes estavam vivos no final do acompanhamento, por isso estes dados mostram que mais da metade da amostra não experienciou o evento de interesse durante o período analisado.
Os dados classificados como quantitativos serão analisados utilizando medidas de tendência central, como a média, a moda e a mediana, além de medidas de dispersão, como os quantis, a variância e a amplitude. Assim, para cada variável, elaboramos uma tabela que resume essas estatísticas.
kable(summary(gbsg[,c(-3,-5,-8,-9,-11)]))
| pid | age | size | nodes | pgr | rfstime | |
|---|---|---|---|---|---|---|
| Min. : 1.0 | Min. :21.00 | Min. : 3.00 | Min. : 1.00 | Min. : 0.0 | Min. : 8.0 | |
| 1st Qu.: 580.8 | 1st Qu.:46.00 | 1st Qu.: 20.00 | 1st Qu.: 1.00 | 1st Qu.: 7.0 | 1st Qu.: 567.8 | |
| Median :1015.5 | Median :53.00 | Median : 25.00 | Median : 3.00 | Median : 32.5 | Median :1084.0 | |
| Mean : 966.1 | Mean :53.05 | Mean : 29.33 | Mean : 5.01 | Mean : 110.0 | Mean :1124.5 | |
| 3rd Qu.:1340.5 | 3rd Qu.:61.00 | 3rd Qu.: 35.00 | 3rd Qu.: 7.00 | 3rd Qu.: 131.8 | 3rd Qu.:1684.8 | |
| Max. :1819.0 | Max. :80.00 | Max. :120.00 | Max. :51.00 | Max. :2380.0 | Max. :2659.0 |
Através desta tabela temos acesso às estatísticas descritivas de cada variável quantitativa desta base de dados.
kable(apply(gbsg[,c(-3,-5,-8,-9,-11)],2,var, na.rm=T))
| x | |
|---|---|
| pid | 245526.44296 |
| age | 102.42936 |
| size | 204.38182 |
| nodes | 29.98092 |
| pgr | 40938.05692 |
| rfstime | 413181.48822 |
Assim pode-se concluir que há variáveis com uma variabilidade notória e a variável que apresenta maior variabilidade é a rfstime.
Os outliers são valores que se afastam significativamente das demais observações, ou seja, dados que fogem ao padrão esperado e podem influenciar os resultados de forma distorcida. Muitas vezes, esses valores surgem devido a problemas na recolha de dados, como erros de medição, falhas na execução ou, ainda, pela variabilidade natural dos elementos da população. Esses fatores representam as principais causas da presença de outliers.
Existem dois tipos de outliers:
— Severos;
— Moderados.
A observação \(x\) é um outlier severo se e só se: \[\begin{array}{ccc} x < Q_1 - 3 (Q_3 - Q_1)\\ ou\\ x > Q_3 + 3 (Q_3 - Q_1) \end{array}\] Onde Q1 E Q3 são, respetivamente, o primeiro e terceiro quartis amostrais.
A observação \(x\) é um outlier moderado se e só se:
\[\begin{array}{ccc} Q_1 - 3 (Q_3 - Q_1) < x < Q_1 - 1.5 (Q_3 - Q_1)\\ ou\\ Q_1 + 1.5 (Q_3 - Q_1) < x < Q_1 + 3 (Q_3 - Q_1) \end{array}\]
Podemos obeservá-los a partir de um diagrama de caixa com bigodes, onde são representados por círculos.
O coeficiente de assimetria permite distinguir as distribuições assimétricas e é dado por:
\[g_1 = \frac{n^2}{(n-1)(n-2)} \frac{m_3}{\sqrt(m_2^3)}\]
É de esperar que, se o modelo subjacente à amostra for simétrico, g1 seja nulo. Quanto ao coeficiente de assimetria podemos dizer que se:
— g1>0, a amostra tem uma distribuição assimétrica positiva ou enviesada à esquerda;
— g1=1, a amostra é simétrica;
— g1<0, a amostra tem uma distribuição assimétrica negativa ou enviesada à direita.
Assim como para as variáveis qualitativas, existem gráficos mais indicados para representar variáveis quantitativas. Nesse caso, os histogramas, boxplots (caixas com bigodes) e gráficos de caule e folhas são as ferramentas mais adequadas.
O boxplot é uma representação gráfica que exibe o menor valor sem ser considerado um outlier, o 1º quartil, a mediana (ou 2º quartil), o 3º quartil, o maior valor sem ser outlier, e os outliers moderados e severos. Além disso, ele permite visualizar a distribuição dos dados, sendo uma ferramenta complementar para compreender melhor suas características.
O histograma é um gráfico de barras que mostra a distribuição de frequências dos dados. Cada barra corresponde a uma classe, e sua altura representa a frequência absoluta daquela classe. Esse tipo de gráfico é útil para visualizar, de forma clara, como os dados estão distribuídos em uma determinada amostra.
Já o gráfico de caule e folhas organiza os dados de forma que sua distribuição seja facilmente observada. Comparado ao histograma, ele oferece uma representação mais simples, mas igualmente eficiente, para entender a disposição dos valores na amostra.
Iremos então proceder à análise de cada variável quantitativa, as que se achou mais relevantes para o estudo.
boxplot(gbsg$age, col = "salmon1", horizontal = TRUE, main = "Distribuição da Idade dos Pacientes")
boxplot(gbsg$age, plot = FALSE)$stats
## [,1]
## [1,] 25
## [2,] 46
## [3,] 53
## [4,] 61
## [5,] 80
boxplot(gbsg$age, plot = FALSE)$out
## [1] 21
A variável age apresenta, através da boxplot, uma distribuição assimétrica, com a presença de um único outlier. Esse valor extremo não corresponde ao restante dos dados da amostra e pode indicar uma observação atípica. A identificação desse outlier pode ser útil para compreender possíveis variações no perfil dos pacientes. Podemos identificar se os outliers são severos ou moderados através da resolução de duas fórmulas:
\[\begin{array}{ccc} x < 46 - 3 (61 - 46) <=> x < 1 \\ ou\\ x > 61 + 3 (61 - 46) <=> x > 106 \end{array}\]
\[\begin{array}{ccc} 46 - 3 (61 - 46) < x < 46 - 1.5 (61 - 46) \\ <=> 1 < x < 23.5\\ ou\\ 61 + 1.5 (61 - 46) < x < 61 + 3 (61 - 46)\\ <=> 83.5 < x < 106 \end{array}\]
Reparamos então que não existe nenhum outlier severo nesta variável, pois este está contido entre 1 e 106.
hist(gbsg$age, col="salmon1", xlim = c(20,90), ylim = c(0,150), main = "Distribuição da Idade dos Pacientes")
O histograma desta variável sugere uma variabilidade moderada, com uma distribuição ligeiramente assimétrica negativa, evidenciada pela cauda mais longa à esquerda. As frequências diminuem gradualmente para idades mais jovens e mais avançadas, concentrando-se na faixa etária típica para o diagnóstico de cancro da mama. Esta assimetria negativa pode ser confirmada através do cálculo do coeficiente de assimetria amostral, utilizando o seguinte comando:
skewness(gbsg$age)
## [1] -0.1454636
Podemos também comprovar através do caule e folhas que há uma distribuição assimétrica negativa e onde há mais observações é entre os 45 e 50, ou seja, há mais pacientes registados nesta faixa etária.
stem(gbsg$age)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 2 | 1
## 2 | 55799
## 3 | 01111222222333333444444
## 3 | 555666666777777777788888888888999999
## 4 | 000000001111111111222222222223333333333333333334444444444444444444
## 4 | 55555555555555555555556666666666666666666666666666777777777777777777+57
## 5 | 00000000000000000000011111111111111111111111111111222222222222222222+34
## 5 | 55555555555555666666666666666677777777777777777777788888888888888888+13
## 6 | 00000000000000000000000111111111111111111112222222222222222222222222+39
## 6 | 555555555555555555555555556666666666666667777777777788888889999999
## 7 | 0000000001111223444
## 7 | 55679
## 8 | 00
boxplot(gbsg$size, col = "indianred4", horizontal = TRUE, main = "Distribuição do Tamanho dos Tumores (mm)")
boxplot(gbsg$size, plot = FALSE)$stats
## [,1]
## [1,] 3
## [2,] 20
## [3,] 25
## [4,] 35
## [5,] 57
boxplot(gbsg$size, plot = FALSE)$out
## [1] 60 58 80 80 65 80 70 60 120 60 60 70 80 70 60 70 70 60 70
## [20] 60 60 100 100 58 78 100 60 60 65 75 58 60 61 70
A análise da boxplot relativo à variável size (tamanho do tumor) no conjunto de dados gbsg evela uma distribuição assimétrica positiva, evidenciada por uma cauda direita mais longa. A presença de outliers sugere a existência de casos com tamanhos de tumor mais específicos, o que pode afetar a variabilidade dos dados.
\[\begin{array}{ccc} x < 20 - 3 (35 - 20) <=> x < -25 \\ ou\\ x > 35 + 3 (35 - 20) <=> x > 80 \end{array}\]
\[\begin{array}{ccc} 20 - 3 (35 - 20) < x < 20 - 1.5 (35 - 20) \\ <=> -25 < x < -2.5\\ ou\\ 35 + 1.5 (35 - 20) < x < 35 + 3 (35 - 20)\\ <=> 57.5 < x < 80 \end{array}\]
Reparamos então que há dois outliers severos e oito outliers moderados.
hist(gbsg$size, col="indianred4", xlim = c(0,130), ylim = c(0,300), main = "Tamanho dos Tumores (mm)")
O histograma para esta variável surgere que a distribuição é assimétrica positiva (ou enviesada à esquerda), porque há uma acumulação de frequências no lado esquerdo, ou seja, o tamanho dos tumores sobressai-se os valores entre 10mm e 40mm.
skewness(gbsg$size)
## [1] 1.768018
Podemos também comprovar através do caule e folhas que há uma distribuição assimétrica positiva e onde há mais observações é no caule 2, ou seja, há mais pacientes com tumores avaliados por volta dos 20mm.
stem(gbsg$size)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 0 | 3457788889
## 1 | 00000000111122222222222222233333334444455555555555555555555555555555+45
## 2 | 00000000000000000000000000000000000000000000011111111111111111111111+184
## 3 | 00000000000000000000000000000000000000000000000000000000000000000000+79
## 4 | 0000000000000000000000000000002222223445555555555555555889
## 5 | 000000000000000002222255555555556677888
## 6 | 00000000000155
## 7 | 000000058
## 8 | 0000
## 9 |
## 10 | 000
## 11 |
## 12 | 0
boxplot(gbsg$rfstime, col = "lightskyblue1", horizontal = TRUE, main = "Distribuição do Tempo de Sobrevivência Livre de Recorrência dos Pacientes")
boxplot(gbsg$rfstime, plot = FALSE)$stats
## [,1]
## [1,] 8
## [2,] 567
## [3,] 1084
## [4,] 1685
## [5,] 2659
boxplot(gbsg$rfstime, plot = FALSE)$out
## numeric(0)
A variável rfstime, analisando a boxplot, aparenta ter uma distribuição assimétrica positiva, devido à cauda da direita ser maior. Conseguimos também visualizar que não há uma grande variabilidade de dados, devido à ausência de outliers.
hist(gbsg$rfstime, col="lightskyblue1", xlim = c(0,2500), ylim = c(0,100), main = "Distribuição do Tempo de Sobrevivência Livre de Recorrência dos Pacientes")
O histograma desta variável sugere que há alguma variabilidade, com uma distribuição ligeiramente assimétrica positiva, evidenciada pela cauda mais longa à direita. Analiticamente, calculamos o coeficiente de assimetria amostral para comprovar a afirmação.
skewness(gbsg$rfstime, na.rm = T)
## [1] 0.2627055
O diagrama de caule e folhas da variável rfstime indica que a maior concentração de tempos de sobrevivência livre de recorrência está entre 600 e 1099 dias, com uma distribuição assimétrica positiva. Há poucos valores nos caules superiores, indicando tempos de sobrevivência mais longos para uma minoria, enquanto a maioria dos pacientes apresenta tempos menores.
stem(gbsg$rfstime)
##
## The decimal point is 2 digit(s) to the right of the |
##
## 0 | 1222223456677770112567777888888899
## 2 | 001123334445557778888999990111112223444444555666667777777888999
## 4 | 01222223333445556666677788889999990000002233333344444444555555555555+5
## 6 | 00001222222333334455555566678889900111222223333333444444555555566666
## 8 | 00000011233344445566666666667777788899999922223444455666667777777778
## 10 | 001446688899999999990001111112223455556666777778889999
## 12 | 011112222233333445556888880012233344444445555566666667799
## 14 | 02333344445666677788889990000001123336678899
## 16 | 000002223333444555677888889999000000112222222233334455566667778999
## 18 | 111112222333334444455555666666777880012233346677888888899
## 20 | 1111111222233334555566679333445566677889
## 22 | 0123334447900257777899
## 24 | 04566774566
## 26 | 16
Os gráficos de comparação são ferramentas utilizadas para analisar um ou mais conjuntos de dados, permitindo visualizar as diferenças ou semelhanças entre variáveis. Neste contexto, vamos utilizá-los para examinar a variável meno com a grade.
kable(table(gbsg$meno, gbsg$grade))
| 1 | 2 | 3 | |
|---|---|---|---|
| 0 | 33 | 183 | 74 |
| 1 | 48 | 261 | 87 |
barplot(table(gbsg$meno, gbsg$grade), col=c("indianred4", "salmon1"), beside=T, ylim = c(0,400), xlab = "Grau do tumor", ylab="Frequências", main="Frequências absolutas conjuntas meno x grade", legend.text = FALSE)
legend("top",fill = c("indianred4", "salmon1"), legend=c("Pré-menopausa", "Pós-menopausa"), box.lty = 0,cex = 0.8)
O gráfico apresenta a distribuição conjunta das variáveis grau do tumor e estado menopausal. Ao analisar os padrões, verifica-se que o grau do tumor 1 apresenta poucos casos, tanto na pré-menopausa como na pós-menopausa, sendo aumentados mais frequentemente nesta última. No grau do tumor 2, observa-se o maior número de casos em ambos os estados de menopausa, com clara predominância na pós-menopausa. Já no grau do tumor 3, o número de casos é inferior ao grau 2, embora a pós-menopausa continue a registar uma frequência. De forma geral, os tumores de grau 2 são os mais comuns, especialmente em mulheres na pós-menopausa. Os tumores de grau 1 são raros, enquanto os de grau 3 apresentam uma frequência intermediária. Estes resultados sugerem uma associação entre o estado de menopausa e a gravidade dos tumores, com a pós-menopausa a estar associada a uma maior frequência de casos em todos os graus do tumor.
Testes de hipóteses são um procedimento que conduz a uma tomada de decisão sobre a aceitação ou a não aceitação de determinada hipótese estatística que se coloca sobre uma população.
Seja X uma população com f.m.p. ou f.d.p. \(f (x|\theta)\), onde \(\theta\) é um parâmetro desconhecido, sobre o qual pretendemos fazer um teste de hipóteses.
Num teste de hipóteses há sempre um par de hipóteses complementares:
— A hipótese nula: H0 - a hipótese a testar.
— A hipótese alternativa: H1 - a hipótese que corresponde ao conjunto das alternativas.
Existem 3 tipos de testes:
— Unilaterais à esquerda: H0: \(\theta = \theta_0\) vs. H1: \(\theta<\theta_0\);
— Unilaterais à direita: H0: \(\theta = \theta_0\) vs. H1: \(\theta > \theta_0\);
— Bilaterais: H0: \(\theta = \theta_0\) vs. H1: \(\theta \neq \theta_0\)
O resultado do teste de hipóteses consiste na rejeição ou não rejeição da hipótese nula H0, de acordo com uma regra de decisão baseada numa estatística designada por estatística-teste.
Comecemos por realizar testes paramétricos. Estes são considerados os mais potentes, no entanto, nem sempre será possível usá-los devido aos pressupostos de normalidades que lhes são associados.
Porque nem tudo é “normal” e nem sempre é possível garantir uma aproximação à lei normal para assegurar a precisão, o primeiro passo, antes de realizar os testes, será averiguar a normalidade dos dados.
Existem vários testes de ajustamento ao modelo normal e também testes para avaliar o ajustamento dos dados a um certo modelo.
Neste trabalho, iremos usar o Shapiro-Wilk e o Kolmogorov-Smirnov.
Neste caso, as hipóteses para este tipo de testes são as seguintes:
H0: Os dados seguem uma distriuição normal. vs. H1: Os dados não seguem uma distribuição normal.
Rejeita-se H0, para valores pequenos da estatística de teste e do p-value.
library(nortest)
ad.test(gbsg$age)
##
## Anderson-Darling normality test
##
## data: gbsg$age
## A = 2.4882, p-value = 2.728e-06
Através do teste de Anderson Darling, podemos concluir que, a um nível de significância de 5%, a variável age não segue uma distribuição normal.
Outro teste que pode-se usar é o teste de Kolmogorov-Smirnov para testar se a variável segue uma determinada distribuição, neste caso a normal.
ks.test(gbsg$age, "pnorm", mean(gbsg$age), sd(gbsg$age))
## Warning in ks.test.default(gbsg$age, "pnorm", mean(gbsg$age), sd(gbsg$age)):
## ties should not be present for the one-sample Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: gbsg$age
## D = 0.065642, p-value = 0.005415
## alternative hypothesis: two-sided
Volta-se a concluir que a variável age não segue uma distribuição normal, por isso, não a iremos usar nos testes paramétricos.
ad.test(na.omit(gbsg$age[gbsg$meno == 0]))
##
## Anderson-Darling normality test
##
## data: na.omit(gbsg$age[gbsg$meno == 0])
## A = 4.9224, p-value = 3.328e-12
ad.test(na.omit(gbsg$age[gbsg$meno == 1]))
##
## Anderson-Darling normality test
##
## data: na.omit(gbsg$age[gbsg$meno == 1])
## A = 0.9951, p-value = 0.01253
Da mesma maneira que a variável age, estas também não apresentam uma distribuição normal.
ad.test(gbsg$size)
##
## Anderson-Darling normality test
##
## data: gbsg$size
## A = 20.847, p-value < 2.2e-16
Para estes resultados, concluímos que a variável size não segue uma distribuição normal, por isso, não a iremos usar nos testes paramétricos.
ad.test(gbsg$size[gbsg$grade == "1"])
##
## Anderson-Darling normality test
##
## data: gbsg$size[gbsg$grade == "1"]
## A = 1.274, p-value = 0.002434
ks.test(gbsg$size[gbsg$grade == "1"], "pnorm", mean(gbsg$size[gbsg$grade == "1"], na.rm = TRUE), sd(gbsg$size[gbsg$grade == "1"], na.rm = TRUE))
## Warning in ks.test.default(gbsg$size[gbsg$grade == "1"], "pnorm",
## mean(gbsg$size[gbsg$grade == : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: gbsg$size[gbsg$grade == "1"]
## D = 0.12774, p-value = 0.1422
## alternative hypothesis: two-sided
hist(gbsg$size[gbsg$grade == "1"], col="lightskyblue1", xlim = c(0,80), ylim = c(0,40), xlab = "Variável size em função da variável grade", ylab = "Frequência", main = "Distribuição da variável size em função da variável grade")
ad.test(gbsg$size[gbsg$grade == "2"])
##
## Anderson-Darling normality test
##
## data: gbsg$size[gbsg$grade == "2"]
## A = 16.682, p-value < 2.2e-16
ks.test(gbsg$size[gbsg$grade == "2"], "pnorm", mean(gbsg$size[gbsg$grade == "2"], na.rm = TRUE), sd(gbsg$size[gbsg$grade == "2"], na.rm = TRUE))
## Warning in ks.test.default(gbsg$size[gbsg$grade == "2"], "pnorm",
## mean(gbsg$size[gbsg$grade == : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: gbsg$size[gbsg$grade == "2"]
## D = 0.16868, p-value = 2.126e-11
## alternative hypothesis: two-sided
ad.test(gbsg$size[gbsg$grade == "3"])
##
## Anderson-Darling normality test
##
## data: gbsg$size[gbsg$grade == "3"]
## A = 3.8584, p-value = 1.179e-09
ks.test(gbsg$size[gbsg$grade == "3"], "pnorm", mean(gbsg$size[gbsg$grade == "3"], na.rm = TRUE), sd(gbsg$size[gbsg$grade == "3"], na.rm = TRUE))
## Warning in ks.test.default(gbsg$size[gbsg$grade == "3"], "pnorm",
## mean(gbsg$size[gbsg$grade == : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: gbsg$size[gbsg$grade == "3"]
## D = 0.16455, p-value = 0.0003271
## alternative hypothesis: two-sided
Relativamente ao grau histológico 1, o teste de Anderson-Darling rejeitou a hipótese nula de normalidade, indicando que os dados não seguem uma distribuição normal. Por outro lado, o teste de Kolmogorov-Smirnov não rejeitou a hipótese nula, sugerindo que os dados poderiam ser normais. Diante desses resultados contraditórios, recorreu-se à visualização gráfica dos dados através de um histograma para investigar melhor a sua distribuição. No histograma, observou-se que os dados não formam uma curva normal característica, que seria simétrica com a maioria dos valores concentrados ao redor da média e caudas equilibradas em ambos os lados. Em vez disso, a distribuição é assimétrica, com uma cauda longa à direita. Com base nessa análise gráfica, conclui-se que os dados para o grau 1 não seguem uma distribuição normal, corroborando o resultado do teste de Anderson-Darling. Portanto, assumimos que os dados não são normais.
ad.test(gbsg$rfstime)
##
## Anderson-Darling normality test
##
## data: gbsg$rfstime
## A = 7.6462, p-value < 2.2e-16
Para estes resultados, concluímos que a variável rfstime não se define por uma variável com distribuição normal, por isso, não a iremos usar nos testes paramétricos.
ad.test(gbsg$rfstime[gbsg$status==0])
##
## Anderson-Darling normality test
##
## data: gbsg$rfstime[gbsg$status == 0]
## A = 2.4932, p-value = 2.622e-06
ad.test(gbsg$rfstime[gbsg$status==1])
##
## Anderson-Darling normality test
##
## data: gbsg$rfstime[gbsg$status == 1]
## A = 8.3297, p-value < 2.2e-16
A um grau de confiança de 95%, podemos observar que as variáveis não seguem uma distribuição normal e por isso não iremos usar nos testes paramétricos.
As técnicas clássicas de inferência partem geralmente de pressupostos restritos sobre a população ou populações a partir das quais as observações são retiradas. Os problemas surgem quando estes pressupostos não podem ser cumpridos, pois são contrários aos que geram a população ou não satisfazem os pressupostos.
Nestes casos, podemos recorrer à utilização de testes não paramétricos, isto é, teste que não especificam condições sobres os parâmetros da qual se extraiu a amostra. No entanto, existem suposições básicas à maioria das provas não paramétricas, como por exemplo as observações serem independentes e que haja continuidade da distribuição subjacente aos dados.
Apesar dos testes não paramétricos não serem tão precisos como os testes paramétricos, estes oferecem a vantagem de podermos aplicar a dados do tipo qualitativo. É importante também frisar que não efetuamos testes para o parâmetro da média, mas sim para medianas, pois estas são uma medida de localização menos sensível aos dados.
Os testes não paramétricos podem ser divididos em:
— Testes de localização: este tipo de testes dizem respeito à mediana populacional, que pode apresentar, em muitos casos, melhores resultados;
— Testes de ajuste: estes testes investigam se uma amostra de observações segue ou não uma determinada distribuição. Para o caso de duas amostras, o teste de ajuste investiga se as duas amostras podem ser consideradas provenientes de uma distribuição comum;
— Testes de associação ou correlação: essencialmente são baseados nos ranks em lugar dos valores observados. Envolvem a soma de alguma função da diferença dos ranks entre as amostras para obter uma medida de concordância dos ranks;
— Testes de aleatoriedade: não será falada neste trabalho;
— Testes de dispersão: não será falada neste trabalho.
Exemplo 3.1. Tendo duas amostras das variáveis size e rfstime, pretendemos testar se estas duas seguem a mesma distribuição.
Uma vez que neste estudo os pressupostos paramétricos não se verificam, não podemos aplicar a ANOVA paramétrica. Pelo que, aplica-se uma abordagem não paramétrica da ANOVA. O teste de Kruskal-Wallis uma generalização para k amostras do teste não paramétrico de Wilcoxon-Mann-Whithney, para verificar que provêm da mesma população. Este teste exige que os dados provenham de amostras independentes, de populações com distribuições inerentes contínuas e medidas, no mínimo, numa escala ordinal.
O teste Kruskal-Wallis é utilizado quando queremos testar a hipótese de que vários grupos têm a mesma distribuição. As hipóteses para este teste são então:
H0: As variáveis seguem a mesma distribuição vs. H1: As variáveis não seguem a mesma distribuição
kruskal.test(gbsg$size, gbsg$rfstime)
##
## Kruskal-Wallis rank sum test
##
## data: gbsg$size and gbsg$rfstime
## Kruskal-Wallis chi-squared = 587.53, df = 573, p-value = 0.328
Analisando o resultado do teste, podemos afirmar que se mantém H0 a um nível de significância de 5%, o que significa que as variáveis seguem a mesma distribuição, ou seja, o tamanho do tumor segue a mesma distribuição que o tempo até recorrência.
Exemplo 3.2. Após o estudo estatístico da base de dados gbsg, a doutora A afirma que a mediana do tempo até recorrência ou falecimento dos pacientes é de 1050 dias. No entanto, existem médicos que se encontram céticos quanto a este valor e afirmam que é inferior a 1050 dias.
Primeiramente irá-se definir as hipóteses:
H0: \(\eta_{rfstime}=1050\) vs. H1: \(\eta_{rfstime}<1050\)
library(BSDA)
## Loading required package: lattice
##
## Attaching package: 'BSDA'
## The following object is masked from 'package:datasets':
##
## Orange
SIGN.test(gbsg$rfstime, md=1050, alternative = "less")
##
## One-sample Sign-Test
##
## data: gbsg$rfstime
## s = 348, p-value = 0.6627
## alternative hypothesis: true median is less than 1050
## 95 percent confidence interval:
## -Inf 1120.192
## sample estimates:
## median of x
## 1084
##
## Achieved and Interpolated Confidence Intervals:
##
## Conf.Level L.E.pt U.E.pt
## Lower Achieved CI 0.9497 -Inf 1120.000
## Interpolated CI 0.9500 -Inf 1120.192
## Upper Achieved CI 0.9571 -Inf 1125.000
Depois de se realizar o teste de sinais, podemos observar que não rejeitamos a hipótese nula, para um nível de significância de 5%, ou seja, não há evidência estatística para a mediana não ser 1050 dias.
Exemplo 3.3. O Ministério da Saúde afirma, no seu relatório anual, que a mediana do tamanho do tumor é a mesma para mulheres em pré-menopausa e pós-menopausa. No entanto, os médicos que participaram neste mesmo estudo mostraram-se em desacordo, afirmando que a mediana do tamanho do tumor para mulheres em pré-menopausa é diferente da mediana para mulheres em pós-menopausa. Por outro lado, observou-se que as variáveis não seguiam uma distribuição normal.
Comecemos por designar as hipóteses:
H0: \(\eta_{tumor1}=\eta_{tumor2}\) vs. H1: \(\eta_{tumor1}>\eta_{tumor2}\)
wilcox.test(gbsg$size[gbsg$meno==0],gbsg$size[gbsg$meno==1])
##
## Wilcoxon rank sum test with continuity correction
##
## data: gbsg$size[gbsg$meno == 0] and gbsg$size[gbsg$meno == 1]
## W = 58768, p-value = 0.5988
## alternative hypothesis: true location shift is not equal to 0
Nesta situação, temos evidências estatísticas para aceitar a hipótese nula, com um nível de significância de 5%. Por outras palavras, podemos aceitar a afirmação do ministério da saúde, visto que o p-value > 0.05.
Exemplo 3.5. Tendo duas amostras das variáveis age e rfsime, pretendemos testar se estas duas estão associadas.
Para se avaliar o teste de associação de variáveis é importante verificar se estas são quantitativas ou qualitativas para escolhermos devidamente o método a aplicar. Neste caso, as variáveis são quantitativas e dado que não seguem uma distribuição normal, encontramo-nos em posição de afirmar que seguiremos a via do teste não paramétrico, usando o método de Spearman.
O coeficiente \(\rho\) de Spearman mede a intensidade da relação entre variáveis ordinais. Usa, em vez do valor observado, apenas a ordem das observações.
Deste modo, este coeficiente não é sensível a assimetrias na distribuição, nem à presença de outliers, não exigindo portanto que os dados provenham de duas populações normais.
Antes de realizar, o teste irá-se fazer um gráfico de dispersão e calcular a correlação entre as duas variáveis.
plot(gbsg$rfstime,gbsg$age)
cor(gbsg$rfstime,gbsg$age, method = "spearman")
## [1] 0.043504
Com o valor de correlação obtido, podemos observar que as variáveis não estão associadas. Mas para ter a certeza, iremos realizar então o teste com as seguintes hipóteses:
— H0: As variáveis age e rfstime são independentes. vs. H1: As variáveis age e rfstime não são independentes.
cor.test(gbsg$rfstime,gbsg$age, method = "spearman")
## Warning in cor.test.default(gbsg$rfstime, gbsg$age, method = "spearman"):
## Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: gbsg$rfstime and gbsg$age
## S = 51463976, p-value = 0.2552
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.043504
Concluímos que a um nível de significância de 5% mantém-se a hipótese nula, ou seja, o tempo de sobrevivência não está correlacionado com a idade do paciente. Pelo que, pode haver pacientes mais novos a falecer com menos tempo do que mais velhos.
Neste trabalho, aplicámos os conhecimentos adquiridos durante as aulas, com o objetivo de aprofundar a compreensão dos conceitos estudados. Esta experiência permitiu-nos distinguir com maior clareza as diferenças entre variáveis quantitativas e qualitativas, assim como compreender melhor as distinções entre testes paramétricos e não paramétricos. Além disso, este trabalho proporcionou-nos uma visão mais concreta sobre os desafios e responsabilidades que poderemos enfrentar no futuro enquanto estatísticos.
Análise de Dados com o Software R: Métodos Estatísticos, Computacionais e Econométricos;
Machado, Luís: Testes Não Paramétricos;
Gonçalves, Arminda: Oficina I, 2012;