想象一下,我有一个简单的x,y坐标数据框。
dta_example <- data.frame(
x=c(0,1,2,3,4,5),
y=c(0.1, 0.4, 0.5, 0.6, 0.3, 0.1)
)
plot(NULL, xlim=c(0, 6), ylim=c(0,1), xlab="x", ylab="f(x)")
polygon(
x=c(dta_example$x[1], dta_example$x, dta_example$x[length(dta_example$x)]),
y=c(0, dta_example$y, 0),
col="red"
)
points(dta_example, pch=16)
我如何使用上述方法来产生经验概率分布,然后我可以用均值,sd,偏度,峰度等来表征?谢谢, 乔恩
答案 0 :(得分:1)
我建议您在数据上使用approxfun
。另外,我会事先为你的数据添加0:
dta_example <- rbind(c(0,0), dta_example, c(0,0))
首先创建一个与您的数据相对应的函数
f <- approxfun(dta_example$x, dta_example$y)
以数字方式计算$ n $ -th时刻
n <- 3
xmin <- min(dta_example$x)
xmax <- max(dta_example$x)
m <- integrate(function(x) x^n*f(x), lower=xmin, upper=xmax)
m
# 47.1216 with absolute error < 0.002
编辑:一个简单的三角形分布的例子。
dat <- data.frame(x = c(-1, 0, 1), y = c(0, 1, 0))
f <- approxfun(dat$x, dat$y)
分布图
plot(f, xlim=c(-2,2), col="red") ; grid()
检查-1和+1之间的积分是否等于1
integrate(f, lower=-1, upper=+1)
计算均值和方差
integrate(function(x) x*f(x), lower=-1, upper=+1)
integrate(function(x) x^2*f(x), lower=-1, upper=+1)