Значения гистограммы искажены при использовании `ppc_stat()`

Я использую следующие данные:

speed <- c(28, 26, 33, 24, 34, -44, 27, 16, 40, -2, 29, 22, 24, 21, 25, 30, 23, 29, 31, 19, 24, 20, 36, 32, 36, 28, 25, 21, 28, 29, 37, 25, 28, 26, 30, 32, 36, 26, 30, 22, 36, 23, 27, 27, 28, 27, 31, 27, 26, 33, 26, 32, 32, 24, 39, 28, 24, 25, 32, 25, 29, 27, 28, 29, 16, 23)

Мой текущий код Стэна выглядит следующим образом:

```{stan output.var="NMM_PPD"}
data{
  int<lower=1> n;
  vector[n] y;
  real<lower=0> nu;
}

parameters{
  real y_mu;
  real y_sd;
}

model{
  y ~ student_t(nu, y_mu, y_sd);
  y_mu ~ normal(0, 1000);
  y_sd ~ cauchy(0, 5);
}

generated quantities{
  vector[n] y_rep;

  for(i in 1:n){
    y_rep[i] = student_t_rng(nu, y_mu, y_sd);
  }
}
```

И я передаю значения nu и рисую образцы из модели, используя следующий код:

```{r}
data.in <- list(y=speed, n=length(speed), "nu" = 1)
model.fit <- sampling(NMM_PPD, data=data.in)
```

Мы используем функцию extract() для извлечения наших реплицированных наборов данных из объекта model.fit:

```{r}
yrep <- extract(model.fit, pars = "y_rep")[[1]]
```

Теперь я строю гистограммы:

```{r}
ppc_hist(speed, yrep[sample(NROW(yrep), 11), ])
```

введите здесь описание изображения

```{r}
ppc_dens(speed, yrep[sample(NROW(yrep), 2), ])
```

введите здесь описание изображения

```{r}
ppc_dens_overlay(speed, yrep[sample(NROW(yrep), 11), ])
```

введите здесь описание изображения

```{r}
ppc_stat(speed, yrep)
```

введите здесь описание изображения

```{r}
ppc_stat(speed, yrep, stat = "median")
```

введите здесь описание изображения

```{r}
ppc_stat(speed, yrep, stat = "max")
```

введите здесь описание изображения

```{r}
ppc_stat(speed, yrep, stat = "min")
```

введите здесь описание изображения

Обратите внимание, что некоторые из этих гистограмм искажены из-за наличия малых и больших значений. Я хотел бы исправить это искажение, чтобы визуально видеть значения гистограммы.

Я ничего не вижу в документации для ppc_stat(), что позволило бы нам решить эту проблему.


person The Pointer    schedule 30.04.2018    source источник


Ответы (1)


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

ppc_hist(speed, yrep[sample(NROW(yrep), 11), ]) + 
  scale_x_continuous(limits = c(-100,100), trans='pseudo_log')
ppc_stat(speed, yrep, stat = "min") + 
  scale_x_continuous(limits = c(-10000,100), trans='pseudo_log')
person Kreuni    schedule 26.03.2020