Сюжетное предупреждение в R при построении графика вулкана: игнорирование наблюдений

avatar
Yano
1 июля 2021 в 19:03
220
1
0

Я использую plotly в R для создания графика вулкана. Когда я вызываю график, он выглядит нормально, но я также получаю сообщение об ошибке:

Warning message: Ignoring 5 observations

Как узнать, что это за 5 наблюдений? Или почему их игнорируют? Мне нужно проверить, есть ли проблема с этими 5 точками данных. Я визуально проверил свои данные и не вижу никаких проблем, но это огромный набор данных, поэтому я мог что-то упустить.

Может ли кто-нибудь посоветовать некоторые шаги по отладке, пожалуйста?

РЕДАКТИРОВАТЬ: я не уверен, что это поможет, поскольку я подозреваю, что проблема связана с моими данными, а не с кодом, но вот код, который я использую, с упрощенными данными.

library(plotly)
name <- c("Name1", "Name2", "Name3")
log2FoldChange <- c(-2.7419374, 2.9655255, -1.7455225)
padj <- c(2.25e-27, 3.01e-24, 2.56e-25)
df <- data.frame(name, log2FoldChange, padj)
my_plot <- plot_ly(data = df,
                       x = df$log2FoldChange, 
                       y = -log10(df$padj))
Источник
MonJeanJean
1 июля 2021 в 19:08
0

Пожалуйста, предоставьте свой код, чтобы мы могли вам помочь

monte
1 июля 2021 в 19:18
0

Как правило, когда ggplot2 или plotly не могут найти способ построения графика наблюдений, они игнорируют их. Это характерно для значений NA, NaN. Кроме того, если вы используете какую-либо функцию вычисления (например, функцию stat), они также могут игнорировать значения, если они не могут вычислить значения.

MonJeanJean
1 июля 2021 в 19:21
0

@monte Это также может быть значение за пределами диапазона панели, поэтому я не согласен, когда вы говорите игнорировать их.

monte
1 июля 2021 в 19:26
0

@MonJeanJean, я согласен, но я имел в виду, что ggplot игнорирует их, а не вы должны их игнорировать

MonJeanJean
1 июля 2021 в 19:29
0

@monte Хо ок, извините за неправильное понимание

Yano
2 июля 2021 в 00:59
0

@MonJeanJean Я думал об этом, но подозреваю, что проблема больше в моих данных, чем в фактическом коде, и мои данные очень велики, и мне все равно не разрешат ими делиться

Yano
2 июля 2021 в 01:07
0

@monte Хорошие идеи, спасибо. Но я проверил, что все мои записи являются числовыми с помощью функции is.numeric(), и специально искал записи NA и NaN - видимо, их нет.

Ответы (1)

avatar
monte
2 июля 2021 в 09:43
1

Что касается вашего вопроса, я вижу, что вы используете функцию log10 для вычисления точек оси Y, обратите внимание, что журнал не определен для отрицательных чисел (и 0). Эти значения дадут NaN и будут проигнорированы.

Что касается более широкого вопроса, как увидеть, какие данные отображаются на графике, с помощью ggplot и plotly вы можете извлечь данные, но с помощью plotly мне было трудно найти, какие данные не являются построено.

library(palmerpenguins)
#> Warning: package 'palmerpenguins' was built under R version 4.0.5
invisible(library(tidyverse))
#> Warning: package 'dplyr' was built under R version 4.0.3
invisible(library(plotly))

randomRows = sample(1:nrow(penguins), 10) #to replace any 10 rows with NA

penguins[randomRows, "body_mass_g"] = NA

penguins %>% 
  ggplot(aes(bill_length_mm, body_mass_g)) +
  geom_point() -> plot_ggplot

plot_ggplot
#> Warning: Removed 11 rows containing missing values (geom_point).

Как видите, выдается предупреждение о том, что строки были проигнорированы.

Чтобы получить данные графика:

head(ggplot_build(plot_ggplot)$data[[1]])
#>      x    y PANEL group shape colour size fill alpha stroke
#> 1 39.1 3750     1    -1    19  black  1.5   NA    NA    0.5
#> 2 39.5 3800     1    -1    19  black  1.5   NA    NA    0.5
#> 3 40.3 3250     1    -1    19  black  1.5   NA    NA    0.5
#> 4   NA   NA     1    -1    19  black  1.5   NA    NA    0.5
#> 5 36.7 3450     1    -1    19  black  1.5   NA    NA    0.5
#> 6 39.3 3650     1    -1    19  black  1.5   NA    NA    0.5

Столбцы x и y представляют оси X и Y.

В случае plotly есть аналогичный способ извлечения данных, но он показывает только те точки, которые нанесены на график. Я не мог найти способ извлечь значения, которые игнорируются.

pp = plot_ly(penguins, x=~bill_depth_mm, y=~body_mass_g, type='scatter')
plotly_build(pp) -> plotly_data
#> No scatter mode specifed:
#>   Setting the mode to markers
#>   Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
#> Warning: Ignoring 11 observations
#> Warning: `arrange_()` was deprecated in dplyr 0.7.0.
#> Please use `arrange()` instead.
#> See vignette('programming') for more help

names(plotly_data$x$data[[1]])
#>  [1] "x"       "y"       "type"    "mode"    "marker"  "error_y" "error_x"
#>  [8] "line"    "xaxis"   "yaxis"   "frame"

#this gives your x-axis data
plotly_data$x$data[[1]]$x[1:5]
#> [1] 18.7 17.4 18.0 19.3 20.6

#this gives your y-axis data
plotly_data$x$data[[1]]$y[1:5]
#> [1] 3750 3800 3250 3450 3650

Создано 02 июля 2021 г. пакетом reprex (v0.3.0)

Yano
2 июля 2021 в 15:46
1

Большое спасибо за столь обстоятельный ответ! Я смог понять это из этого, там действительно скрывались некоторые NAs.