使用R语言计算矩形分布(均匀分布)并绘制图形

理论部分

矩形分布(均匀分布),是指在某一区间内,随机变量取任何值的概率都是相同的。这种分布的概率密度函数在一个特定的区间内是一个常数,因此其图形呈现出一个矩形的形状,故得名为"矩形分布"。在概率论和统计学中,这是一种非常重要的概率分布方式,具有广泛的应用。在实际应用中,当某一随机变量在一区间内取值的可能性没有偏向时,就可以采用矩形分布(均匀分布)来描述这种随机性,比如实验室技术报告中计算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语言计算并验证

矩形分布图形绘制

{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() 函数生成均匀分布随机数后进行检验

{r} 复制代码
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() 函数生成正态分布随机数后进行检验

{r} 复制代码
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图验证数据是否属于矩形分布

使用正态分布数据演示

{r} 复制代码
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")  
# 如果数据点大致沿着红线分布,则可能服从均匀分布

输出图像(可明显看出差别)

使用矩形分布数据演示(服从状态明显)

{r} 复制代码
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")  
# 如果数据点大致沿着红线分布,则可能服从均匀分布
相关推荐
编程版小新4 分钟前
C++初阶:STL详解(四)——vector迭代器失效问题
开发语言·c++·迭代器·vector·迭代器失效
c4fx24 分钟前
Delphi5利用DLL实现窗体的重用
开发语言·delphi·dll
李小星同志33 分钟前
高级算法设计与分析 学习笔记6 B树
笔记·学习
霜晨月c1 小时前
MFC 使用细节
笔记·学习·mfc
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
Jhxbdks1 小时前
C语言中的一些小知识(二)
c语言·开发语言·笔记
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
小江湖19941 小时前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
代码雕刻家1 小时前
数据结构-3.1.栈的基本概念
c语言·开发语言·数据结构