R: Gráfico de caixa na escala de log vs. transformação de log * e * criação de gráfico de caixa: Não obtém o mesmo resultado

8

Na boxplot()função em R, existe o log =argumento para especificar se um eixo deve ou não estar na escala de log.

Para mim, se eu escolher esta opção (especificar log = "y"como argumento), a forma do gráfico de caixa deve ser a mesma que se eu transformas manualmente os dados primeiro com o log e, em seguida, plote esses dados transformados em log (reconheço os rótulos no eixo será diferente, mas estou me referindo à forma do gráfico). No entanto, este não é o caso.

Aqui está um exemplo de trabalho simples:

set.seed(923489)
data <- rlnorm(300, meanlog = 0, sdlog = 1)
boxplot(data) # Highly skewed right raw data
boxplot(data, log="y") # Data on log scale; less right-skewed
boxplot(log10(data)) # Log base 10-transform data; shape not the same as when specify log="y"
boxplot(log(data)) # Natural log and base 10 give same shape plot (just different axis labels)

Porque isto é assim?

Meg
fonte
2
Um calcula o boxplot em unidades originais e depois o desenha na escala de log, o outro calcula o boxplot na escala de log e depois o desenha. As duas coisas são diferentes qualquer momento que você começa algo que não é puramente baseado nos quantis individuais (as cercas, e, portanto, os bigodes são baseados em funções lineares de quantis)
Glen_b -Reinstate Monica

Respostas:

6

Obviamente, a caixa com o "cinto" mediano parece a mesma. A diferença são os bigodes. Nas configurações padrão, ?boxplotdiz-nos que

Se 'range' for positivo, os bigodes se estendem ao ponto de dados mais extremo, que não passa de 'range' vezes o intervalo interquartil da caixa.

rangeé positivo, ou seja, 1,5 no padrão. Então, os bigodes se estendem 1,5 vezes a caixa, mas em qual escala? Se você ligar boxplot(data, log="y"), é 1,5 nos dados não dimensionados; assim, o bigode mais baixo fica mais longo. Se você ligar, boxplot(log(data))os bigodes são necessariamente simétricos.

Horst Grünbusch
fonte
Obrigado. Não está claro para mim, então, qual é a maneira "mais correta" de representar os dados. Esta postagem (que é para Stata, não para R, mas discute o mesmo problema) parece sugerir que a melhor prática seria primeiro transformar os dados em log e depois rotular manualmente o gráfico de caixa em termos das unidades originais: stata .com / support / faqs / graphics /… Considerações sobre essa abordagem?
729 Meg
2
@ Meg Eu acho que depende se você acha que os bigodes (representando o intervalo) devem ter o mesmo comprimento no espaço de log ou não escalar. Dado que você está transformando os dados em log, o primeiro provavelmente faz mais sentido.
Hao Ye
4

De ?boxplot, você pode ler:

alcance

isso determina até que ponto os bigodes da trama se estendem para fora da caixa. Se o alcance for positivo, os bigodes se estendem ao ponto de dados mais extremo, que não passa de um intervalo de vezes o intervalo interquartil da caixa. Um valor zero faz com que os bigodes se estendam aos extremos dos dados.

O padrão ao plotar um boxplot, range=1.5significa que os bigodes se estenderão 1,5 vezes a faixa interquartil acima do terceiro quartil e abaixo do primeiro quartil; todos os outros pontos serão rotulados como outliers.

As diferenças que você está vendo são baseadas no fato de que a transformação de log dos dados não mantém a distância normalizada de um ponto do terceiro ou primeiro quartil; conforme o esperado com seus dados, após a transformação do log, você terá menos discrepantes com valores muito altos e mais discrepantes com valores baixos.

josliber
fonte
Obrigado pelo seu comentário, que é essencialmente equivalente ao descrito acima. Eu escolhi como resposta "correta" isso com mais votos positivos, mas também agradeço sua opinião.
Meg