直方图和密度函数——统计学(五)
概率密度函数是概率论核心概念之一,用于描述连续型随机变量所服从的概率分布,是概率计算的通用表达。研究一个随机变量,不只是要看它能取哪些值,更重要的是它取各种值的概率如何!在实际使用时对应离散化后的频率。也可以这样理解,概率密度函数是数学通用表达的频率,而统计学中的频率是将其离散化后的表达,二者本质上是一致的,所以可用直方图近似理解概率密度函数,我们经常将概率密度函数和直方图画在一起来对照。见下图:
一、概率(稳定的频率)
概率:概率亦称“或然率”。它反映随机事件出现的可能性(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()