什么是粒径谱?
颗粒物的粒径谱描述了颗粒物在不同粒径范围内的分布情况。
而对于超细颗粒物(Ultrafine particles, UFPs),通常用数浓度 (particle number concentration, PNC)来量化,所以基于PNC的研究中,又叫数浓度粒径分布(particle number size distribution, PNSD)。PNC表示单位体积内的颗粒物数量,而PNSD则指不同粒径范围内颗粒物数量的分布情况。
PNSD的分析可以提供有关颗粒物来源、污染物扩散和环境影响的信息。此外,根据PNSD,还可以计算得到其他粒径相关的参数,如体积浓度、表面积浓度、几何平均直径等,进一步了解颗粒物的性质和影响。
SMPS是一种常用于测量PNSD的仪器,通过测量颗粒物的迁移速度和迁移时间来获取粒径大小,并将其与数量浓度进行关联。下面是使用SMPS测量得到的数量浓度粒径分布的示意图:
在上图中,横轴表示颗粒物的粒径大小,纵轴表示dN/dlogDp。纵轴用dN/dlogDp表示和SMPS的测量原理有关。
图b是图a中某一个时间点的剖面,图a相对于图b多了一个时间要素。
什么是NMF?
NMF(Non-Negative Matrix Factorization)是一种常用的数据分解和降维技术,用于对非负矩阵进行因式分解。NMF在机器学习、数据挖掘和信号处理等领域中被广泛应用。
NMF的目标是将一个非负矩阵分解为两个非负矩阵的乘积,其中一个矩阵表示特征或潜在成分,另一个矩阵表示每个样本在这些特征或成分上的权重。NMF的独特之处在于,它要求分解出的矩阵元素都是非负的,这使得分解结果更易解释和理解。
数学上,给定一个非负矩阵V(大小为m×n),NMF的目标是找到两个非负矩阵W(大小为m×k)和H(大小为k×n),使得V≈W×H,其中k是预先指定的分解维度。W矩阵代表特征矩阵,每一列代表一个特征,H矩阵代表权重矩阵,每一行代表一个样本(Lee & Seung, 1999)。
R语言NMF源解析的实现
数据准备:
- 填充数据,因为NMF不支持非正值,所以应该先去除0值,空值和负值,并且对其进行填充。
NMF代码部分:
- 导入所需的R包
library(NMF)
library(cluster)
- 导入数据
#Input data
G <- readxl::read_excel("NMF-INPUT.xlsx")
#Rename columns from second to last column as Dp1 to Dp111
colnames(G)[2:ncol(G)] <- paste0("Dp", 1:(ncol(G)-1))
G <- as.data.frame(lapply(G[,2:112], as.numeric))
- 查看NMF内置的算法和播种方式
nmfAlgorithm()
nmfSeed()
- NMF rank survey
res <- nmf(G,
rank = 2:10,
#method = 'lee',
seed = nmf.getOption("default.seed"),
nrun = 100
)
plot(res)
par("mar")
par(mar=c(1,1,1,1))
consensusmap(res)
- NMF算法的选择
rank = 6,
list('brunet', 'lee', 'nsNMF','KL',"Frobenius", "offset", "nsNMF","snmf/r", "snmf/l"),
.options='t',
nrun = 100)
compare(res.multi.method)
plot(res.multi.method)
- 最后根据确定好的最佳rank数和算法,得到最终的结果
res <- nmf(G,
rank = 6,
method = 'brunet',
seed = nmf.getOption("default.seed"),
nrun = 300
)
coefmap(res)
consensusmap(res)
- 简单查看结果并且导出数据
#分解后的两个子矩阵
H=res@fit@H
W=res@fit@W
#保存两个子矩阵到一个xlsx
library(XLConnect)
wb <- loadWorkbook("C:/Desktop/output_rank6.xlsx", create = TRUE, password = NULL)
for (name in paste0('sheet', 1:2)) {
createSheet(wb, name)
}
writeWorksheet(wb, H, 'sheet1')
writeWorksheet(wb, W, 'sheet2')
saveWorkbook(wb)
输出数据需要根据矩阵运算原理反算成浓度
引用:
Lee, D. D., & Seung, H. S. (1999). Learning the parts of objects by non-negative matrix factorization. Nature, 401(6755), 788-791. https://doi.org/10.1038/44565(1999年Lee和Seung在Nature上发文,提出了NMF算法)
Wang, Q., Huo, J., Chen, H., Duan, Y., Fu, Q., Sun, Y., Zhang, K., Huang, L., Wang, Y., Tan, J., Li, L., Wang, L., Li, D., George, C., Mellouki, A., & Chen, J. (2023). Traffic, marine ships and nucleation as the main sources of ultrafine particles in suburban Shanghai, China. Environmental Science: Atmospheres. https://doi.org/10.1039/D3EA00096F (基于粒径谱数据,使用NMF对超细颗粒物进行源解析的研究)