[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon Profundamente Trivial, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)
Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.
Usamos ggplots ao longo desta série de blogs, mas hoje quero apresentar outro pacote que ajude a personalizar escalas em seus ggplots – o pacote de escalas. Eu uso este pacote com mais frequência para formatar escalas como porcentagem. Não existem muitas maneiras boas de usar porcentagens no meu conjunto de dados, mas um exemplo seria calcular a porcentagem que cada livro contribui para o total de páginas que li em 2019.
reads2019 read_csv("~/Downloads/Blogging A to Z/SaraReads2019_allrated.csv",
col_names = TRUE)
reads2019 reads2019 %>%
mutate(perpage = Pages/sum(Pages))
A nova variável, por página, é uma proporção. Mas se eu exibir esses dados com uma figura, quero que eles sejam porcentagens. Aqui está como fazer isso. (Se você ainda não possui o pacote de escalas, adicione install.packages (“escalas”) no início deste código.
reads2019 %>%
ggplot(aes(perpage)) +
geom_histogram() +
scale_x_continuous(labels = percent, breaks = seq(,.05,.005)) +
xlab("Percentage of Total Pages Read") +
ylab("Books")
Você precisa certificar-se de carregar o pacote de escalas antes de adicionar o atributo labels = percent, ou receberá uma mensagem de erro. Como alternativa, você pode dizer ao R para usar o pacote de escalas apenas para esse atributo adicionando scale :: before percent. Esse truque se torna útil quando você tem muitos pacotes carregados que usam os mesmos nomes de função, porque R usará o pacote carregado mais recentemente para essa função e o mascarará de qualquer outro pacote.
Este post também parece ser uma grande oportunidade para pular no meu highhorse estatístico e falar sobre a diferença entre um histograma e um gráfico de barras. Por que isso é importante? Com tudo o que acontece no mundo – pandemias, eleições políticas etc. -, vi muitos comentários sobre a inteligência de outras pessoas, muitos dos quais mostram um mal-entendido do histograma mais conhecido: a curva normal padrão. Você vê dados brutos, mesmo de um grande número de pessoas e até em um teste padronizado, como um teste de capacidade cognitiva (aka: QI), é Nunca tão limpo ou bonito como aparece em um histograma.
Os histogramas usam um processo chamado “binning”, onde faixas de pontuações são combinadas para formar uma das barras. Os compartimentos podem ser aumentados (incluindo uma faixa maior de pontuações) ou menores, e os compartimentos menores começarão a mostrar a natureza irregular da maioria dos dados, mesmo os chamados dados normalmente distribuídos.
Como exemplo, vamos mostrar como seria minha porcentagem como um gráfico de barras em vez de um histograma (como o acima).
reads2019 %>%
ggplot(aes(perpage)) +
geom_bar() +
scale_x_continuous(labels = percent, breaks = seq(,.05,.005)) +
xlab("Percentage of Total Pages Read") +
ylab("Books")
Como você pode ver, muitos livros foram agrupados para o histograma. Posso personalizar o número de posições no meu histograma, mas, a menos que eu a defina para atribuir uma posição a cada valor x, o resultado será muito mais limpo que o gráfico de barras. O mesmo vale para os escores de capacidade cognitiva. Cada barra é uma posição, e essa posição contém um intervalo de valores. Então, quando falamos sobre pontuações em um teste padronizado, estamos realmente nos referindo a uma série de pontuações.
Agora, meu conjunto de dados de leitura é pequeno – apenas 87 observações. O que acontece se eu gerar um grande conjunto de dados aleatórios?
set.seed(42)test tibble(ID = c(1:10000),
value = rnorm(10000))test %>%
ggplot(aes(value)) +
geom_histogram()
Veja a mensagem de aviso “stat_bin ()”? Está me dizendo que existem 30 posições, então R dividiu o intervalo de pontuações em 30 posições iguais. O que acontece quando eu aumento o número de caixas? Vamos enlouquecer e criar uma lixeira para cada valor de pontuação.
test %$% n_distinct(value)
test %>%
ggplot(aes(value)) +
geom_histogram(bins = 10000)
Não é tão bonito, não é? Lembre-se, são 10.000 valores gerados aleatoriamente para seguir a distribuição normal. Quando você atribui uma lixeira a cada valor, ela não parece muito normalmente distribuída.
Que tal se imitarmos os escores de capacidade cognitiva, com média de 100 e desvio padrão de 15? Vou forçar até que ele tenha números inteiros, para que não tenhamos casas decimais.
CogAbil tibble(Person = c(1:10000),
Ability = rnorm(10000, mean = 100, sd = 15))CogAbil CogAbil %>%
mutate(Ability = round(Ability, digits = ))CogAbil %$%
n_distinct(Ability)
CogAbil %>%
ggplot(aes(Ability)) +
geom_histogram() +
labs(title = "With 30 bins") +
theme(plot.title = element_text(hjust = 0.5))
CogAbil %>%
ggplot(aes(Ability)) +
geom_histogram(bins = 103) +
labs(title = "With 1 bin per whole-point score") +
theme(plot.title = element_text(hjust = 0.5))
(Agora, há mais coisas a serem desenvolvidas no desenvolvimento de um teste de capacidade cognitiva, porque a escala original do teste (pontuações brutas) difere da escala padronizada aplicada para transformar as pontuações brutas em uma com média de 100 e desvio padrão de 15. É aí que entra o valor de um campo inteiro (psicometria).)
Isso não quer dizer que os histogramas mentam – eles simplificam. E eles não foram feitos para serem usados da maneira que muitas pessoas tentam usá-los.
Relacionado