R - 正态分布
R - 正态分布
Section titled “R - 正态分布”在统计学中,许多随机过程都表现出正态分布。当绘制成图时,这种分布形成一个对称的钟形曲线。曲线的中心代表数据的均值(平均值),其散布程度由标准差决定。正态分布是统计推断和建模的基石。
R 提供了一套处理正态分布的四个强大函数。
dnorm(x, mean = 0, sd = 1)pnorm(q, mean = 0, sd = 1)qnorm(p, mean = 0, sd = 1)rnorm(n, mean = 0, sd = 1)以下是上述函数中使用的参数描述:
- x, q:分位数向量(x 轴上的值)。
- p:概率向量(0 到 1 之间的值)。
- n:要生成的观测值数量(样本大小)。
- mean:分布的均值。默认为 0。
- sd:分布的标准差。默认为 1。
使用 ggplot2 进行现代可视化
Section titled “使用 ggplot2 进行现代可视化”对于所有绘图示例,我们将使用 ggplot2 包,它是 R 中数据可视化的现代标准。它提供了一个更强大、更灵活的系统,称为图形语法。您可以通过 install.packages("ggplot2") 安装它,或作为 tidyverse 的一部分进行安装。
dnorm():密度函数
Section titled “dnorm():密度函数”dnorm() 函数计算给定均值和标准差下,特定点 x 处的概率密度(钟形曲线的高度)。
library(ggplot2)
# 创建 x 值序列x <- seq(-4, 4, by = 0.1)
# 计算标准正态分布的密度(y 值)y <- dnorm(x, mean = 0, sd = 1)
# 创建用于绘图的数据框data_dnorm <- data.frame(x, y)
# 使用 ggplot2 绘制钟形曲线ggplot(data_dnorm, aes(x = x, y = y)) + geom_line(color = "blue", size = 1) + labs( title = "标准正态分布的概率密度函数 (PDF)", x = "Z 分数", y = "密度" ) + theme_minimal()上述代码生成一个折线图。您将看到经典的钟形曲线,其中心均值为 0,标准差为 1。曲线下的总面积等于 1。
pnorm():累积分布函数 (CDF)
Section titled “pnorm():累积分布函数 (CDF)”pnorm() 计算累积概率,即曲线在给定值 q 左侧的面积。它告诉您从该分布中随机抽取的值小于或等于 q 的概率。
library(ggplot2)
# 创建 x 值序列x <- seq(-4, 4, by = 0.1)
# 计算累积概率(y 值)y <- pnorm(x, mean = 0, sd = 1)
data_pnorm <- data.frame(x, y)
# 绘制 S 形 CDF 曲线ggplot(data_pnorm, aes(x = x, y = y)) + geom_line(color = "darkgreen", size = 1) + labs( title = "标准正态分布的累积分布函数 (CDF)", subtitle = "Z <= x 的概率", x = "Z 分数", y = "累积概率" ) + theme_minimal()此代码生成一个折线图,显示了典型的“S”形曲线(累积曲线)。y 轴从 0 开始,随着 x 的增加而趋近 1,表示密度曲线下累积的面积。
qnorm():分位数函数
Section titled “qnorm():分位数函数”qnorm() 是 pnorm() 的逆函数。您提供一个概率 p(一个面积),它返回对应的分位数(x 轴值)。
library(ggplot2)
# 创建从 0 到 1 的概率序列x <- seq(0, 1, by = 0.01)
# 找到每个概率对应的 Z 分数(分位数)y <- qnorm(x, mean = 0, sd = 1)
data_qnorm <- data.frame(x, y)
# 绘制分位数函数ggplot(data_qnorm, aes(x = x, y = y)) + geom_line(color = "purple", size = 1) + labs( title = "标准正态分布的分位数函数", subtitle = "CDF 的逆函数", x = "概率(左侧面积)", y = "Z 分数(分位数)" ) + theme_minimal()此代码生成的图是 CDF 图的镜像,沿 y=x 线翻转。当 x 轴上的概率从 0 变为 1 时,y 轴上的 Z 分数从负无穷大变为正无穷大。
rnorm():随机数生成
Section titled “rnorm():随机数生成”rnorm() 从指定的正态分布中生成 n 个随机数。这对于模拟和统计实验至关重要。我们可以使用直方图来可视化这些随机数的分布。
library(ggplot2)
# 从均值=50,标准差=10 的正态分布生成 1000 个随机数set.seed(42) # 用于重现性random_numbers <- rnorm(n = 1000, mean = 50, sd = 10)
data_rnorm <- data.frame(value = random_numbers)
# 绘制直方图以可视化分布ggplot(data_rnorm, aes(x = value)) + geom_histogram(aes(y = ..density..), binwidth = 5, fill = "skyblue", color = "black") + geom_density(color = "red", size = 1) + # 叠加密度曲线 labs( title = "1000 个随机正态变量的直方图", subtitle = "均值=50,标准差=10", x = "生成值", y = "密度" ) + theme_minimal()此代码生成一个直方图,其条形近似于指定正态分布的钟形。叠加的红色密度曲线有助于清晰地显示这种底层形状,该形状应以 50 为中心。