Как найти 95% двумерных данных в r? - PullRequest
0 голосов
/ 16 марта 2020

Скажем, у меня есть набор данных:

structure(c(96L, 37L, 18L, 40L, 57L, 46L, 8L, 47L, 3L, 75L, 13L, 
61L, 42L, 72L, 48L, 4L, 79L, 5L, 97L, 6L), .Dim = c(10L, 2L), .Dimnames = list(
    NULL, c("V1", "V2")))

Визуализировать:

      V1 V2
 [1,] 96 13
 [2,] 37 61
 [3,] 18 42
 [4,] 40 72
 [5,] 57 48
 [6,] 46  4
 [7,]  8 79
 [8,] 47  5
 [9,]  3 97
[10,] 75  6

Я хочу найти 95% данных. Итак, я хочу график со всеми точками данных и некоторым указанием (например, прямоугольник или круг), который показывает конкретно 95% данных. Как я могу это сделать?

Отредактировано для комментария. 95% ДИ данных. Например, в одномерном измерении мы можем просто построить данные и найти 95% данных, установив альфа = 0,05 enter image description here

Что если мы увеличим размер до 2D? Кроме того, предположим, что мы не знаем распределение, даны только точки данных.

1 Ответ

0 голосов
/ 17 марта 2020

Исходя из комментариев, вот кое-что, с чего следует начать.

Я использую rstan, чтобы согласовать двумерное нормальное распределение с данными. Мы получаем апостериорные плотности для параметров mu (среднее значение, вектор длины 2) и Sigma (ковариационная матрица 2x2).

Начнем с загрузки необходимой библиотеки и данных выборки.

library(rstan)
df <- structure(c(96L, 37L, 18L, 40L, 57L, 46L, 8L, 47L, 3L, 75L, 13L,
61L, 42L, 72L, 48L, 4L, 79L, 5L, 97L, 6L), .Dim = c(10L, 2L), .Dimnames = list(
    NULL, c("V1", "V2")))
df <- setNames(as.data.frame(df), c("x1", "x2"))

Теперь мы определим нашу модель

model <- "
data {
    int<lower=1> N;     // Number of samples
    vector[2] y[N];     // Samples
}

parameters {
    vector[2] mu;
    cov_matrix[2] Sigma;
}

model {
    // Likelihood
    y ~ multi_normal(mu, Sigma);
}
"

Мы не указываем никаких параметров для параметров, которые по умолчанию равны плоским (неинформативным) приорам. Обратите внимание, что это обычно не очень хорошая идея; тем не менее, выбор основных правил часто требует знания предметной области c и выходит за рамки этого небольшого упражнения. Вы можете найти более подробную информацию здесь .

Давайте подгоним модель

fit <- stan(model_code = model, data = list(N = nrow(df), y = df))

и извлечем образцы из задней плотности сустава для mu

df_samples <- as.data.frame(extract(fit, "mu"))

Теперь мы можем визуализировать данные вместе с достоверным эллипсом на 95% для расчетного среднего mu.

library(ggplot2)
ggplot(df, aes(x1, x2)) +
    geom_point() +
    stat_ellipse(data = df_fit, aes(mu.1, mu.2), colour = "orange") +
    theme_minimal()

enter image description here

Обратите внимание, что

  1. точки обозначают исходные точки данных
  2. оранжевый эллипс обозначает достоверный эллипс на 95% от оцененного среднего параметра из двумерного нормального распределения. Эллипс содержит 95% задней плотности сустава для mu.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...