Programa
O desvio padrão é uma das formas mais comuns de resumir a dispersão dos dados. No R, a função sd()
oferece uma maneira rápida de calcular essa medida de variabilidade, independentemente de você estar trabalhando com vetores, quadros de dados ou dados agrupados.
Neste artigo, abordarei os conceitos básicos do uso do sd()
no R, explorarei como lidar com valores ausentes e demonstrarei como calcular desvios padrão entre grupos usando funções como tapply()
e pacotes como dplyr
.
O que sd() faz no R?
No R, a função sd()
da base R calcula o desvio padrão de um vetor numérico ou coluna de quadro de dados. Ele mede o quanto os valores nos seus dados se desviam da média, dando a você uma noção de variabilidade ou dispersão.
Se você estiver familiarizado com a ideia de variância, o desvio padrão é simplesmente sua raiz quadrada e, devido à forma como é calculado (tomando a raiz quadrada do desvio quadrático médio), o desvio padrão permanece na mesma escala dos dados originais. Isso facilita a interpretação em termos práticos.
Um exemplo simples de sd()
Suponha que você tenha um conjunto de números e queira saber o quanto eles variam em relação à média.
Veja como você faria isso no R:
exam_scores <- c(75, 80, 85, 90, 95)
sd(exam_scores)
O resultado informa a você o desvio padrão, que quantifica a distância média de cada pontuação em relação à média.
Você pode usar sd()
com qualquer vetor numérico, incluindo números inteiros, duplos ou os resultados de cálculos. Agora, você deve saber que o R trata os vetores lógicos como numéricos (TRUE
como 1
, FALSE
como 0
), de modo que a função sd()
funcionaria tecnicamente em vetores lógicos (você pode experimentá-la se quiser), mas a ideia de desvio padrão é mais significativa para dados numéricos contínuos.
Manipulação de valores faltantes com sd()
Os conjuntos de dados do mundo real geralmente contêm valores ausentes, portanto, vale a pena mencionar esse fato: Se seus dados incluírem valores NA
, sd()
retornará NA
por padrão.
Considere este exemplo:
heights <- c(170, 175, NA, 180, 185)
sd(heights)
O resultado é NA
.
Para ignorar os valores ausentes e calcular o desvio padrão dos números disponíveis, use o argumento na.rm = TRUE
. Ou então, você pode excluir os valores de NA
do seu conjunto de dados, mas eu aconselharia fazer isso somente se fizer sentido.
sd(heights, na.rm = TRUE)
Agora você obterá o desvio padrão para 170, 175, 180 e 185.
Cálculo do desvio padrão para quadros de dados no R
Você pode calcular facilmente o desvio padrão de uma coluna específica em um quadro de dados usando o operador $
. Suponha que você tenha um quadro de dados de pesos de produtos:
product_data <- data.frame( weight = c(1.2, 1.5, 1.3, 1.7, 1.4), price = c(10, 12, 11, 13, 12) )
sd(product_data$weight)
Isso fornece a você o desvio padrão da coluna weight
. Lembre-se de que o site sd()
foi projetado para vetores numéricos, não para quadros de dados inteiros. Sempre selecione a coluna apropriada.
sd() e desvios padrão agrupados
Muitas vezes, você desejará medir a variabilidade dentro dos grupos, como por categoria, região ou por algum outro fator. O R oferece várias maneiras de calcular desvios padrão agrupados. Vou mostrar três:
Usando tapply() para desvios padrão agrupados
Suponha que você tenha dados de vendas de diferentes regiões e queira obter o desvio padrão de cada região:
sales_amount <- c(200, 220, 210, 250, 240, 230)
region <- c("North", "North", "South", "South", "North", "South")
tapply(sales_amount, region, sd)
tapply()
aplica-se sd()
a cada grupo definido por região.
Usando aggregate() para desvios padrão agrupados
Se você preferir seus resultados em um quadro de dados organizado, o site aggregate()
funciona:
sales_data <- data.frame( region = c("North", "North", "South", "South", "North", "South"), amount = c(200, 220, 210, 250, 240, 230) )
aggregate(amount ~ region, data = sales_data, sd)
Isso produz um quadro de dados resumido com o desvio padrão para cada região.
Usando o dplyr para desvios padrão agrupados
Com o pacote dplyr
, os cálculos agrupados ficam ainda mais legíveis. Use summarize()
após o agrupamento:
library(dplyr)
sales_data %>%
group_by(region) %>%
summarize(sd_amount = sd(amount))
Essa abordagem é especialmente útil para conjuntos de dados maiores ou para encadear várias transformações de dados. (Ou se você simplesmente preferir usar o operador pipe, como eu faço).
Erros comuns e dicas
Até mesmo uma função simples como sd() pode causar problemas se você não for cuidadoso. Aqui estão algumas armadilhas comuns:
-
Dados não numéricos:
sd()
só funciona com vetores numéricos. Se seus dados incluírem caracteres ou fatores, você receberá um erro. Use o siteis.numeric()
para verificar seus dados. -
Valores ausentes: Um único
NA
fará com quesd()
retorneNA
. Sempre usena.rm = TRUE
se você quiser ignorar os valores ausentes. -
Pequenos tamanhos de amostra:
sd()
usa n-1 no denominador (desvio padrão da amostra). Para vetores de comprimento 1,sd()
retornaNA
, e não0
.
Acho que esse último erro, em particular, é interessante. Essa é uma diferença pouco conhecida e pode atrapalhá-lo se você estiver transferindo do Python para o R, pois o Python divide pelo desvio padrão da população, não da amostra.
Variações úteis e funções relacionadas no R
O R oferece várias funções relacionadas para medir a variabilidade e resumir os dados:
-
var()
: Calcula a variação, que é o quadrado do desvio padrão. -
apply()
,sapply()
,lapply()
: Útil para aplicar osd()
em linhas ou colunas de matrizes e quadros de dados. mad()
: Calcula o desvio absoluto mediano, que é outra medida interessante e mais robusta de variabilidade.
Deixe-me mostrar a você sd()
usado com apply()
, já que mencionei: Veja como você pode usar o site apply()
para obter o desvio padrão de cada coluna em uma matriz. Como antes, criarei essa matriz em tempo real.
measurement_matrix <- matrix(1:9, nrow = 3)
apply(measurement_matrix, 2, sd)
Isso retorna o desvio padrão de cada coluna, dando a você uma visão geral rápida da variabilidade em várias variáveis.
Conclusão
A função sd()
no R é relativamente simples (é apenas uma linha de código). Mas se você estiver usando-o em relatórios ou apresentações e não souber muito bem os detalhes, inscreva-se em nosso programa de carreira Statistician in R. Há muitas nuances nas estatísticas e na análise de dados, portanto, certifique-se de que você esteja bem informado.
