You are currently viewing Getting proportions (%) in R shouldn’t cause you a headache
crosstable headache rstudio posit

Obter proporções (%) em R não deve ser uma dor de cabeça

Solução: Função Crosstable ( ) para posit (RStudio)

Photo by Ron Lach from Pexels

Artigo na Medium disponível aqui

Cansado de tentar obter frequências relativas (porcentagens%) em R? Existe uma função para o pacote “gmodels” que poderá facilitar a tua vida; Crosstable( ).

Este tutorial usa um exemplo de pesquisa clínica (Framingham Heart Study) como o exemplo perfeito.

Primeiros passos

Primeiro acessa a https://www.r-project.org/ para fazer o download do R e, em seguida, para https://rstudio.com/ para fazer o download do ambiente RStudio ( baseado em R). Todos são freeware.

A coorte Framingham Heart Study é a coorte clínica mais antiga (desde 1948 ). Esta coorte se concentra em doenças cardiovasculares e fatores de risco na população em geral.

Após concluir a instalação, abre o teu RStudio. Em seguida, vá para o console e tenta as seguintes etapas

Abrir e anexar a base de dados

Vamos extrair uma versão disponível publicamente do estudo Framingham heart study

https://www.kaggle.com/amanajmera1/framingham-heart-study-dataset/version/1

Neste site, você também podes consultar a codificação das diferentes variáveis. Por exemplo, em relação ao sexo (variável masculino; male=1 significa masculino e male=2 significa feminino)

Primeiro baixa o ficheiro para o teu computador.

Em seguida, acessa RStudio e abre o arquivo usando as seguintes opções (forma maneira mais fácil)

File -> Import Dataset -> From Text (base) (ficheiro .csv)

Em seguida, se abrirá uma janela com a base de dados chamada framingham com 4.240 observações (linhas) e 16 variáveis ​​(colunas).

Vamos "anexar" a base de dados (aqui para saber POR QUE fazemos isto).

attach(framingham)

Vamos começar o nosso tutorial do Crosstable a responder a uma pergunta clínica

Vamos tentar responder à pergunta “Qual ​​é a distribuição da doença coronariana (DAC) entre os sexos?” usando tanto o Método Clássico quanto o Pacote Crosstable()

  • male é uma variável para género;
  • TenYearCHD é a variável para a prevalência de doença coronariana após 10 anos.

Vamos começar por obter as proporções (%) da maneira clássica…

table(male,TenYearCHD)

Vemos que 343 homens e 301 mulheres tinham CHD. Mas ainda não temos as proporções (%) para cada grupo.

O truque é criar uma variável intermediária “z” (podes nomeá-la como quiseres), que representa uma tabela dois por dois com nossas variáveis ​​discretas.

Depois, dividimos a contagem absoluta de cada célula pela soma de todos os casos na mesma linha. Isso mostrará uma proporção (entre 0 e 1)

z <- table(male,TenYearCHD)
z/rowSums(z)

Para limpeza, podemos remover este valor extra “z”

z <- table(male,TenYearCHD)
z/rowSums(z)
rm(z)

Após correr tudo

Vemos que 12% das mulheres e 19% dos homens tiveram CHD após 10 anos.

Resp: 301 (12%) pacientes do sexo feminino e 343 (19%) do sexo masculino tinham CHD.

A maneira mais fácil - a função "CrossTable"

Precisamos ter o pacote “gmodels” instalado.

install.packages("gmodels")
library("gmodels")

Vamos usar a função CrossTable .

CrossTable(male,TenYearCHD)

Vemos o significado das 5 linhas dentro de cada célula, na caixa acima.

No entanto, se precisarmos apenas da proporção de linha, podemos digitar…

CrossTable(male,TenYearCHD, prop.r=TRUE,prop.c=FALSE,prop.t=FALSE,prop.chisq=FALSE)

O único argumento que queremos é a probabilidade para cada linha (prop-r).

Resp: 12% dos pacientes do sexo feminino e 19% dos pacientes do sexo masculino tiveram CC após 10 anos.

Teste do significado estatístico

Podemos ir ainda mais longe e testar se essa diferença é estatisticamente significativa com o teste χ2 (qui-quadrado).

CrossTable(male,TenYearCHD, prop.r=TRUE,prop.c=FALSE,prop.t=FALSE,prop.chisq=FALSE,chisq=TRUE)

Como, p<0,05 (p=8,69e-09), o que significa que há uma diferença estatisticamente relevante entre DAC em homens e mulheres.

Como p<α (erro tipo 1) de 0,05, podemos rejeitar a hipótese nula. Mais sobre o valor do p-value aqui.

Resp: Existe uma diferença estatística entre as DCC entre os sexos, onde 12% dos pacientes do sexo feminino e 19% dos pacientes do sexo masculino apresentaram DCC após 10 anos (p<0,05).

E se precisar de percentagens de 0 a 100%…

Se precisares de porcentagens (0–100%) em vez de 0–1, há muitas maneiras de conseguir isso.

O método mais simples que encontrei é oformat=“SPSS” (o padrão seria format= “SAS”)

CrossTable(male,TenYearCHD, prop.r=TRUE,prop.c=FALSE,prop.t=FALSE,prop.chisq=FALSE,format="SPSS")

Vemos agora, novamente, que 19% (343) dos participantes do sexo masculino e 12% (301) do sexo feminino tiveram CHD após 10 anos.

BONUS — o significado de todos os argumentos possíveis para a função CrossTable…

  • digits — Número de dígitos após o ponto decimal para proporções de células
  • max.width — No caso de uma tabela 1 x n, o padrão será imprimir o resultado a horizontalmente. Se o número de colunas exceder max.width, a tabela será quebrada para cada incremento sucessivo de colunas max.width. Se quiseres uma tabela vertical de coluna única, define max.width como
  • expected — Se TRUE, chisq será TRUE e as contagens de células esperadas do χ2 serão incluídas
  • prop.r — Se TRUE, as proporções das linhas serão incluídas
  • prop.c — Se TRUE, as proporções das colunas serão incluídas
  • prop.t — Se TRUE, as proporções das tabelas serão incluídas
  • prop.chisq — Se TRUE, a contribuição qui-quadrado de cada célula será incluída
  • chisq — Se TRUE, os resultados de um teste qui-quadrado serão incluídos
  • fisher — Se TRUE, os resultados de um teste exacto de Fischer serão incluídos
  • mcnemar — Se TRUE, os resultados de um teste de McNemar serão incluídos
  • resid — Se TRUE, o residual (Pearson) será incluído
  • sresid — Se TRUE, o resíduo padronizado será incluído
  • asresid — Se TRUE, o resíduo padronizado ajustado será incluído
  • missing.include — Se TRUE, remove quaisquer níveis de fator não utilizados
  • format — SAS (padrão) ou SPSS, dependendo do tipo de resultado desejado.
  • dnn — os nomes a serem dados às dimensões no resultado (os nomes dos dimnames).

Disclosure

Este artigo NÃO fornece nenhum tipo de recomendação médica individual. Se precisares de aconselhamento médico, visita um médico licenciado no teu país.

Referências

https://www.rdocumentation.org/packages/gmodels/versions/2.18.1.1/topics/CrossTable