理论部分
矩形分布(均匀分布),是指在某一区间内,随机变量取任何值的概率都是相同的。这种分布的概率密度函数在一个特定的区间内是一个常数,因此其图形呈现出一个矩形的形状,故得名为“矩形分布”。在概率论和统计学中,这是一种非常重要的概率分布方式,具有广泛的应用。在实际应用中,当某一随机变量在一区间内取值的可能性没有偏向时,就可以采用矩形分布(均匀分布)来描述这种随机性,比如实验室技术报告中计算B类不确定度。
矩形分布定义及PDF函数
当 X i X_{i} Xi独立时,可根据一系列的测量值分析,为 X i X_{i} Xi设定 P D F g x ( ξ ) PDFgx(\xi) PDFgx(ξ),当某些测量值 X i X_{i} Xi相互独立时,对它们的每一个设定PDF,而其余的 X i X_{i} Xi设定联合PDF。
某量X的可获信息
对于某量X,仅知其下限为 a a a,上限为 b b b, a < b a<b a<b
X所设定的分布
矩形分布: R ( a , b ) R(a,b) R(a,b)
矩形分布的PDF函数
g x ( ξ ) = { 1 b − 1 , a ≤ ξ ≤ b 0 , 其他 gx(\xi)= \begin{cases} \frac{1}{b-1}, a \leq \xi \leq b \\ 0, 其他 \end{cases} gx(ξ)={b−11,a≤ξ≤b0,其他
使用R语言计算并验证
矩形分布图形绘制
library(ggplot2)
a <- 0 # 矩形分布下限
b <- 1 # 矩形分布上限
height <- 1 / (b - a) # 矩形分布高度,即1除以区间的宽度
x <- seq(a - 0.2, b + 0.2, length.out = 300) # 扩展x范围以显示分布之外的区域
# y值表示矩形分布的概率密度函数
y <- ifelse(x >= a & x <= b, height, 0)
df <- data.frame(x = x, y = y)
ggplot(df, aes(x = x, y = y)) +
geom_line(colour = "blue", linewidth = 1.0) +
geom_vline(xintercept = c(a, b), linetype = 2, colour = "gray") +
labs(x = "x", y = "Density", title = "Uniform Distribution PDF") +
theme_minimal()
使用渐近单样本Kolmogorov-Smirnov检验检查数据是否为均匀分布
使用 runif() 函数生成均匀分布随机数后进行检验
set.seed(123) # 设置随机种子
data <- runif(100, min = 0, max = 1) # 生成100个[0,1]区间内的均匀分布随机数
# 使用Kolmogorov-Smirnov检验检查数据是否均匀分布
# 比较数据与标准的均匀分布U(0,1)
ks_test_result <- ks.test(data, "punif", 0, 1)
print(ks_test_result)
输出
Asymptotic one-sample Kolmogorov-Smirnov test
data: data
D = 0.052204, p-value = 0.9481
alternative hypothesis: two-sided
使用 rnorm() 函数生成正态分布随机数后进行检验
set.seed(123) # 设置随机种子
data <- rnorm(1000, mean = 0, sd = 1) # 生成1000个均值为0、标准差为1的正态分布随机数
# 使用Kolmogorov-Smirnov检验检查数据是否均匀分布
# 比较数据与标准的均匀分布U(0,1)
ks_test_result <- ks.test(data, "punif", 0, 1)
print(ks_test_result)
输出
Asymptotic one-sample Kolmogorov-Smirnov test
data: data
D = 0.49514, p-value < 2.2e-16
alternative hypothesis: two-sided
以上的备择假设(拒绝原假设时接受的假设)使用的是双侧检验,意味着不考虑数据偏离原假设的方向,只关心偏离的大小。
通过观察两组输出的D值(两者之间的差异度)和P值(观察到的统计量出现概率,假设原假设是真实的。如果p值大于显著性水平(需查表),则不能拒绝原假设。),即不能拒绝数据来自矩形分布的原假设,因为p值远大于常用的显著性水平,而第二组输出显示p值极小,可以拒绝数据来自矩形分布的原假设。
使用Q_Q图验证数据是否属于矩形分布
使用正态分布数据演示
set.seed(123)
data <- rnorm(1000, mean = 0, sd = 1) # 生成1000个均值为0、标准差为1的正态分布随机数
a <- min(data)
b<- max(data)
# 生成理论上的均匀分布分位数
uniform_quantiles <- qunif(ppoints(length(data)), a, b)
# 绘制QQ图
qqnorm(data)
qqline(uniform_quantiles, col="red")
# 如果数据点大致沿着红线分布,则可能服从均匀分布
输出图像(可明显看出差别)
使用矩形分布数据演示(服从状态明显)
set.seed(123)
data <- runif(1000, min = 0.34, max = 0.46) # 生成1000个矩形分布随机数据
# 定义均匀分布的上限a和下限b
a <- 0.34
b <- 0.46
# 生成理论上的均匀分布分位数
uniform_quantiles <- qunif(ppoints(length(data)), a, b)
# 绘制QQ图
qqnorm(data)
qqline(uniform_quantiles, col="red")
# 如果数据点大致沿着红线分布,则可能服从均匀分布