如何计算由x,y坐标指定的分布的矩

时间:2015-03-03 16:58:49

标签: r

想象一下,我有一个简单的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,偏度,峰度等来表征?谢谢, 乔恩

1 个答案:

答案 0 :(得分:1)

我建议您在数据上使用approxfun。另外,我会事先为你的数据添加0:

dta_example <- rbind(c(0,0), dta_example, c(0,0))
  1. 首先创建一个与您的数据相对应的函数

    f <- approxfun(dta_example$x, dta_example$y)
    
  2. 以数字方式计算$ 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
    

  3. 编辑:一个简单的三角形分布的例子。

    dat <- data.frame(x = c(-1, 0, 1), y = c(0, 1, 0))
    f <- approxfun(dat$x, dat$y)
    
    1. 分布图

      plot(f, xlim=c(-2,2), col="red") ; grid()
      
    2. Triangular Distribution

      1. 检查-1和+1之间的积分是否等于1

        integrate(f, lower=-1, upper=+1)
        
      2. 计算均值和方差

        integrate(function(x) x*f(x), lower=-1, upper=+1)
        integrate(function(x) x^2*f(x), lower=-1, upper=+1)