1. 课程导入与MATLAB统计环境

统计建模与不确定性分析并不是两门彼此独立的学问,而是一条从“数据”到“结论”的完整链条。统计建模负责把观测数据中的规律抽象成可解释、可预测的数学结构;不确定性分析则负责回答一个更关键的问题:这个结构有多可信、结论在多大范围内成立。二者结合,才能让模型从“能算”走向“可用”。本课程以MATLAB为工具平台,围绕这条链条展开,本章先建立整体认知,并把后续30章要用的工作环境、数据通道和项目场景一次性搭好。

统计建模与不确定性分析的关系

可以把一次完整的分析任务拆成四个层次。第一层是数据层:原始观测、实验记录或仿真输出,它们本身带有测量误差、抽样波动和缺失。第二层是模型层:用回归、方差分析、广义线性模型、时间序列或贝叶斯方法,把数据映射为参数与结构。第三层是不确定性层:参数估计的标准误、置信区间、预测区间、假设检验的p值,以及通过蒙特卡洛、Bootstrap、灵敏度分析得到的分布性结论。第四层是决策层:在给定风险水平下判断模型是否可用、哪个方案更稳健。

需要特别强调的是,不确定性来源不止一种。常见的有:参数不确定性(样本有限导致估计值波动)、模型不确定性(模型形式选择不当)、观测不确定性(测量噪声)、输入不确定性(未来自变量本身不确定)。MATLAB统计工具箱对这几类都有对应工具,后续章节会逐一展开。理解这一点,才不会把“点估计”误当成“确定结论”。

MATLAB统计工具箱概览

MATLAB的统计能力主要分布在几个部分。核心是Statistics and Machine Learning Toolbox,提供描述统计、概率分布、假设检验、回归、分类、聚类、降维、蒙特卡洛与Bootstrap等函数。与之配合的还有Curve Fitting Toolbox(拟合与拟合优度)、Optimization Toolbox(最大似然与参数优化)、Global Optimization Toolbox(复杂似然面搜索)、Econometrics Toolbox(时间序列与状态空间模型)以及Deep Learning Toolbox(数据驱动建模)。

从函数命名上可以快速建立索引:以fit开头的是拟合类(如fitlm、fitglm、fitrgp),以dist或分布名开头的是概率分布类(如normpdf、binofit),以test结尾的是检验类(如ttest、kstest),bootci、mhsample、sobolset则服务于不确定性量化。掌握这套命名规律,查文档的效率会明显提高。

统计建模与不确定性分析的数据—模型—决策链 数据层 观测 / 实验 / 仿真 缺失 · 噪声 · 抽样 模型层 回归 / GLM / 时序 参数估计 · 结构选择 不确定性层 标准误 · 置信区间 Bootstrap · 灵敏度 决策层 风险判断 方案稳健性 MATLAB 统计工具箱分工 Statistics and Machine Learning 描述·检验·回归·分类 Curve Fitting Optimization 拟合·似然·参数搜索 Econometrics Global Opt. 时序·状态空间·全局搜索 Deep Learning Statistics 数据驱动·不确定性 Bootstrap Monte Carlo 重采样·随机模拟 课程项目场景:某型号电池循环寿命预测 输入变量 温度 · 放电倍率 循环次数 · 内阻 建模目标 容量衰减回归模型 剩余寿命预测 不确定性输出 预测区间 · 置信带 参数灵敏度排序 决策依据 95% 区间下界是否 满足寿命阈值

工作空间与脚本管理

MATLAB的工作空间(Workspace)保存当前会话中的变量,脚本(.m文件)和实时脚本(.mlx)保存可复现的分析过程。做统计建模时,建议遵循三条基本纪律。第一,数据与代码分离:原始数据放在data/目录,脚本放在src/目录,输出图表放在results/目录,避免把数据硬编码进脚本。第二,随机性可复现:凡涉及随机抽样、Bootstrap、蒙特卡洛的代码,开头统一写rng(2024),保证每次运行结果一致。第三,变量命名语义化:用cycleLife、tempC、capacityAh这类名字,而不是a、b、x1。

一个典型的项目初始化脚本如下:

% project_init.m —— 课程项目统一初始化
clear; clc; close all;
rng(2024);                          % 固定随机种子,保证可复现
projRoot = fileparts(mfilename('fullpath'));
addpath(fullfile(projRoot,'src'));
dataDir = fullfile(projRoot,'data');
resDir  = fullfile(projRoot,'results');
if ~exist(resDir,'dir'), mkdir(resDir); end
fprintf('项目根目录:%s\n', projRoot);
fprintf('数据目录:%s\n', dataDir);

运行后命令行会打印目录信息,工作空间中出现projRoot、dataDir、resDir三个变量。后续所有脚本都先调用project_init,就能保证路径和随机状态一致。这是“可复现分析”的最低成本做法。

数据导入导出

统计建模的第一步是把数据读进来。MATLAB支持多种格式,选择取决于数据来源。readtable适合带表头的CSV或Excel,返回table类型,列名即变量名;readmatrix适合纯数值矩阵;readcell适合混合类型;load用于.mat文件;数据库可用database与fetch。导出时,writetable、writematrix、save分别对应表格、矩阵和MAT文件。

以课程项目为例,假设battery_cycle.csv包含cycle、tempC、cRate、capacityAh四列,导入并做初步检查的代码如下:

T = readtable(fullfile(dataDir,'battery_cycle.csv'));
disp(head(T,5));
summary(T);                         % 每列最小值、中位数、最大值、缺失数
fprintf('样本量 n = %d,变量数 p = %d\n', height(T), width(T));
missingRate = sum(ismissing(T)) / height(T);
disp(missingRate);

这里summary会给出每列的基本统计量和缺失值数量,ismissing配合sum可以算出缺失比例。如果某列缺失率超过5%,就需要在建模前决定是删除、插补还是改用能处理缺失的模型。这一步看似简单,却直接决定后续结论的可信度。

导入数据后,先做三件事:看维度(size)、看类型(class或summary)、看缺失(ismissing)。这三步能挡掉大部分“模型报错但原因不明”的问题。

课程项目场景设定

为了让后续章节有统一的练习对象,本课程设定一个贯穿项目:某型号锂离子电池循环寿命预测与不确定性评估。数据为一批电池在不同温度(15℃、25℃、35℃)和不同放电倍率(0.5C、1C、2C)下的循环测试记录,每条记录包含循环次数、温度、倍率、当前容量。目标是建立容量随循环次数衰减的回归模型,并给出剩余寿命的预测区间。

这个场景的好处是:变量含义直观,样本量可控(示例数据约300条),既能用线性回归和广义线性模型,也能自然引入Bootstrap和蒙特卡洛;同时“预测区间下界是否满足寿命阈值”这一判断,把不确定性分析直接连接到工程决策。后续章节的回归、检验、区间估计、灵敏度分析、模型比较,都会围绕这份数据展开。

本课程中出现的所有数据、参数和结果均为教学示例或合理假设,用于说明方法流程,不代表任何真实电池产品的实测性能。实际工程中请以真实测试数据为准。