2016-12-02 2 views
-2

У меня есть следующий код, чтобы сделать сюжет, используя ggplot2 (here is the data file):ggplot2 остранения, смазанные линии

sig1 <- ggplot(var_dat_df %>% 
       filter(!(variable %in% c("LogDiffSq", "cusum_ker", "de_ker", "hr_ker"))), 
       aes(x = i, y = -log10(value), group = variable, color = variable)) + 
      geom_line() + 
      scale_color_manual(values = c("#1b9e77", "#d95f02", "#7570b3"), 
          labels = c("CUSUM", "DE", "HR"), 
          name = "Statistic") + 
      geom_hline(yintercept = -log10(0.05), color = "red", linetype = "dashed") + 
      scale_y_continuous(breaks = c(-log10(0.05), 5, 10, 15, 17), 
          labels = expression(alpha, 5, 10, 15, 17)) + 
      xlab("Index") + ylab(expression(-log[10](p))) + 
      labs(title = "Statistical Significance of Detected Change", 
       subtitle = "Without Using Kernel Estimation for Long-Run Variance") + 
      theme_bw() + 
      theme(plot.title = element_text(size = rel(2)), 
       legend.position = "bottom") 

появляется следующее сообщение об ошибке:

Warning message: 
In eval(expr, envir, enclos) : NaNs produced 

Вот результирующее долл. США

plot

Каковы зеленые полосы наверху? Почему они появляются, и как я могу избавиться от них?

+3

Нельзя сказать, без данных, что, вероятно, причиной этого (и извините, но раздаточная не доступен для меня). Кстати, просто дружеский совет: вы можете лично подумать, что dplyr - это дар Бога для программирования R, но некоторые другие этого не делают. Вы увеличиваете потенциальный пул ответчиков, если используете базовую R для простой операции подмножества. Подмножество не имеет никакого отношения к вашему вопросу в любом случае и не должно быть частью * минимального * [воспроизводимого примера] (http://stackoverflow.com/a/5963610/1412059). – Roland

ответ

3

Это потому, что ваши входные значения для log10 являются нулями (или очень маленькими). Вы можете попробовать это:

value_for_log0 <- NA # define value_for_log0 as the value you want to have as output of log10 when it's nearly 0 

ggplot(var_dat_df %>% 
     filter(!(variable %in% c("LogDiffSq", "cusum_ker", "de_ker", "hr_ker"))), 
     aes(x = i, y = ifelse(round(value, 15)==0, value_for_log0,-log10(value)), group = variable, color = variable)) + 
    geom_line() + 
    scale_color_manual(values = c("#1b9e77", "#d95f02", "#7570b3"), 
        labels = c("CUSUM", "DE", "HR"), 
        name = "Statistic") + 
    geom_hline(yintercept = -log10(0.05), color = "red", linetype = "dashed") + 
    scale_y_continuous(breaks = c(-log10(0.05), 5, 10, 15, 17), 
        labels = expression(alpha, 5, 10, 15, 17)) + 
    xlab("Index") + ylab(expression(-log[10](p))) + 
    labs(title = "Statistical Significance of Detected Change", 
     subtitle = "Without Using Kernel Estimation for Long-Run Variance") + 
    theme_bw() + 
    theme(plot.title = element_text(size = rel(2)), 
     legend.position = "bottom") 

enter image description here

+0

Выглядит хорошо! Благодаря! – cgmil

+0

Это делает вид, что наиболее значимые результаты не были получены. Это кажется проблемой для меня. OP должен рассчитать p-значения в логарифмической шкале или создать график, который может изображать их как 'p <...'. – Roland

+0

@Roland, да, в этом случае мы можем захотеть, чтобы журнал p ~ 0 (наиболее значимых) значений: * value_for_log0 * был определен немного выше максимально возможного отрицательного значения логарифмического правдоподобия, так как здесь мы показываем ось y от 0-15, может быть, мы можем определить значение_for_log0 как 16 или что-то еще, чтобы оно могло показаться наиболее значимым. Поэтому поддерживается постоянная * value_for_log0 * конфигурируемая. –