R:尖顶曲线下的面积?
R: area under curve of ogive?
我有一个算法,它使用排序后的 y 数据的 x,y 图来生成一个尖角。
然后我推导出曲线下的面积来推导出%。
我想使用核密度估计做类似的事情。我喜欢如何使用内核密度来平滑 upper/lower 边界(即最小值和最大值将略微超出我的硬编码输入)。
无论哪种方式...我想知道是否有一种方法可以将 ogive 视为一种累积分布函数and/or使用核密度估计来推导给定 y 数据的累积分布函数?
如果这是一个令人困惑的问题,我深表歉意。我知道有一种方法可以得出累积频率图(即 ogive)。但是,我无法确定如何根据这个累积频率图得出百分比。
我不要的是ecdf。我知道该怎么做,而且我并没有完全尝试捕获 ecdf。但是,而是在给定两个间隔的情况下整合一个尖顶。
我不太确定你在想什么,但这里有一种计算核密度估计曲线下面积的方法(或者更一般地说,对于任何你有等距 x 的 y 值的情况) -values(当然你也可以推广到变量 x 区间):
library(zoo)
# Kernel density estimate
# Set n to higher value to get a finer grid
set.seed(67839)
dens = density(c(rnorm(500,5,2),rnorm(200,20,3)), n=2^5)
# How to extract the x and y values of the density estimate
#dens$y
#dens$x
# x interval
dx = median(diff(dens$x))
# mean height for each pair of y values
h = rollmean(dens$y, 2)
# Area under curve
sum(h*dx) # 1.000943
# Cumulative area
# cumsum(h*dx)
# Plot density, showing points at which density is calculated
plot(dens)
abline(v=dens$x, col="#FF000060", lty="11")
# Plot cumulative area under curve, showing mid-point of each x-interval
plot(dens$x[-length(dens$x)] + 0.5*dx, cumsum(h*dx), type="l")
abline(v=dens$x[-length(dens$x)] + 0.5*dx, col="#FF000060", lty="11")
更新以包含 ecdf
函数
为了解决您的意见,请查看下面的两个图。第一个是我在上面使用的混合正态分布的经验累积分布函数 (ECDF)。请注意,此数据的图在下方与上方看起来相同。第二个是普通正态分布的 ECDF 图,均值=0,标准差=1。
set.seed(67839)
x = c(rnorm(500,5,2),rnorm(200,20,3))
plot(ecdf(x), do.points=FALSE)
plot(ecdf(rnorm(1000)))
我有一个算法,它使用排序后的 y 数据的 x,y 图来生成一个尖角。
然后我推导出曲线下的面积来推导出%。
我想使用核密度估计做类似的事情。我喜欢如何使用内核密度来平滑 upper/lower 边界(即最小值和最大值将略微超出我的硬编码输入)。
无论哪种方式...我想知道是否有一种方法可以将 ogive 视为一种累积分布函数and/or使用核密度估计来推导给定 y 数据的累积分布函数?
如果这是一个令人困惑的问题,我深表歉意。我知道有一种方法可以得出累积频率图(即 ogive)。但是,我无法确定如何根据这个累积频率图得出百分比。
我不要的是ecdf。我知道该怎么做,而且我并没有完全尝试捕获 ecdf。但是,而是在给定两个间隔的情况下整合一个尖顶。
我不太确定你在想什么,但这里有一种计算核密度估计曲线下面积的方法(或者更一般地说,对于任何你有等距 x 的 y 值的情况) -values(当然你也可以推广到变量 x 区间):
library(zoo)
# Kernel density estimate
# Set n to higher value to get a finer grid
set.seed(67839)
dens = density(c(rnorm(500,5,2),rnorm(200,20,3)), n=2^5)
# How to extract the x and y values of the density estimate
#dens$y
#dens$x
# x interval
dx = median(diff(dens$x))
# mean height for each pair of y values
h = rollmean(dens$y, 2)
# Area under curve
sum(h*dx) # 1.000943
# Cumulative area
# cumsum(h*dx)
# Plot density, showing points at which density is calculated
plot(dens)
abline(v=dens$x, col="#FF000060", lty="11")
# Plot cumulative area under curve, showing mid-point of each x-interval
plot(dens$x[-length(dens$x)] + 0.5*dx, cumsum(h*dx), type="l")
abline(v=dens$x[-length(dens$x)] + 0.5*dx, col="#FF000060", lty="11")
更新以包含 ecdf
函数
为了解决您的意见,请查看下面的两个图。第一个是我在上面使用的混合正态分布的经验累积分布函数 (ECDF)。请注意,此数据的图在下方与上方看起来相同。第二个是普通正态分布的 ECDF 图,均值=0,标准差=1。
set.seed(67839)
x = c(rnorm(500,5,2),rnorm(200,20,3))
plot(ecdf(x), do.points=FALSE)
plot(ecdf(rnorm(1000)))