R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别
全文链接:https://tecdat.cn/?p=38667
摘要:在母婴暴露于空气污染对儿童健康影响的研究中,常需对孕期暴露情况与健康结果进行回归分析。分布滞后非线性模型(DLNM)是一种常用于估计暴露 - 时间 - 响应函数的统计方法,尤其在假定暴露效应是非线性的情况下。以往基于DLNM的实现多采用双变量基扩展来参数化暴露 - 时间 - 响应曲面,但像样条这样的基函数假设整个暴露 - 时间 - 响应曲面是平滑的,这在实际中可能不符合实际情况,比如暴露仅在特定时间窗口与结果相关时。本文提出了一种基于贝叶斯加法回归树来估计DLNM的框架,通过一组回归树进行操作,各树在暴露 - 时间空间中假设分段常数关系。模拟实验表明,在暴露 - 时间曲面不平滑时,本文模型优于基于样条的模型,而在真实曲面平滑时两者表现相近,且所提方法方差更低,能更精确地识别暴露与未来健康结果相关的关键窗口。最后将该方法应用于估计母亲暴露于PM2.5与出生体重之间的关联。
一、引言
在很多应用场景中,人们常常关注将某个结果对之前一段时间窗口内观察到的暴露情况进行回归分析。这在环境流行病学应用中尤为常见,比如将某天的健康结果对当天及此前几天观察到的暴露(如温度或空气污染)进行回归,或者将出生或儿童健康结果对孕期每日或每周观察到的暴露情况进行回归。在母婴暴露于空气污染这一本文所关注的背景下,通常有两个推断目标:一是估计易感性的关键窗口,也就是暴露能够改变未来表型的时间段;二是估计暴露 - 时间 - 响应函数。近期诸多研究已经确定了母婴暴露于空气污染的关键窗口以及与多种结果之间的关联,包括早产、肥胖、哮喘、喘息、神经发育等情况。而且发现这种线性或非线性关联在孕期的不同周数会有所变化。
二、数据
我们分析来自出生记录以及生命统计数据。数据涵盖了2007年至2015年间(含)的活产、单胎、足月(孕周≥37周)且无已知出生缺陷的新生儿,估计了受孕日期。并且进一步将分析限定在海拔低于6000英尺的人口普查区,这样做既减少了海拔带来的潜在混杂因素影响,也降低了山地地形对暴露数据的影响。
本文关注的主要结果是胎龄别出生体重Z评分(BWGAZ),通过出生图表来获取BWGAZ值,它衡量的是出生体重相对于相同胎龄和性别的儿童预期出生体重的标准差数量。数据还包含个体层面的协变量信息,如母亲的年龄、体重、身高、收入、教育程度、婚姻状况、产前护理习惯、孕期前后是否吸烟,以及种族和是否为西班牙裔等信息。我们将分析限定在协变量信息完整的观测数据上,最终得到300463例新生儿数据。
select(bwgaz, ChildSex, MomAge, GestAge, MomPriorBMI, Race,Hispanic, MomEdu, SmkAny, Marital, Income,EstDateConcept, EstMonthConcept, EstYearConcept)
我们使用来自环境保护署的PM2.5暴露数据,该数据是利用降尺度数据融合的空气质量曲面数据。
sbd\_exp <- list(PM25 = sbd\_dlmtree %>% select(starts\_with("pm25\_")),TEMP = sbd\_dlmtree %>% select(starts\_with("temp_")),SO2 = sbd\_dlmtree %>% select(starts\_with("so2_")),CO = sbd\_dlmtree %>% select(starts\_with("co_")),NO2 = sbd\_dlmtree %>% select(starts\_with("no2_")))
sbd\_exp <- sbd\_exp %>% lapply(as.matrix)
三、方法
(一)DLNM框架
在介绍我们提出的方法之前,先简要回顾一下DLNM框架及标准方法。设 y_i
为样本中个体 i
(i = 1,..., n
)的连续型结果变量,设 x_i = [x_{i1},..., x_{iT}]^T
表示在等间隔时间 t = 1,..., T
观察到的暴露变量向量。在我们的研究中,y_i
代表BWGAZ,而 x_{it}
表示第 i
位母亲在孕期第 t
周暴露于PM2.5的情况。我们还控制一个协变量向量,记为 z_i
。高斯DLNM模型如下:
y\_i = f(x\_i) + z\_i^Tγ + ε\_i
其中 f(x_i)
是分布滞后函数,γ
是回归系数向量。分布滞后函数 f(x_i)
可以有多种线性及非线性形式。DLNM允许每个时间点的暴露与结果之间存在独特的非线性关联。一般来说,分布滞后函数定义为:
f(x\_i) = ∑\_{t = 1}^T w(x_{it}, t)
其中 w(x, t)
是将孕期第 t
周的暴露与结果相关联的暴露 - 响应函数。现有的DLNM框架利用交叉基,其中 w
在暴露浓度和时间维度上表示为双变量基扩展。惩罚样条实现允许对暴露 - 时间 - 响应的结构做出一系列假设,比如不同的岭惩罚针对特定时间的收缩,不同的差分惩罚控制曲线的平滑度。基扩展方法(如样条)可对模型进行正则化,以在预测变量存在多重共线性的情况下提高估计效应的稳定性,但这些方法也对DLNM强加了平滑性假设。
(二)树形DLNM方法
我们引入一个基于贝叶斯加法回归树(BART)框架的树和模型来估计暴露 - 时间 - 响应函数 f(x_i)
。一般做法是构建二分树,在暴露浓度和时间维度上对随时间变化的暴露变量 x_i
进行划分。展示了基于暴露和时间值定义的二元规则,这些规则将暴露 - 时间空间划分为五个终端节点,记为 η_1,..., η_5
。图1b展示了暴露 - 时间空间被划分为五个区域,每个区域对应一个终端节点。一棵树及其相应参数定义了一个分段常数暴露 - 响应函数:
w\_a(x\_{it}, t) = μ_{ab} ,当 x_{it} ∈ η_{ab}
树 T
的分布滞后函数形式与式(2)类似,定义如下:
f\_T(x\_i) = ∑_{t = 1}^T w\_T(x\_{it}, t)
在我们的树形DLNM(树DLNM)框架中,考虑由 A
棵回归树组成的集成。对于树 T_a
(a ∈ {1,..., A}
),将其 B_a
个终端节点记为 η_{a1},..., η_{aB_a}
。每个终端节点 η_{ab}
在时间和暴露浓度上都有相应的限制,由树的分裂规则定义,并且有相应的参数 μ_{ab}
。总体而言,每棵树的终端节点定义了暴露 - 时间 - 空间的一个划分,能够灵活地估计暴露 - 时间曲面。与式(3)一样,我们定义树 T_a
中每个暴露 - 时间组合的效应为 w_a(x_{it}, t) = μ_{ab}
(如果 x_{it} ∈ η_{ab}
)。集成中的每棵回归树都提供了对分布滞后非线性函数 f
的部分估计。形式上,树DLNM的暴露 - 时间 - 响应函数为:
f(x\_i) = ∑\_{a = 1}^A g(x\_i, T\_a)
其中 g(x_i, T_a)
表示树 a
给出的部分估计。树DLNM摒弃了基函数强加的平滑性假设,然而,当不同树的时间和暴露断点交错时,树的集成可以近似平滑函数。模型正则化是树先验的结果,它倾向于只有少量分裂的树,较小的树能确保模型在存在时间相关性时保持稳定,因为每个终端节点会对多个时间点进行平均。
(三)马尔可夫链蒙特卡洛(MCMC)采样器
我们使用MCMC来估计树DLNM。用于BART的MCMC方法不适用于当前模型,原因有两个:一是奇普曼等人的算法依赖于这样一个事实,即任何特定的预测变量向量 x_i
都包含在每棵树的单个终端节点中,而树DLNM将与每个观测值相关的暴露划分到各个终端节点中;二是我们对算法进行了修改,以允许对混杂变量 z
进行参数控制。由于这些差异,我们为树DLNM模型提出了一种替代的MCMC方法,具体来说,我们使用标准分析技术对 γ
进行积分,然后应用贝叶斯反向拟合同时基于每棵树 T_a
定义的划分来估计部分暴露 - 时间 - 响应的效应,MCMC采样器的详细信息可在补充材料中找到。
模拟研究
模拟设置
我们开展模拟研究,旨在对比树DLNM和树DLNMse(树DLNM的一种变体)与已有的DLNM方法(如使用惩罚和非惩罚样条的那些方法)的实际表现。模拟的关键在于对比代表平滑和非平滑暴露 - 时间 - 响应函数的模拟场景下各模型的表现。
我们依据相关公式模拟数据,样本量等同于我们的暴露数据(n = 300463
)。为准确体现空气污染暴露数据中存在的自相关性,我们使用了数据分析中的PM2.5暴露数据。用每个观测值的连续37周来模拟足月妊娠情况,以此模拟DLNM曲面。我们考虑了四种模拟的暴露 - 时间 - 响应函数,每种对应不同的真实模型(树DLNM、树DLNMse、基于样条的平滑DLNM以及线性DLM)。这四种DLNM场景分别如下:
-
A场景:在第11 - 15周暴露呈现分段常数效应。
-
B场景:在第11 - 15周暴露呈现线性效应。
-
C场景:在第11 - 15周暴露呈现平滑、非线性效应(逻辑斯蒂形状)。
-
D场景:在第11 - 15周暴露呈现平滑、非线性效应(逻辑斯蒂形状),且时间上的平滑效应在第13周达到峰值,向两边各延伸大约五周。
我们使用对数转换后的暴露数据生成结果,所有场景都以对数暴露值1为中心。暴露 - 时间曲面的几个横截面展示在图2和图3中,每个场景下DLNM曲面的代数细节以及图形表示可在补充材料C.1部分找到。
我们生成了一组协变量(五个标准正态分布变量、五个概率为0.5的二项分布变量)以及来自标准正态分布的相应系数。通过使用臭氧数据引入季节性趋势,具体而言,每5周(第5、10、…、35周)添加一个随机臭氧效应,每次的臭氧测量值以均值为零进行中心化,缩放至标准差为1,然后乘以从均值为0、方差为0.04的正态分布中抽取的值。这样,每个模拟数据集都有不同的季节性趋势,且与暴露(PM2.5)和结果都相关。我们设置误差方差,使得Var[f(xi)]/σ2 = 1/1000
,以此代表现实的信噪比,并且在每个场景中运行500次模拟重复。
模拟估计量与对比
树DLNM和树DLNMse采用了描述的先验设置。在所有对数暴露值的0.01百分位数到99.9百分位数之间,选取30个等间距的值作为暴露维度上潜在的分割点。经过5000次迭代的预热期后,每个模型运行15000次迭代,每隔10次抽取一次结果。
我们将树DLNM和树DLNMse与几种基于样条的惩罚和非惩罚DLNM模型进行对比,这些模型介绍如下:
-
GAM:基础模型,在暴露和时间维度上由秩为10的惩罚三次B样条平滑器定义,带有二阶惩罚,采用REML(限制最大似然估计)进行估计。
-
DLM:在暴露浓度上采用线性假设的GAM模型。
-
GLM - AIC:在暴露和时间维度上选择最优数量(自由度从1到10)的非惩罚二次B样条,通过最小化AIC(赤池信息准则)来确定。
-
GAMcr:通过用三次回归样条替换GAM中的三次B样条基,并对二阶导数添加惩罚来定义。
-
GAM - exp:GAM模型,用可变岭惩罚替换二阶惩罚。
为评估模型性能,我们将每个模型的DLNM以对数暴露值1为中心,并在一系列点组成的网格上评估估计的DLNM。在每个模型中,我们纳入所有10个模拟协变量以及年份和月份的指示变量,以此控制额外的季节性趋势。对暴露浓度值进行对数转换,以减少暴露数据的偏态,并使样条基模型中的节点等间距分布。对于树DLNM而言,对响应进行对数转换与否不会影响其结果,但对树DLNMse的平滑性有影响。
模拟结果
模型性能的汇总指标展示在表中。我们通过整个暴露 - 时间曲面的均方根误差(RMSE)以及分解到模拟关键窗口内外的RMSE来对比各模型。还展示了95%置信区间的经验覆盖率以及平均置信区间宽度。此外,对比了在模拟关键窗口内网格点上识别非零效应的概率(TP)、在模拟关键窗口外网格点上错误地识别出非零效应的概率(FP),以及正确识别非零效应的精度(TP/(TP + FP))。我们将真实暴露 - 时间曲面中的非零效应定义为在 - 0.005到0.005区间之外的任何效应,以此考虑B、C和D场景的情况(B场景在第11 - 15周各处都有非零效应,D场景各处都有非零效应)。
为评估模型性能,我们将每个模型的 DLNM 以对数暴露值 1 为中心,并在一系列点组成的网格上评估估计的 DLNM。在每个模型中,我们纳入所有 10 个模拟协变量以及年份和月份的指示变量,以此控制额外的季节性趋势。对暴露浓度值进行对数转换,以减少暴露数据的偏态,并使样条基模型中的节点等间距分布。对于 树DLNM 而言,对响应进行对数转换与否不会影响其结果,但对 树DLNMse 的平滑性有影响。
模拟结果
模型性能的汇总指标展示在表 1 中,各指标从不同角度反映了不同模型在不同场景下的表现情况,以下是详细介绍:
整体均方根误差(RMSE)体现了模型估计值与真实值之间的偏差程度,从整体来看,在 A、C 和 D 场景中,树DLNM 和 树DLNMse 总体 RMSE 与其他模型相当甚至更好,如在场景 A 中,树DLNM 的整体 RMSE 为 0.086,相对一些基于样条的模型(如 GAM 的 0.294、GLM - AIC 的 1.531 等)表现出更好的估计准确性。
无效应区域 RMSE 则反映了在暴露 - 时间 - 响应曲面中效应为零区域各模型的偏差情况,在所有场景下,基于树的方法(树DLNM 和 树DLNMse)在这方面具有优势,比如场景 D 中,树DLNM 的无效应区域 RMSE 为 0.041,相对部分其他模型更低,意味着在无效应区域它们的估计更接近真实情况,这得益于树特定参数上的收缩先验降低了方差,从而在无效应区域导致更低的 RMSE。
效应区域 RMSE 展示了在存在效应的区域各模型的表现,像在场景 A 中,树DLNM 在效应区域的 RMSE 为 0.213,在该场景下比部分基于样条的模型更优,不过在场景 B 中,树DLNM 和 树DLNMse 在这方面的 RMSE 高于部分基于样条的模型,因为基于样条的模型在数据点稀少的极端暴露值处插值效果更好。
总体置信区间宽度指标能看出模型估计的精确程度,我们的模型(树DLNM 和 树DLNMse)平均置信区间宽度相对较小,尤其在时间边界或极端暴露浓度处优势明显,这在一定程度上是因为基于树的模型估计中缺乏 “波动”,例如在场景 C 中,树DLNM 的总体 CI 宽度为 0.94,相较于部分其他模型更窄,有助于缩窄置信区间以及降低 RMSE,尤其在零效应区域。
真阳性率(TP)表示在模拟关键窗口内网格点上正确识别非零效应的概率,误报率(FP)则是在模拟关键窗口外网格点上错误地识别出非零效应的概率,精度(TP/(TP + FP))综合体现了模型正确识别非零效应的能力。树DLNM 和 树DLNMse 在所有模拟场景中的精度都是较高的,像在场景 A 中精度能达到 1.00(树DLNM)和 0.98(树DLNMse),高精度源于误报率(FP)近乎为零,但在 B 和 D 场景中存在真阳性率(TP)较低的权衡情况。
图2和图3展示了使用树DLNM、树DLNMse和GAMcr模型估计得到的暴露 - 时间 - 响应曲面的横截面。图中显示的非零估计值意味着对于具有特定时间和暴露 - 浓度值的任何观测值,响应发生了变化。在A、C和D场景中,树DLNM和树DLNMse总体RMSE与其他模型相当甚至更好。在所有场景下,基于树的方法在暴露 - 时间 - 响应曲面的零效应区域具有最低的RMSE。图2突出显示了树DLNM和树DLNMse能够清晰区分有无效应的时间段的能力,树特定参数上的收缩先验降低了方差,从而在无效应区域导致更低的RMSE。在非零效应区域,我们的模型在A场景下比基于样条的模型具有更低的RMSE,在C和D场景下则与之相当。在B场景中,树DLNM和树DLNMse在非零效应区域的RMSE更高,因为基于样条的模型在数据点稀少的极端暴露值处插值效果更好。
plot(tDLNM, plot.type = "slice",
图对比了基于树的模型如何在暴露值边界处减弱效应,而GAMcr则线性延续趋势。除B场景外,基于树的模型的覆盖率接近名义覆盖率。在B场景中,所有模型的覆盖率都低于名义覆盖率,但树DLNM和树DLNMse表现最佳,各自的曲面覆盖率为87%。此外,我们的模型平均置信区间宽度最小,这在时间边界或极端暴露浓度处尤为显著,因为基于样条的模型在这些地方的“波动”更明显(如图2和图3所示)。基于树的模型估计中缺乏“波动”,这有助于缩窄置信区间以及降低RMSE,尤其在零效应区域。而且,树DLNM和树DLNMse在模拟重复间的差异要小得多。
B场景虽然对DLM来说看似自然,但存在几个难点。首先,树DLNM要进行恰当估计,需要在正确的关键窗口内有很多跨越暴露浓度的分割树。其次,当数据稀疏时(如本场景中的高、低浓度情况),树DLNM会减弱效应。第三,在高浓度时,存在从零到较大效应的跳跃,平滑方法无法适应这种情况,特别是DLM由于平滑性假设会将关键窗口延伸到远超真实效应的时间段。树DLNM和树DLNMse在所有模拟场景中的精度都是最高的(见表1),高精度源于误报率(FP)近乎为零,但在B和D场景中存在真阳性率(TP)较低的权衡。图中的横截面图展示了树DLNM和树DLNMse适应非平滑暴露 - 时间响应曲面的能力,补充图显示了每周至少在一个暴露值上检测到非零效应的概率,结果表明基于样条的方法在真实关键窗口外误分类周数的概率要高得多,而基于树的模型能适应暴露 - 时间 - 响应曲面的变化平滑性,很少在真实关键窗口外检测到非零效应,关键在于树DLNM和树DLNMse所检测到的关键窗口大概率是正确的。
数据分析
我们使用树DLNM和树DLNMse来估计孕期前37周母亲暴露于PM2.5与儿童BWGAZ之间的关系。通过使用每周暴露数据,我们将任何方法能够识别关键窗口的时间分辨率限制在周的层面。为进行对比,我们还应用了使用惩罚三次回归样条的DLNM(GAMcr)以及DLM方法,并且控制了母亲的基线特征以及季节和长期趋势。母亲的特征包括:孕前年龄(二次拟合)、体重、是否吸烟(孕期前后)、收入、教育程度、首次接受产前护理的时间、种族、是否为西班牙裔、海拔以及居住的郡县。我们不控制胎儿性别或孕周,因为结果变量BWGAZ已经针对这些因素进行了调整。此外,我们使用受孕年份和月份的指示变量来调整季节性效应。
对于树DLNM和树DLNMse,我们使用与模拟中相同的超参数,让模型运行5000次迭代的预热期,接着运行15000次迭代,并保留马尔可夫链蒙特卡洛(MCMC)采样器中每10次抽取的结果。我们在暴露维度上指定30个等间距的潜在分割点,范围从对数暴露值的0.1百分位数到99.9百分位数,尝试过不同数量的潜在分割点,但结果并无差异。在树DLNMse中,我们将平滑参数σx
设置为对数暴露值标准差的一半。GAMcr和DLM模型使用与模拟中相同的设置,所有模型的DLNM估计都以暴露值中位数(约7 µg/m3 )为中心,将包含暴露 - 时间 - 响应中95%置信区间不包含零的区域的任何一周定义为关键窗口。
DLNM结果
树DLNMse的后验平均暴露 - 时间 - 响应估计值展示在图4a中,低于中位数的PM2.5暴露与BWGAZ的增加相关,高于中位数的暴露浓度则表明BWGAZ略有下降,但95%可信区间并不能让我们认为这种下降与零有显著差异,这种模式在整个孕期各周都存在。
图4b展示了在第5、15、25和35周的暴露 - 时间 - 响应曲面的横截面,表明存在一个跨越整个孕期的关键窗口。基于树DLNMse,孕期内从中位数(7.0 µg/m3 )的PM2.5暴露变化到第25百分位数(5.89 µg/m3 ),将导致BWGAZ的累积平均增加量为0.0132(95%置信区间[0.0003, 0.0354]),换算成实际出生体重大约增加5.74g(95%置信区间[0.11, 15.41])(这是近似值,因为BWGAZ考虑了孕周和胎儿性别因素)。非线性关联表明,PM2.5暴露进一步降低到第10百分位数(5.02 µg/m3 )时,BWGAZ平均增加量为0.055(95%置信区间[0.016, 0.090]),换算成实际出生体重大约增加24.1g(95%置信区间[7.155, 39.10]),这些结果意味着将PM2.5降低到当前国家环境空气质量标准以下,会使该人群的平均出生体重增加。
GAMcr的平均暴露 - 时间 - 响应估计值展示在图4a中,与树DLNMse的估计值很相似,正如在模拟中看到的那样,二者在尾部表现上存在差异,GAMcr随着效应延续趋势且区间较大,尽管在低暴露水平下GAMcr的点估计值较大,但较大的置信区间包含了零。相反,树DLNMse逐渐减小并估计出一个较小的效应,其区间明显更小且不包含零,树DLNMse在边界附近区间较小是因为这些边界区域被划分到包含内部区域的终端节点中,因此得到相同的估计值。我们发现PM2.5增加与BWGAZ降低之间存在关联,这与以往文献一致,孙等人2016年的一项荟萃分析发现,孕期PM2.5增加10 µg/m3与出生体重降低15.9g相关(95%置信区间[ - 26.8, - 5]),孕中期和孕晚期暴露增加也被确定与出生体重存在非零负相关,朱等人2016年在另一项荟萃分析中也报告了类似结果,斯特里克兰等人2019年发现,在整个孕期,对于出生体重分布的较高百分位数,PM2.5与出生体重之间的关联程度会增加,最后,一项研究调查PM2.5的单个化学成分发现,孕期每个阶段母亲暴露于PM2.5都存在非零的低出生体重风险增加情况。
对比灵活性稍差的模型替代方案
为进行对比,我们拟合了树DLNM、DLM以及几种线性模型来对比结果,这些模型的结果都与树DLNMse的结果相符,关于这些方法的更多细节可在补充材料D部分找到。
讨论
在这项工作中,我们提出了一种基于树的DLNM方法,用于估计随时间变化的一系列污染暴露与连续出生结果之间的关联。树DLNM消除了暴露 - 时间响应曲面中的平滑性假设,树DLNMse仅在暴露 - 浓度维度施加平滑性而不在时间维度施加,树DLNM还有可能在暴露 - 响应函数内考虑测量误差。通过放松时间维度的平滑性假设,我们的新方法能更精确地识别易感性关键窗口,有着重要的应用价值和理论意义。
参考文献
Berrocal, V. J., Gelfand, A. E., Holland, D. M., & Statisti-Cian, S. (2010). A Spatio-Temporal Downscaler for Output From Numerical Models. Journal of Agricultural, Biological, and Environmental Statistics, 15(2), 176–197.
Bose, S., Rosa, M. J., Mathilda Chiu, Y.-H., Leon Hsu, H.-H., Di, Q., Lee, A., Kloog, I., Wilson, A., Schwartz, J., Wright, R. O., Morgan, W. J., Coull, B. A., & Wright, R. J. (2018). Prenatal nitrate air pollution exposure and reduced child lung function: Timing and fetal sex effects. Environmental Research, 167, 591–597.
Carvalho, C. M., Polson, N. G., & Scott, J. G. (2010). The horseshoe estimator for sparse signals. Biometrika, 97(2), 465–480.
Chang, H. H., Reich, B. J., & Miranda, M. L. (2012). Time-to-Event Analysis of Fine Particle Air Pollution and Preterm Birth: Results From North Carolina, 2001-2005. American Journal of Epidemiology, 175(2), 91–98.
Chang, H. H., Warren, J. L., Darrow, L. A., Reich, B. J., Waller, L. A., & Chang, H. H. (2015). Assessment of critical exposure and outcome windows in time-to-event analysis with application to air pollution and preterm birth study. Biostatistics, 16(3), 509–521.
Chipman, H. A., George, E. I., & McCulloch, R. E. (1998). Bayesian CART model search. Journal of the American Statistical Association, 93(443), 935–948.
相关文章:
R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别
全文链接:https://tecdat.cn/?p38667 摘要:在母婴暴露于空气污染对儿童健康影响的研究中,常需对孕期暴露情况与健康结果进行回归分析。分布滞后非线性模型(DLNM)是一种常用于估计暴露 - 时间 - 响应函数的统计方法&am…...
小程序基础 —— 08 文件和目录结构
文件和目录结构 一个完整的小程序项目由两部分组成:主体文件、页面文件: 主体文件:全局文件,能够作用于整个小程序,影响小程序的每个页面,主体文件必须放到项目的根目录下; 主体文件由三部分组…...
bishengjdk-8
title: 深入探索 BishengJDK-8:技术魅力与优势尽显 date: 2024-12-29 category: blog tags:- BishengJDK-8- Java 开发- 性能优化- 技术剖析 sig: BishengJDK archives: 2024-12 author:- way_back summary: BishengJDK-8 作为一款备受瞩目的 JDK 版本,以…...
Android9.x SurfaceView源码分析
前言 本文是继Android 深入理解SurfaceView再次对SurfaceView进行源码分析。 看了下代码,上篇文章是基于Android7.x的,本篇基于Android9.x再次进行分析, Android从7.0开始支持SurfaceView动画,并建议7.0之后使用SurfaceView替代TextureView,这里主要在Android9.0上分析Su…...
分布式 IO 模块助力冲压机械臂产线实现智能控制
在当今制造业蓬勃发展的浪潮中,冲压机械臂产线的智能化控制已然成为提升生产效率、保障产品质量以及增强企业竞争力的关键所在。而分布式 IO 模块的应用,正如同为这条产线注入了一股强大的智能动力,开启了全新的高效生产篇章。 传统挑战 冲压…...
解决VMware的ubuntu22虚拟机没有网络
解决步骤 1.在 Windows 系统中,按 “WinR” 键,输入 “services.msc” 并回车,在服务列表中找到 “VMware DHCP Service” 和 “VMware NAT Service”,确保这两个服务已启动,若未启动则右键点击选择 “启动”…...
Linux arm 编译安装glibc-2.29
重要的话说三遍: !!!!!不要轻易自己去安装glibc!!!!! !!!!!不要轻易自己去安装glibc&a…...
Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde
介绍 安装自己的linux-server,可以作为学习使用,web方式访问,基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …...
linux 7.6安装mysql 8.0步骤如下
linux 7.6安装mysql 8.0步骤如下: 注意:在导入密钥的时候这个不行,可更换为 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023...
meshy的文本到3d的使用
Meshy官方网站: 中文官网: Meshy官网中文站 编辑 Opens in a new window 编辑www.meshycn.com Meshy AI 中文官网首页 英文官网: Meshy目前似乎还没有单独的英文官网,但您可以在中文官网上找到英文界面或相关英文资料。 链…...
抓取手机HCI日志
荣耀手机 1、打开开发者模式 2、开启HCI、ADB调试 3、开启AP LOG 拨号界面输入*##2846579##* 4、蓝牙配对 5、抓取log adb pull /data/log/bt ./...
如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈
如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈 h5如何转小程序 如果当年你们开发网站是用的h5但是没有开发小程序,也没有使用uniapp这样的混开框架,但是目前根据业务需…...
2024:踏平坎坷成大道,斗罢艰险又出发!
一、开篇 12月今年最后一个月了,相逢的人已走散,Q4的OKR已经定型了,很平淡无味、闲的无聊,提前写个年终总结吧。25年,再过一个月就35岁了,一个人来北京也已经11年了。年近末尾,思绪良多。回顾过…...
Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)
文章目录 一、Qt For Android运行示例二、个人理解及情况解析三、配置Android相关配置项3.1 安装简述3.2 安装Qt1.安装Qt第一步:启动Qt安装包程序2.Qt账号(注册)登录3.了解Qt开源使用义务4.指定Qt安装目录5.选择Qt安装内容6.接受“许可协议”…...
LLaMA详解
LLaMA 进化史 大规模语言模型(Large Language Model, LLM)的快速发展正在以前所未有的速度推动人工智能(AI)技术的进步。 作为这一领域的先行者, Meta在其LLaMA(Large Language Model Meta AI)系列模型上取得了一系列重大突破。 近日, Meta官方正式宣布推出LLaMA-3, 作为继LL…...
【学生管理系统】权限管理之用户管理
目录 6. 权限管理 6.1 环境搭建 6.1.1 数据库 6.1.2 后端环境 6.2 用户管理 6.2.1 查询所有用户(关联角色) 6.2.2 核心1:给用户授予角色 6. 权限管理 6.1 环境搭建 6.1.1 数据库 权限管理的5张表的关系 添加4张表 # 权限表&…...
基于Java+Springboot+Vue开发的旅游景区管理系统,实习作品
项目简介 该项目是基于JavaSpringbootVue开发的旅游景区管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的旅…...
人工智能及深度学习的一些题目
1、一个含有2个隐藏层的多层感知机(MLP),神经元个数都为20,输入和输出节点分别由8和5个节点,这个网络有多少权重值? 答:在MLP中,权重是连接神经元的参数,每个连接都有一…...
JavaFX FXML模式下的布局
常见布局方式概述 在 JavaFX FXML 模式下,有多种布局方式可供选择。这些布局方式可以帮助您有效地组织和排列 UI 组件,以创建出美观且功能良好的用户界面。常用布局容器及布局方式 BorderPane 布局 特点:BorderPane 将空间划分为五个区域&…...
在 Windows 11 下的 WSL - Ubuntu 24.04 中安装 CUDA 的记录
#记录工作 以下是基于CUDA官网给定命令在 Windows 11 下的 WSL - Ubuntu 24.04 中安装 CUDA 的记录: 一、准备工作 确保你的 Windows 11 系统已经成功启用 WSL 功能,并且已经安装了 Ubuntu 24.04 操作系统。同时,确保系统处于联网状态&#…...
Qt 12.28 day3
作业: 1】 思维导图 2】 在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&a…...
AISuite:提供了统一的跨 LLM API的开源 Python 库
1. 简介: AISuite是一个开源的Python库,旨在提供一个统一的接口来调用不同的大型语言模型(LLM)API。这个工具由吴恩达(Andrew Ng)领导开发,目的是简化AI模型的调用过程,使得开发者能…...
springMVC-请求响应
springmvc——一 站式web框架,核心是处理http请求响应。 前后端分离:需要序列化,服务端把数据序列化成字符串或者流给前端,前端又把json转成对象,前端的叫反序列化。前端把数据序列化转成字符串给服务器,服…...
【代码分析】Unet-Pytorch
1:unet_parts.py 主要包含: 【1】double conv,双层卷积 【2】down,下采样 【3】up,上采样 【4】out conv,输出卷积 """ Parts of the U-Net model """import torch im…...
uni-app开发-识图小程序-个人中心页面
目录 一:功能描述 二:代码实现 一:功能描述 个人中心中心主要包含用户登录信息,退出登录,图像识别记录,分类识别记录,分享记录以及小程序介绍信息。用户登录状态下可以看到图形识别记录,分类识别记录和分享记录,未登录状态只能看到介绍信息,点击未登录文字会触发…...
C++小游戏
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 设计一个桌面游戏是一个有趣且富有挑战性的项目。下面是一个简单的C桌面游戏的设计思路和示例代码。我们将创建一个简单的“猜数字”游戏,玩家需要在有限的尝试次数内猜测一个随机生成的数字。 游戏…...
Flutter封装一个三方ViewPager学习
Flutter如何实现一个增强的 PageView,支持自定义页面切换动画。 前置知识点学习 CrossAxisAlignment CrossAxisAlignment 是 Flutter 中用于控制布局子组件在交叉轴(cross axis)方向上的对齐方式的一个枚举类。它主要在 Flex 布局模型中使…...
【算法】复杂性理论初步
六、算法复杂性初步 重要的复杂性类 P P P 的定义 多项式时间内可解的问题 若 L ∈ P L∈P L∈P,则存在确定性多项式时间的图灵机 M M M,使得 M ( x ) 1 ⟺ x ∈ L M(x)1⟺x∈L M(x)1⟺x∈L N P NP NP 的定义 多项式时间内可验证验证解的正确性 &…...
vscode实用插件(持续更新)
目录 Git History Diff Git Graph Error Lens Git History Diff 用于将当前分支的某个文件夹与远程分支的相同文件夹做对比,方便代码评审!解决了为了一个问题而多次commit,导致代码不好评审,即不晓得和远程分支相比࿰…...
使用Lodash工具库的orderby和sortby进行排序的区别
简介 _.orderBy 和 _.sortBy 是 Lodash 库中用于排序数组的两个函数。 区别 _.orderBy 允许你指定一个或多个属性来排序,并为每个属性指定排序方向(升序或降序)。默认所有值为升序排,指定为"desc" 降序,…...
胡闹厨房练习(三)
ScriptableObject 一、初步了解 1、实质:是一种特殊类型的Unity对象, 2、作用:用于存储大量数据,而不必依附于游戏场景中的某个GameObject。 3、特点: 可以在不增加场景中对象数量的情况下,管理和存储复杂的数据结构、配置信息、游戏状态等。 4、适用:非常适合用来…...
Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
目录 一、接口测试基础概念 1、什么是接口 2、接口的类型 3、什么是接口测试 4、为什么要做接口测试 5、接口测试的实现方式 6、什么是自动化接口测试? 二、接口返回的数据格式 1、三种格式 2、Json 三、接口协议 1、webservice协议 2、dubbo协议 3、…...
算法进阶:贪心算法
贪心算法是一种简单而直观的算法思想,它在每一步选择中都采取在当前状态下最优的选择,以期望最终得到全局最优解。贪心算法通常适用于一些具有最优子结构的问题,即问题的最优解可以通过一系列局部最优解的选择得到。 贪心算法的基本思路是&a…...
深度学习笔记(6)——循环神经网络RNN
循环神经网络 RNN 核心思想:RNN内部有一个“内部状态”,随着序列处理而更新 h t f W ( h t − 1 , x t ) h_tf_W(h_{t-1},x_t) htfW(ht−1,xt) 一般来说 h t t a n h ( W h h h t − 1 W x h x t ) h_ttanh(W_{hh}h_{t-1}W_{xh}x_t) httanh(Whhht−1Wxhxt…...
电商项目高级篇07-redisson分布式锁
redisson分布式锁 1、引入maven依赖2、config类3、可重入锁设计 1、引入maven依赖 <!--引入redisson--><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.12.0</version></depend…...
STM32中断详解
STM32中断详解 NVIC 中断系统中断向量表相关寄存器中断优先级中断配置 外部中断实验EXTI框图外部中断/事件线映射中断步骤初始化代码实现 定时器中断通用定时器相关功能标号1:时钟源标号 2:控制器标号 3:时基单元 代码实现 NVIC 中断系统 STM…...
KNN分类算法 HNUST【数据分析技术】(2025)
1.理论知识 KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想: 对于任意n维输入向量,分别对应于特征…...
【Win11】安装 VMware17 和 Ubuntu
【Win11】安装 VMware17 和 Ubuntu 15 版本和 Win11 家庭版间的兼容应该有 BUG,请直接跳至【VMware 17】 安装【VMware 15】 本来是按如下资源链接安装的,但发现 15 版本和 Win11 家庭版间的兼容应该有 BUG,在安装并关闭 Hyper-Vÿ…...
Jmeter快速入门
目录 1.安装Jmeter 1.1.下载 1.2.解压 1.3.运行 2.快速入门 2.1.设置中文语言 2.2.基本用法 1.安装Jmeter Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。 1.1.下载 可以Apache Jmeter官网下载,地址…...
Android Studio2024版本安装环境SDK、Gradle配置
一、软件版本,安装包附上 👉android-studio-2024.1.2.12-windows.exe👈 👉百度网盘Android Studio安装包👈 (若下载连链接失效可去百度网盘链接下载) 二、软件安装过程 三、准备运行…...
嵌入式单片机窗口看门狗控制与实现
窗口看门狗 注意:WWDG外设没有独立的时钟源,而是挂载在APB1总线下,APB1总线外设时钟为42MHZ。 了解WWDG外设的使用流程,可以参考stm32f4xx_wwdg.c的开头注释,具体流程如下图所示...
[单master节点k8s部署]43.全链路监控(二)
部署pinpoint服务端 这里安装的是pinpoint-docker,可以从GitHub - pinpoint-apm/pinpoint-docker: Officix 下载。通过readme可以看到,该项目提供的镜像: Pinpoint-Web ServerPinpoint-CollectorPinpoint-AgentPinpoint-FlinkPinpoint-Hba…...
Apache Doris 创始人:何为“现代化”的数据仓库?
在 12 月 14 日的 Doris Summit Asia 2024 上,Apache Doris 创始人 & PMC 成员马如悦在开场演讲中,围绕“现代化数据仓库”这一主题,指出 3.0 版本是 Apache Doris 研发路程中的重要里程碑,他将这一进展总结为“实时之路”、“…...
json的作用?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有简洁、易读、易于解析和生成等特点,在前后端数据交互、配置文件、数据存储等多个领域发挥着重要作用,以下是具体介绍: JSON 的作用 数据…...
ChatGPT是如何生成长文的
说实话,现在我们对chatGPT的最深的印象就是他是一个各方面知识都比较全面的机器助手,我们的问题他都能生成答案,不过大家发现没有,它生成相对应的长文的时候,都是一个词一个词蹦出来的,有的时候是一个个词组…...
微服务——部署与运维
1、你是否有将 Java 微服务部署到容器(如 Docker)中的经验?请描述一下部署过程和相关注意事项。 部署过程: 编写 Dockerfile,定义基础镜像(如 openjdk)、应用 JAR 包路径和启动命令。构建镜像…...
json笔记
1、json的组成 JSON是一个标记符序列。这套标记符包括:构造字符、字符串、数字和字面值(false, true, null)。 1.1 构造字符 六个构造字符: 左方括号 [ 右方括号 ] 左大括号 { 右大括号 } 冒号 : 逗号 , 1.2 JSON值 json值包括:对象…...
从0入门自主空中机器人-1【课程介绍】
关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…...
C++ 设计模式
代码示例 从封装变化角度分类 1.组件协作 现代软件专业分工之后的第一个结果“框架与应用程序的划分” ,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。 模板方法(Template Me…...
最新版Edge浏览器加载ActiveX控件技术——alWebPlugin中间件V2.0.28-迎春版发布
allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…...