计算和绘制 r 中核密度分布的差异
Calculating and plotting differences in kernel density distributions in 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], 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")
我对这一切都是陌生的!我很确定我的确切问题也没有在这里被问到,但请引导我找到可能有帮助的任何其他资源。谢谢
density
对象有元素x
和y
元素,分别存储x轴和分布函数值。如果您对两个 density()
调用使用相同的 from
和 to
参数,那么计算出的 x
值应该相同。
将两个密度的 x-y 值存储在数据框中,然后 merge/join 将它们存储在 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"
由 reprex package (v0.3.0)
于 2020 年 3 月 10 日创建
我正在使用 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], 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")
我对这一切都是陌生的!我很确定我的确切问题也没有在这里被问到,但请引导我找到可能有帮助的任何其他资源。谢谢
density
对象有元素x
和y
元素,分别存储x轴和分布函数值。如果您对两个 density()
调用使用相同的 from
和 to
参数,那么计算出的 x
值应该相同。
将两个密度的 x-y 值存储在数据框中,然后 merge/join 将它们存储在 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"
由 reprex package (v0.3.0)
于 2020 年 3 月 10 日创建