关于NOx浓度数据拟合Poisson或Lognormal分布的技术问询
针对NOx日均浓度数据的分布拟合建议
首先得说,你对「用Poisson分布拟合时需要离散转连续」这件事存疑,完全是合理的——毕竟Poisson本质是离散型分布,专为计数类数据设计(比如单位时间内的尾气排放次数),而NOx日均浓度是连续型数值(可以是任意非负实数,不是整数计数),强行做连续转换拟合,从数据性质上就不太匹配。下面分情况给你梳理:
一、为什么Poisson可能不是最优选择?
- Poisson分布的核心特性是均值等于方差,但环境监测的浓度数据通常会出现「过度离散」——也就是方差远大于均值,这时候Poisson的拟合效果会非常差,根本抓不住数据的分布特征
- 它是离散分布,哪怕用正态近似(仅适用于大样本Poisson)来凑连续,本质上还是不符合浓度这种连续型数据的物理意义,属于强行适配
二、更适合的Lognormal分布拟合
Lognormal几乎是环境浓度数据的「标配」分布,原因很简单:
- 浓度都是非负的,且往往呈现右偏态(大部分数值偏低,少数高值拉高整体分布),Lognormal完美匹配这种形态
- 给你一套实操步骤(以R为例):
- 先对数据取对数,把Lognormal转换为正态分布来验证:
log_nox <- log(your_nox_vector) - 验证对数后的数据是否近似正态:可以用Shapiro-Wilk检验,或者画QQ图直观判断:
shapiro.test(log_nox) # 若p值>0.05,说明不能拒绝正态假设 qqnorm(log_nox); qqline(log_nox) # 点越贴近直线,正态性越好 - 拟合Lognormal分布的参数,用
MASS包的fitdistr或者fitdistrplus包的fitdist都可以:library(MASS) lognorm_fit <- fitdistr(your_nox_vector, "lognormal") - 把拟合好的分布曲线叠加到直方图上,看拟合效果:
hist(your_nox_vector, freq = FALSE, main = "NOx日均浓度分布与Lognormal拟合", xlab = "NOx浓度") curve(dlnorm(x, meanlog = lognorm_fit$estimate[1], sdlog = lognorm_fit$estimate[2]), add = TRUE, col = "darkred", lwd = 2)
- 先对数据取对数,把Lognormal转换为正态分布来验证:
三、如果一定要按导师要求尝试Poisson拟合
如果还是要走Poisson的路子,所谓的「离散转连续」大概率是两种思路:要么把连续的浓度数据离散化(比如取整),要么用Poisson的概率质量函数(PMF)近似连续的概率密度,但这两种都有明显缺陷:
- 离散化会丢失浓度的精细信息,尤其是低浓度区间的差异,完全没必要
- 用PMF近似连续密度,本质是把浓度当成整数计数来处理,违背了数据的物理意义
- 给你一个勉强能跑的拟合示例(R),你可以对比效果:
这里的# 计算样本均值作为Poisson的lambda参数 lambda <- mean(your_nox_vector) # 绘制直方图(用频率而非密度,方便和Poisson PMF匹配) hist(your_nox_vector, breaks = seq(0, max(your_nox_vector), 0.5), freq = TRUE, main = "NOx浓度与Poisson拟合尝试", xlab = "NOx浓度") # 叠加Poisson的PMF转换后的频率曲线(乘以样本量和组距) x_vals <- seq(0, max(your_nox_vector), 0.5) lines(x_vals, dpois(x_vals, lambda) * length(your_nox_vector) * 0.5, col = "steelblue", lwd = 2)*0.5是因为直方图的组距设为0.5,要把PMF的概率值转换成对应组的频率,才能和直方图匹配。
内容的提问来源于stack exchange,提问作者Silvia
相关产品推荐
相关产品推荐

