使用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")  
# 如果数据点大致沿着红线分布,则可能服从均匀分布
相关推荐
雍凉明月夜9 分钟前
c++ 精学笔记记录Ⅲ
c++·笔记·学习
(●—●)橘子……21 分钟前
记力扣1471.数组中的k个最强值 练习理解
数据结构·python·学习·算法·leetcode
阿蒙Amon24 分钟前
JavaScript学习笔记:17.闭包
javascript·笔记·学习
布茹 ei ai25 分钟前
QtWeatherApp - 简单天气预报软件(C++ Qt6)(附源码)
开发语言·c++·qt·开源·开源项目·天气预报
Wpa.wk26 分钟前
自动化测试 - 文件上传 和 弹窗处理
开发语言·javascript·自动化测试·经验分享·爬虫·python·selenium
LinHenrY122728 分钟前
初识C语言(编译和链接)
c语言·开发语言·蓝桥杯
_OP_CHEN28 分钟前
【Python基础】(二)从 0 到 1 入门 Python 语法基础:从表达式到运算符的全面指南
开发语言·python
l1t29 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
想不出名字ಥ_ಥ30 分钟前
STM32学习笔记--01学会如何点亮一颗LED灯
笔记·stm32·学习
我命由我1234537 分钟前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法