Расчет и построение графиков различий в распределениях плотности ядра по r - PullRequest
1 голос
/ 10 марта 2020

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

Мой код для дистрибутивов (не различий) выглядит примерно так (SBP = систоли c кровяное давление):

km <- density(data$SBP[data$GENDER==0], bw="nrd0", adjust = 1, kernel = c("gaussian"), window = kernel, n=512, cut=3, give.Rkern = FALSE, na.rm=FALSE)
kf <- density(data$SBP[data$GENDER==1], bw="nrd0", adjust = 1, kernel = c("gaussian"), window = kernel, n=512, cut=3, give.Rkern = FALSE, na.rm=FALSE)

plot(km, xlab="SBP", main="SBP Distribution of Men & Women", col="blue")
lines(kf, col="green")

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

1 Ответ

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

Объекты density имеют элементы x и y, которые соответственно хранят значения оси x и функции распределения. Если вы используете одинаковые аргументы from и to для обоих вызовов density(), то рассчитанные значения x должны быть одинаковыми.

Сохраните значения xy для обеих плотностей в кадре данных и затем объедините / объедините их в x, затем вы можете рассчитать разницу и построить их:

x <- rnorm(1000,0,1)
y <- rnorm(1000,1,1)
fx <- density(x,from = -5,to=5)
fy <- density(y,from = -5,to=5)
plot(fx,col='blue',main="SBP Distribution of Men & Women")
lines(fy, col="green")

dfx <- data.frame(x=fx$x,
                  fx=fx$y)

dfy <- data.frame(x=fy$x,
                  fy=fy$y)

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(ggplot2)

inner_join(dfx,dfy,on='x') %>% 
  mutate(diff=fx-fy) %>% 
  ggplot()+
  geom_line(aes(x=x,y=diff))
#> Joining, by = "x"

Создано в 2020-03-10 пакетом Представить (v0.3.0)

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