• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言学习系列(画向量的密度直方图)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

利用R语言画密度直方图比较方便,但为了理解密度函数的意义和如何计算密度值,于是用plot,lines两个画图函数来自己实现密度直

方图的画图程序脚本如下:

DrawDensity = function(x,bw=5)
{
   if(any(bw<=0))
   {
     bw <- 5
    
   }
   #print(bw)
   n <- length(x)
   if(any(n>0))
   {
     mn <- min(x)
     mx <- max(x)
     rmn <- (mn %/% bw)
     begx <-  rmn * bw
     rmn <- (mx %/% bw)
     endx <- (rmn) * bw
     if ((mx-rmn * bw) > 0)
     {
        endx <- (rmn+1) * bw
     }
     
     segs <- (endx-begx)  %/% bw
     segcounts <- numeric(segs)
     validsegs <- 0
     print(segs)
     for(i in 1:segs)
     {
        slw <- begx+(i-1) * bw
        sup <- begx+(i) * bw
        tmp<- x[x > slw & x<=sup];
        segcounts[i]<- length(tmp)
        if(length(tmp)>0)
        {
           validsegs <- validsegs+1
        }
     }
     #计算基本密度:向量长度与图形分割宽度的积倒数.
     baseIndesity = 1 / (n*bw);
     ymax = baseIndesity * (max(segcounts)+1)
     plot(c(begx,endx),c(0,0),xlim=c(begx,endx),ylim=c(0,ymax))
     lines(c(begx,endx),c(0,0))
     lines(c(0,0),c(0,ymax))
     #print(segs)
     for (i in 1:segs)
     {
       x1 <- begx+(i-1) * bw
       x2 <- begx+(i) * bw
       y<- baseIndesity  * segcounts[i]
       drawHist(x1,x2,y)
       #print(i)
     }

   }
}
drawHist = function(x1,x2,y)
{
  #print(x1);print(x2);print(y)
  lines(c(x1,x1),c(0,y))
  lines(c(x1,x2),c(y,y))
  lines(c(x2,x2),c(0,y))
}

理解核密度函数的关键在理解单位密度的计算公式:1/(n*bw)。因为画直方图需要分段,每个直方图的面积代表落在该图形区域的概率P[a<X<=b],一般直方图x轴采用相等分段方式,前面的bw值就是x轴上直方图的长,高代表落于该直方图的向量个数m.显然有密度d满足:d*m*bw=m/n (P[a<X<=b]) -> d=1/(n*w).从这也可以看出核密度直方图对应的概率密度函数就是一种分段函数

d(x)=mi/n * x(a+(i-1)*bw <x<=a+i * bw, mi为落在i段内的向量个数,n为向量总数,bw是每个直方图想x轴上的长度).
可以很轻易的得出随机变量X的分布函数F(x)(当然也需要分段),这里不好写表达式,大家自己可以想一下.从上面可以看出,如果采样样本值足够多,分段bw足够小的时候,d(x)就可以不断逼近真实的概率密度函数。
 以上程序在R.2.15上测试通过,并与hist画图对比,图形类似.

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap