Матрица плотности вероятности Вычитание для тепловых карт - PullRequest
0 голосов
/ 18 сентября 2018

Довольно плохо знаком с R и застрял.Я пытаюсь нормализовать двумерную плотность вероятности тепловой карты, вычитая двумерную плотность вероятности из другого набора данных.Я смотрю, где поведение происходит в космосе, однако, чтобы сделать это, я хочу вычесть то, от чего испытуемые просто проводят большую часть своего времени, когда поведение происходит, чтобы получить представление об относительной плотности только поведения.Чтобы сделать это, я пытаюсь найти матрицы плотности вероятности, используемые для построения тепловой карты для следующего кода:

ctrlplot<-ctrl %>% ggplot(aes(x=x, y=y)) +
  stat_density_2d(geom = "raster", aes(fill = stat(density)), contour = FALSE)+
  scale_fill_gradientn(colours=matlab.like(15), na.value = "gray",
   as lowertick, uppertick, interval
   limit=c(0,1.3e-05))   #sets the static limit of probabilities.  

Это работает для построения тепловой диаграммы для любого набора данных, однако я не могу найти, где ggplotили stat_density_2d хранит данные плотности, чтобы вычесть их.

В качестве альтернативы я попытался получить только плотности для обоих наборов данных, используя следующий код и сохранив его как переменную dens:

n<-100
h<-c(bandwidth.nrd(ctrl$x),bandwidth.nrd(ctrl$y))
dens<-kde2d(ctrl$x,ctrl$y,n=n,h=h)

Теперь я не уверен, как вычесть результирующиеz значения и вернуть его в тепловой график.Я знаю, что, вероятно, есть простое решение для этого, но я определенно застрял.Будем очень благодарны за любые советы о том, как это сделать проще, или за другие советы о том, как вычитать плотности друг от друга.

ОБНОВЛЕНИЕ: я нашел способ получить данные о плотности из ggplot.Мне удалось получить данные плотности из двух разных наборов данных, вычесть векторы и поместить плотности обратно в исходный кадр данных, используя следующий код:

ctrlplot<-ctrl %>% ggplot(aes(x=x, y=y)) +
  stat_density_2d(geom = "raster", aes(fill = stat(density)), contour = FALSE)+
  scale_fill_gradientn(colours=matlab.like(15), na.value = "gray")


ctxplot<-ctx %>% ggplot(aes(x=x, y=y)) +
  stat_density_2d(geom = "raster", aes(fill = stat(density)), contour = FALSE)+
  scale_fill_gradientn(colours=matlab.like(15), na.value = "gray")


ctrlplot2<-ggplot_build(ctrlplot)
gbctrl<-ctrlplot2$data[[1]]
 densctrl<-gbctrl$density

gbctx<-ggplot_build(ctxplot)
gbctx<-gbctx$data[[1]]
 densctx<-gbctx$density

diff_ctrl_ctx<-densctrl-densctx

gbctrl$density<-diff_ctrl_ctx
ctrlplot2$data[[1]]<-gbctrl

ctrlplot2
ctrlplot

Однако последние два графика ctrlplot (оригинал)и ctrlplot2 (вычтенные плотности) дают тот же график.Не уверен, что я не заменяю правильные части фрейма данных, чтобы он обновлялся для графической части, поскольку в исходном ggplot_build есть разные списки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...