直方图和密度函数——统计学(五)

概率密度函数是概率论核心概念之一,用于描述连续型随机变量所服从的概率分布,是概率计算的通用表达。研究一个随机变量,不只是要看它能取哪些值,更重要的是它取各种值的概率如何!在实际使用时对应离散化后的频率。也可以这样理解,概率密度函数是数学通用表达的频率,而统计学中的频率是将其离散化后的表达,二者本质上是一致的,所以可用直方图近似理解概率密度函数,我们经常将概率密度函数和直方图画在一起来对照。见下图:

一、概率(稳定的频率)

概率:概率亦称“或然率”。它反映随机事件出现的可能性(likelihood)大小。随机事件是指在相同条件下,可能出现也可能不出现的事件。
例如,从一批有正品和次品的商品中,随意抽取一件,“抽得的是正品”就是一个随机事件。设对某一随机现象进行了n次试验与观察,其中A事件出现了m次,即其出现的频率为m/n。经过大量反复试验,常有m/n越来越接近于某个确定的常数(此论断证明详见伯努利大数定律)。
该常数即为事件A出现的概率,常用$P (A) $表示。

二、概率密度函数(频率的通用整合)

如果对于随机变量\(X\),\(X\)的分布函数\(F(x)\),存在非负函数\(f(x)\),使对于任意实数\(x\),有\(F(x)=\int_{-\infty}^xf(t)dt\),则称\(X\)连续型随机变量,其中函数\(f(x)\)称为\(X\)概率密度函数,简称概率密度
性质

  • $ f(x)\ge0 $
  • $ \int_{-\infty}^\infty f(x)dx=1$
  • 对于任意实数\(x_1\)\(x_2\) (\(x_1\)\(x_2\)),$ P\{x_1<X\le x_2\}=F(x_2)-F(x_1)=\int_{x_1}^{x_2}f(x)dx$
  • \(f(x)\)在点\(x\)处连续,则有\(F′(x)=f(x)\)
    在这里插入图片描述

三、直方图(频率的离散整合)

直方图表示一个变量的值在范围内的频率。直方图类似于条形图,但不同的是它将值分组到连续的范围内。直方图(Histogram)又称柱状图,直方图中的每个条表示该范围中的数值的个数,是由一系列高度不等的纵条纹或线段表示的数据分布情况。可以使用直方图估计数据的概率分布情况。 直方图是数值数据分布的精确图形表示。这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。这些值通常被指定为连续的,不重叠的变量间隔。间隔必须相邻,并且通常是(但不是必须的)相等的大小。
在绘制直方图时,可使用hist(x)函数,hist()函数有许多参数,可以使用?hist()来了解不同参数的作用及其使用方法。

hist(x, breaks = "Sturges",
     freq = NULL, probability = !freq,
     include.lowest = TRUE, right = TRUE,
     density = NULL, angle = 45, col = NULL, border = NULL,
     main = paste("Histogram of" , xname),
     xlim = range(breaks), ylim = NULL,
     xlab = xname, ylab,
     axes = TRUE, plot = TRUE, labels = FALSE,
     nclass = NULL, warn.unused = TRUE, ...)
#x:通常是向量,也就是直方图所用到的数据。
#freq:默认设置是freq=NULL。当freq=FALSE时,其纵坐标是以概率的形式呈现,而freq=TRUE时则是频率作为纵坐标。
#breaks 直方图的分组,可以理解为设定直方图里面有几根柱子。当为数字向量时,指定直方图在哪些点截断,一定要包含数据的极值。
#xlim,ylim设置x,y轴的范围
#xlab,ylib设定x,y轴的名字
hist(mtcars$mpg, freq=F, breaks=6) 
#在R语言中,FALSE可以用F代替,这样比较简洁。在这里我们以频率/组距来作为纵坐标,并且只绘制5个直方条出来

四、数据分布的密度函数图

自至少 18 世纪以来,直方图一直是流行的可视化选项,部分原因在于它们很容易通过手工生成。现今由于笔记本电脑和手机等日常设备已经具备了广泛的计算能力,我们发现它们越来越多地被密度图取代。在密度图中,我们尝试通过绘制适当的连续曲线来显示数据的基本概率分布,见下图所示。该曲线需要从数据中估计,并且用于该估计过程的最常用方法称为核密度估计。在核密度估计中,我们在每个数据点的位置画一个较小宽度(由一个名为带宽的参数控制)的连续曲线(核),然后我们将所有这些曲线加起来以获得最终密度估计,最广泛使用的核是高斯核(即高斯钟形曲线)。

4.1 核密度估计

核密度估计(kernel density estimation,KDE)是根据已知的一列数据(x1,x2,…xn)估计其密度函数的过程,即寻找这些数的概率分布曲线。密度估计就是给定一列数据,分布未知的情况下估计其密度函数,例如上文的6个数据:c(x1 = −2.1,x2 = −1.3, x3 = −0.4, x4 = 1.9, x5 = 5.1, x6= 6.2),我们看下这列数据的“密度”如何。

画频率直方图就是一种密度估计的方法(如下图,组距为2),这里的“密度”(density)可以感性得理解为一个区间(直方图的组距)内数据数量的多少,右图即为这6个数据的密度曲线(这里简称为密度图),它是左图的外轮廓化,数据量越多,直方图的顶点也越接近一条线。与直方图的情况一样,密度图的确切视觉外观取决于核和带宽选择。带宽参数的行为类似于直方图中的箱宽。如果带宽太小,则密度估计可能变得过于尖锐并且视觉上嘈杂,并且数据中的主要趋势可能被掩盖。另一方面,如果带宽太大,则数据分布中的较小特征可能消失。此外,核的选择会影响密度曲线的形状。

4.2 核密度图的绘制

par(mfrow=c(2,1)) 
d <- density(mtcars$mpg) 
plot(d) 
d <- density(mtcars$mpg)
plot(d, main="Kernel Density of Miles Per Gallon")
polygon(d, col="red", border="blue")
rug(mtcars$mpg, col="brown")

五、直方图和概率密度函数

5.1 直方图和密度曲线的结合

dev.off()
x <- mtcars$mpg ##将mtcars的变量mpg赋值给变量x
hist(x,
     breaks = 12,
     col = "red",
     xlab = "Miles Per Gallon",
     #ylab = "y轴标题",
     main = "Histogram with Density Curve",
     border = "black",
     freq = FALSE,
     density = 12, 
     angle = 45,
     labels = T
)
#添加密度线
lines(density(x),col = "black",lwd = 3)
#添加外框线
box() 

5.2直方图和正态分布曲线的结合

#接下来为直方图加上正态分布曲线
x <- mtcars$mpg ##将mtcars的变量mpg赋值给变量x
h<-hist(x, breaks=10, col="red", xlab="Miles Per Gallon", main="Histogram with Normal Curve") ##xlab参数用来设置X轴标签,main参数用来设置图片的主标题
xfit<-seq(min(x),max(x),length=40) ##生成从X的最小值到最大值的等间距的40个数
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x)) ##使用dnorm()函数生成服从正态分布的概率密度函数值
lines(xfit, yfit, col="blue", lwd=2) ##绘制密度图形,lwd指的是线宽。
box()

5.3 密度图和正态分布图的结合

参考文献

  1. r语言直方图_R语言入门之直方图与密度曲线
  2. 7 可视化分布:直方图和密度图
posted @ 2022-08-02 09:02  郝hai  阅读(7843)  评论(0编辑  收藏  举报