计算和绘制r中内核密度分布的差异

我正在使用R,我想计算x轴上每个点的两个内核密度分布之间的差异,并绘制该差异,但遇到了一些麻烦。我可以执行某些功能或方式吗?就上下文而言,我使用的是血压数据,我想计算男女之间每个血压点的差异。

我的分布代码(不是差异)看起来像这样(SBP =收缩压):

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],na.rm=FALSE)

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

我对这一切完全陌生!我敢肯定,在这里也没有提出我的确切问题,但是请带我到其他可能有用的资源。谢谢。

sjh102495 回答:计算和绘制r中内核密度分布的差异

density对象具有元素xy元素,它们分别存储x轴和分布函数值。如果您为两个from调用使用相同的todensity()争论,则计算的x值应相同。

将两个密度的x-y值存储在一个数据帧和d中,然后在x上合并/合并它们,然后您可以计算差值并绘制它们:

x <- rnorm(1000,1)
y <- rnorm(1000,1,1)
fx <- density(x,from = -5,to=5)
fy <- density(y,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"

reprex package(v0.3.0)于2020-03-10创建

本文链接:https://www.f2er.com/2674193.html

大家都在问