Faça agora histogramas para cada variável numérica da base de dados. Utilze a função abaixo:
hist()
hist()
Passo 1
O que o enunciado pede: gerar histogramas para cada variável numérica da base de dados, usando a função
. Informações fornecidas: apenas a instrução para usar
. Informação importante que falta: a própria base de dados (o objeto
ou arquivo). Conclusão imediata: eu não consigo desenhar os histogramas aqui porque você não enviou a base de dados; porém vou te dar um passo a passo completo, bem didático, e um script pronto em R que você pode colar e executar no seu computador para gerar os histogramas com
.
Passo 2
Primeiro passo prático em R: carregar a base e identificar as colunas numéricas. Código e explicação:
# supondo que você já leu a base em um data.frame chamado 'df'
str(df) # mostra estrutura das colunas
summary(df) # resumo estatístico por coluna
is_num <- sapply(df, is.numeric) # vetor lógico: TRUE para colunas numéricas
names_num <- names(df)[is_num] # nomes das colunas numéricas
Explicação didática:
aplica a função que testa se a coluna é numérica. Uma coluna “numérica” aqui significa tipo numérico (double/integer) no R — ou seja, valores quantitativos com os quais faz sentido construir um histograma.
Passo 3
Tratar valores faltantes antes de plotar: histogramas não aceitam
. Métodos:
- remover
apenas para o vetor que vai ao histograma; - ou decidir imputar (mas imputação é outro tópico).
Exemplo simples (remoção):
x <- df[[col_name]]
x <- x[!is.na(x)]
Explicação:
cria um vetor só com valores não faltantes. Sempre faça isso dentro do loop para cada coluna.
Passo 4
Entendendo a função
— parâmetros importantes:
-
: vetor numérico; -
: define os cortes/“bins” (pode ser número, vetor de quebras ou função); -
: título do gráfico; -
: rótulo do eixo ; -
: cor das barras; -
ou : se , o eixo mostra densidade (área = 1); se (padrão), mostra contagens.
Exemplo básico:
hist(x, main = "Histograma de x", xlab = "x", col = "lightblue", breaks = 30)
Didática: usar
facilita sobrepor uma estimativa de densidade com
.
Passo 5
Como escolher número/largura dos bins de forma sensata. Duas estratégias comuns:
- regra de Sturges (padrão do R): bom para distribuições aproximadamente normais e amostras pequenas;
- regra de Freedman–Diaconis (mais robusta a outliers, considera IQR).
Fórmula de Freedman–Diaconis para a largura do bin:
onde
é o intervalo interquartílico e
é o tamanho da amostra. Depois, número de bins aproximado é
. Código:
n <- length(x)
h <- 2 * IQR(x) * n^(-1/3)
nbins <- max(1, ceiling((max(x) - min(x)) / h))
hist(x, breaks = nbins, ...)
Explicação: a FD tende a dar bins mais estáveis quando há outliers ou distribuição assimétrica.
Passo 6
Fazer histogramas para todas as variáveis numéricas automaticamente (loop) e organizar a janela gráfica. Código exemplo explicado:
num_vars <- names_num
k <- length(num_vars)
# Organização gráfica: até 4 por página (ajuste conforme preferir)
ncol <- 2
nrow <- ceiling(k / ncol)
par(mfrow = c(nrow, ncol), mar = c(4,4,2,1)) # margens: bottom,left,top,right
for (col_name in num_vars) {
x <- df[[col_name]]
x <- x[!is.na(x)]
if (length(x) < 2) {
plot.new()
title(main = paste(col_name, "- sem dados suficientes"))
next
}
# escolher breaks via Freedman-Diaconis, fallback para Sturges se IQR = 0
n <- length(x)
iqr_x <- IQR(x)
if (iqr_x > 0) {
h <- 2 * iqr_x * n^(-1/3)
nbins <- max(1, ceiling((max(x) - min(x)) / h))
} else {
nbins <- "Sturges"
}
hist(x,
main = col_name,
xlab = col_name,
col = "lightblue",
breaks = nbins,
probability = TRUE) # densidade no eixo y
# sobrepor estimativa de densidade não-paramétrica
lines(density(x), col = "red", lwd = 2)
# sobrepor curva normal ajustada (apenas para comparação)
mu <- mean(x)
sigma <- sd(x)
curve(dnorm(x, mean = mu, sd = sigma), add = TRUE, col = "darkgreen", lwd = 2)
legend("topright",
legend = c("densidade (kernel)", "Normal aprox."),
col = c("red", "darkgreen"),
lwd = 2, bty = "n")
}
Explicação passo a passo: o loop pega cada coluna numérica, remove NAs, calcula bins, plota histograma com densidade em y, adiciona uma linha de densidade (estimada por kernel) e uma curva normal com a média e desvio-padrão da amostra para comparação visual.
Passo 7
Salvar os histogramas em arquivos (PNG ou PDF). Exemplos:
# salvar como PDF com múltiplas páginas
pdf("histogramas_numericos.pdf", width = 8, height = 6)
# rodar o mesmo bloco de plotagem aqui (o loop acima)
dev.off()
# ou salvar várias imagens PNG, uma por variável
for (col_name in num_vars) {
png(filename = paste0("hist_", col_name, ".png"), width = 800, height = 600)
# plot do histograma para col_name (mesmo procedimento de limpeza e hist)
dev.off()
}
Dica: use PDF se quiser várias páginas; PNG para imagens separadas.
Passo 8
Interpretação rápida do histograma (como você deve olhar na prova):
- forma (shape): simétrico, assimétrico à direita (assimetria positiva), à esquerda;
- multimodalidade: um pico (unimodal), dois picos (bimodal), etc.;
- caudas e outliers: observações isoladas longe do corpo da distribuição;
- espalhamento: largura da distribuição e concentração dos dados.
Esses pontos ajudam a decidir transformações (log, sqrt) ou modelos estatísticos.
Passo 9
Cuidados e armadilhas comuns:
- não esquecer de remover
; - cuidado com variáveis numéricas que na verdade são categóricas codificadas por números (ex.: 1,2,3) — para essas, prefira barras (
) ou converter para fator; - escolher bins inadequados (muitos bins deixam ruído; poucos bins escondem estrutura);
- verificar se
(toda a amostra com valores iguais) — aí histograma não faz sentido.
Passo 10
Script final pronto (você pode copiar colar no R). Ele lista as variáveis numéricas, abre uma janela com múltiplos histogramas, salva em PDF. Execute após carregar seu data.frame chamado
.
# --- Início do script ---
# verificar que df existe
if (!exists("df")) stop("Coloque seu data.frame em um objeto chamado df antes de rodar.")
# identificar colunas numéricas
is_num <- sapply(df, is.numeric)
num_vars <- names(df)[is_num]
k <- length(num_vars)
if (k == 0) stop("Não há colunas numéricas em df.")
# preparar arquivo de saída
pdf("histogramas_numericos.pdf", width = 8, height = 6)
# parâmetros gráficos: ajustar para caber, duas colunas por página
ncol <- 2
nrow <- 2
par(mfrow = c(nrow, ncol), mar = c(4,4,2,1))
cnt <- 0
for (col_name in num_vars) {
x <- df[[col_name]]
x <- x[!is.na(x)]
cnt <- cnt + 1
if (length(x) < 2) {
plot.new()
title(main = paste(col_name, "- sem dados suficientes"))
} else {
n <- length(x)
iqr_x <- IQR(x)
if (iqr_x > 0) {
h <- 2 * iqr_x * n^(-1/3)
nbins <- max(1, ceiling((max(x) - min(x)) / h))
} else {
nbins <- "Sturges"
}
hist(x,
main = col_name,
xlab = col_name,
col = "lightblue",
breaks = nbins,
probability = TRUE)
lines(density(x), col = "red", lwd = 2)
mu <- mean(x)
sigma <- sd(x)
if (!is.na(sigma) && sigma > 0) {
curve(dnorm(x, mean = mu, sd = sigma), add = TRUE, col = "darkgreen", lwd = 2)
legend("topright", legend = c("densidade (kernel)", "Normal aprox."),
col = c("red", "darkgreen"), lwd = 2, bty = "n")
} else {
legend("topright", legend = c("densidade (kernel)"),
col = c("red"), lwd = 2, bty = "n")
}
}
# a cada nrow*ncol gráficos, limpa a página (o pdf cria páginas automáticas)
}
dev.off()
# --- Fim do script ---
Resposta
Copie e execute o script R mostrado no último passo (o bloco entre “Início do script” e “Fim do script”) substituindo o nome do seu data.frame por
se necessário.