P é para porcentagem | R-bloggers

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[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.

## -- Attaching packages ------------------------------------------- tidyverse 1.3.0 --
##  ggplot2 3.2.1      purrr   0.3.3
## tibble 2.1.3 dplyr 0.8.3
## tidyr 1.0.0 stringr 1.4.0
## readr 1.3.1 forcats 0.4.0
## -- Conflicts ---------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
reads2019  read_csv("~/Downloads/Blogging A to Z/SaraReads2019_allrated.csv",
col_names = TRUE)
## Parsed with column specification:
## cols(
## Title = col_character(),
## Pages = col_double(),
## date_started = col_character(),
## date_read = col_character(),
## Book.ID = col_double(),
## Author = col_character(),
## AdditionalAuthors = col_character(),
## AverageRating = col_double(),
## OriginalPublicationYear = col_double(),
## read_time = col_double(),
## MyRating = col_double(),
## Gender = col_double(),
## Fiction = col_double(),
## Childrens = col_double(),
## Fantasy = col_double(),
## SciFi = col_double(),
## Mystery = col_double(),
## SelfHelp = col_double()
## )
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.

## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
reads2019 %>%
ggplot(aes(perpage)) +
geom_histogram() +
scale_x_continuous(labels = percent, breaks = seq(,.05,.005)) +
xlab("Percentage of Total Pages Read") +
ylab("Books")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Leia Também  Estatísticas de aprendizagem: A aleatoriedade é uma besta estranha

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.

Leia Também  A pesquisa da Travelex revela "24% imóveis" de consumidores que se recusam a ficar sem dinheiro

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?

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
set.seed(42)

test tibble(ID = c(1:10000),
value = rnorm(10000))

test %>%
ggplot(aes(value)) +
geom_histogram()

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

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.

## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
##
## set_names
## The following object is masked from 'package:tidyr':
##
## extract
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))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
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).)

Leia Também  Recriar um aplicativo brilhante com o Flask

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.



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: o email, Twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br