附录 A 符号与缩略语对照表
本附录集中收录全书使用的数学符号与英文缩略语,供查阅。数学记号遵循第二章约定:粗体小写表示向量,粗体大写表示矩阵。
A.1 核心符号对照
| 符号 | 含义 | 首次出现 |
|---|---|---|
| X\boldsymbol{X}X | X 组随机向量(ppp 维) | 第 1 章 |
| Y\boldsymbol{Y}Y | Y 组随机向量(qqq 维) | 第 1 章 |
| ppp | X 组变量个数 | 第 1 章 |
| qqq | Y 组变量个数 | 第 1 章 |
| m=min(p,q)m=\min(p,q)m=min(p,q) | 典型变量对数的上限 | 第 2 章 |
| nnn | 样本量 | 第 2 章 |
| Σ\boldsymbol{\Sigma}Σ | 联合协方差矩阵 | 第 2 章 |
| ΣXX\boldsymbol{\Sigma}_{XX}ΣXX | X 组内协方差矩阵 | 第 2 章 |
| ΣYY\boldsymbol{\Sigma}_{YY}ΣYY | Y 组内协方差矩阵 | 第 2 章 |
| ΣXY\boldsymbol{\Sigma}_{XY}ΣXY | 组间协方差矩阵 | 第 2 章 |
| a\boldsymbol{a}a | X 侧权重向量 | 第 2 章 |
| b\boldsymbol{b}b | Y 侧权重向量 | 第 2 章 |
| U=a⊤XU=\boldsymbol{a}^{\top}\boldsymbol{X}U=a⊤X | X 侧典型变量 | 第 2 章 |
| V=b⊤YV=\boldsymbol{b}^{\top}\boldsymbol{Y}V=b⊤Y | Y 侧典型变量 | 第 2 章 |
| ρk\rho_kρk / rkr_krk | 第 kkk 个(总体/样本)典型相关系数 | 第 2、4 章 |
| λi\lambda_iλi | 特征值或典型根 ri2/(1−ri2)r_i^2/(1-r_i^2)ri2/(1−ri2)(语境区分) | 第 2、4 章 |
| Λ\LambdaΛ | Wilks’ Lambda 统计量 | 第 4 章 |
| χ2\chi^2χ2 | Bartlett 近似卡方统计量 | 第 4 章 |
| hiih_{ii}hii | 第 iii 个样本的杠杆值 | 第 9 章 |
| di2d_i^2di2 | 第 iii 个样本的马氏距离平方 | 第 3 章 |
| VE(X∣Ui)\mathrm{VE}(X\mid U_i)VE(X∣Ui) | UiU_iUi 对 X 组方差的平均解释比例 | 第 6 章 |
| Rd(Y∣X)\mathrm{Rd}(Y\mid X)Rd(Y∣X) | X 组对 Y 组的冗余指数 | 第 4 章 |
| λX,λY\lambda_X,\lambda_YλX,λY | 两侧正则化/稀疏惩罚参数 | 第 7 章 |
| κ(⋅,⋅)\kappa(\cdot,\cdot)κ(⋅,⋅) | 核函数 | 第 7 章 |
| KX,KY\boldsymbol{K}_X,\boldsymbol{K}_YKX,KY | 两侧核矩阵 | 第 7 章 |
A.2 英文缩略语对照
| 缩略语 | 英文全称 | 中文含义 | 备注 |
|---|---|---|---|
| CCA | Canonical Correlation Analysis | 典型相关分析 | 本书主题 |
| PCA | Principal Component Analysis | 主成分分析 | 单组方差结构 |
| CA | Correspondence Analysis | 对应分析 | 列联表分析 |
| MANOVA | Multivariate Analysis of Variance | 多元方差分析 | 检验语系同源 |
| VIF | Variance Inflation Factor | 方差膨胀因子 | 共线诊断 |
| MCD | Minimum Covariance Determinant | 最小协方差行列式 | 稳健协方差估计 |
| MCAR / MAR / MNAR | Missing Completely At Random 等 | 三种缺失机制 | 第 3 章 |
| SVD | Singular Value Decomposition | 奇异值分解 | 第 2 章 |
| EVD | Eigenvalue Decomposition | 特征值分解 | 第 2 章 |
| RKHS | Reproducing Kernel Hilbert Space | 再生核希尔伯特空间 | 核方法 |
| RBF | Radial Basis Function | 径向基核 | 核函数 |
| MCCA | Multiway / Multiset CCA | 多路(多组)典型相关 | 第 1、7 章 |
| DCCA | Deep CCA | 深度典型相关 | 第 10 章 |
| PMD | Penalized Matrix Decomposition | 惩罚矩阵分解 | Witten 2009 框架 |
| BIC | Bayesian Information Criterion | 贝叶斯信息准则 | 调参 |
| RMSE | Root Mean Square Error | 均方根误差 | 预测评估 |
| APA | American Psychological Association | 美国心理学会(格式) | 报告规范 |
| FPKM | Fragments Per Kilobase per Million | 转录组表达单位 | 案例二 |
A.3 易混概念对照
| 概念 | 本书定义要点 | 常见混淆对象 |
|---|---|---|
| 典型变量 | 组内变量的线性合成得分 | 主成分得分(单组方差取向) |
| 典型相关系数 | 一对典型变量的相关 | 单对 Pearson 相关 |
| 典型载荷 | 原始变量与同侧典型变量的相关 | 标准化权重(净贡献) |
| 冗余指数 | 相关平方 × 平均载荷平方 | 典型相关平方(共享方差) |
| 典型对应分析 | 生态学排序方法(ter Braak) | 典型相关分析(缩写同为 CCA) |
| 广义逆 | 奇异矩阵的最小二乘伪逆 | 普通逆(不可逆时不存在) |
附录 B 各平台完整代码汇总
本附录给出第 5 章第 5.2—5.3 节流程的完整可运行脚本,全部使用统一的示范数据:16 名运动员的生理指标组(肺活量、最大摄氧量、体脂率)与体测成绩组(百米用时、耐力跑用时)。真实分析请按第三章准则放大样本,本数据仅用于流程演示与跨平台核对。
B.1 SPSS 语法代码
*--------------------------------------------------------------
* SPSS:典型相关分析完整流程(含标准化、检验、载荷导出)
* 数据文件需含 6 个数值变量:肺活量 最大摄氧量 体脂率
* 百米用时 耐力跑用时
*--------------------------------------------------------------
* 第一步:缺失值报告
MISSING VALUES 肺活量 最大摄氧量 体脂率 百米用时 耐力跑用时 (SYSMIS).
DESCRIPTIVES VARIABLES = 肺活量 最大摄氧量 体脂率 百米用时 耐力跑用时
/STATISTICS = MEAN STDDEV MIN MAX.
* 第二步:Z-score 标准化(生成 z 前缀新变量)
DESCRIPTIVES VARIABLES = 肺活量 最大摄氧量 体脂率 百米用时 耐力跑用时
/SAVE
/STATISTICS = MEAN STDDEV.
* 第三步:典型相关分析(官方宏路径;菜单路径为
* 分析 → 相关 → 典型相关性,集合1/集合2 对应变量入框)
INCLUDE 'C:\SPSS_安装目录\Canonical correlation.sps'.
CANCORR SET1 = Z肺活量 Z最大摄氧量 Z体脂率
/SET2 = Z百米用时 Z耐力跑用时.
* 第四步:逐级显著性检验的替代路线(MANOVA 近似输出 Wilks)
MANOVA Z百米用时 Z耐力跑用时 WITH Z肺活量 Z最大摄氧量 Z体脂率
/DISCRIMINANT STAN CORR ALPHA(1)
/PRINT = SIGNIF (MULTIVAR UNIV).
* 第五步:把关键输出表导出为 Excel(供三线表排版)
OMS SELECT TABLES
/DESTINATION FORMAT = SAV OUTFILE = 'CCA输出.sav'.
CANCORR SET1 = Z肺活量 Z最大摄氧量 Z体脂率
/SET2 = Z百米用时 Z耐力跑用时.
OMSEND.
执行说明:菜单路径"分析 → 相关 → 典型相关性"若当前版本缺失,用第三步的宏语法等价替代;第四步 MANOVA 输出中的 Wilks’ Lambda、近似 F 值与显著性对应 4.1.3 节的检验口径。导出环节的 OMS 子系统将输出表转存为 SPSS 数据文件,再粘贴到 Word/WPS 中排版为三线表(6.5.1 节)。
B.2 R 完整分析脚本
#------------------------------------------------------------------
# R:经典 CCA 完整流程(标准化 → 求解 → 逐级检验 → 载荷 → 冗余)
# 依赖:CCA, CCP
#------------------------------------------------------------------
library(CCA); library(CCP)
# 1. 数据读入与预处理
dat <- read.csv("athletes.csv", fileEncoding = "UTF-8")
Xraw <- dat[, c("肺活量", "最大摄氧量", "体脂率")]
Yraw <- dat[, c("百米用时", "耐力跑用时")]
# 1.1 缺失审计(示意:缺失率与机制描述)
print(colMeans(is.na(dat)))
# 1.2 标准化(第二章不变性:不改变典型相关,只统一权重尺度)
X <- scale(Xraw); Y <- scale(Yraw)
# 1.3 组内共线诊断(3.1.3 节:条件数与 VIF)
eigen(cor(X))$values[1] / tail(eigen(cor(X))$values, 1) # X 组条件数
library(car); vif(lm(scale(Y[, 1]) ~ X)) # VIF 示意
# 2. 典型相关求解
res <- cc(X, Y)
rho <- res$cor # 典型相关系数
print(rho)
# 3. 显著性检验:Wilks 逐级序列(4.1—4.2 节)
p_tab <- p.asym(rho, N = nrow(X), p = ncol(X), q = ncol(Y),
tstat = "Wilks")
print(data.frame(保留前k对 = 1:length(rho), p.value = p_tab$p.value))
# 4. 载荷矩阵与交叉载荷(6.3 节)
load <- comput(res, X, Y)
Lx <- load$corr.X.xscores # X 变量 × U 载荷
Ly <- load$corr.Y.yscores # Y 变量 × V 载荷
CLx <- load$corr.X.yscores # 交叉载荷 corr(X, V)
# 5. 冗余指数(4.3 节,两方向)
rd_XY <- colSums(load$Rdx2 * rho^2) # X 组典型变量对 Y 组方差解释
rd_YX <- colSums(load$Rdy2 * rho^2) # Y 组典型变量对 X 组方差解释
cat("Rd(Y|X) 累计 =", cumsum(rd_XY), "\n")
cat("Rd(X|Y) 累计 =", cumsum(rd_YX), "\n")
# 6. Bootstrap 权重稳定性审计(3.2.3 节)
set.seed(1); B <- 500
boot_a <- matrix(NA, B, ncol(X))
for (b in 1:B) {
idx <- sample(nrow(X), replace = TRUE)
r <- cc(X[idx, , drop = FALSE], Y[idx, , drop = FALSE])
boot_a[b, ] <- r$xcoef[, 1]
if (cor(boot_a[b, ], res$xcoef[, 1]) < 0) boot_a[b, ] <- -boot_a[b, ]
}
print(apply(boot_a, 2, function(w) sum(w * sign(median(w))) / length(w))) # 符号一致率示意
# 7. 可视化:U1–V1 双标图
U <- scale(Xraw) %*% res$xcoef
V <- scale(Yraw) %*% res$ycoef
plot(U[, 1], V[, 1], xlab = "U1", ylab = "V1", pch = 19)
abline(lm(V[, 1] ~ U[, 1]), col = "red")
B.3 Python 完整分析脚本
#------------------------------------------------------------------
# Python:经典 CCA 完整流程(scikit-learn + 手工检验/载荷补全)
#------------------------------------------------------------------
import numpy as np
import pandas as pd
from sklearn.cross_decomposition import CCA
from sklearn.preprocessing import StandardScaler
from scipy.stats import chi2
# 1. 数据读入与标准化
dat = pd.read_csv("athletes.csv")
X = dat[["肺活量", "最大摄氧量", "体脂率"]].to_numpy()
Y = dat[["百米用时", "耐力跑用时"]].to_numpy()
scaler = StandardScaler()
Xz, Yz = scaler.fit_transform(X), scaler.fit_transform(Y)
# 2. 典型相关求解(n_components = min(p, q))
model = CCA(n_components=2, scale=True, max_iter=2000)
model.fit(Xz, Yz)
U, V = model.transform(Xz, Yz) # 同时返回样本 U 得分与 V 得分
# 3. 典型相关系数
rho = [np.corrcoef(U[:, i], V[:, i])[0, 1] for i in range(U.shape[1])]
print("典型相关系数:", np.round(rho, 4))
# 4. Wilks 逐级显著性检验(与 R 版逐行对应)
def wilks_seq(r, n, p, q):
rows = []
for k in range(len(r)):
Lam = np.prod(1 - np.array(r[k:]) ** 2)
df = (p - k) * (q - k)
chisq = -(n - 1 - (p + q + 1) / 2) * np.log(Lam)
rows.append([k + 1, Lam, chisq, df, chi2.sf(chisq, df)])
return pd.DataFrame(rows, columns=["保留前k对", "Lambda", "chisq", "df", "p"])
print(wilks_seq(rho, len(X), X.shape[1], Y.shape[1]))
# 5. 载荷矩阵与交叉载荷
def loadings(A, S):
A = (A - A.mean(0)) / A.std(0)
S = (S - S.mean(0)) / S.std(0)
R = np.corrcoef(A.T, S.T)[:A.shape[1], A.shape[1]:]
return R
Lx, Ly = loadings(X, U), loadings(Y, V) # 本组载荷
CLx = loadings(X, V) # 交叉载荷
# 6. 冗余指数(4.3 节)
ve_x = (Lx ** 2).mean(axis=0) # U 对 X 组方差解释
rd_XY = ve_x * np.array(rho) ** 2
print("冗余指数 Rd(Y|U_i):", np.round(rd_XY, 4),
"累计:", np.round(np.cumsum(rd_XY), 4))
# 7. 可视化:U1–V1 散点与载荷热图
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 2, figsize=(11, 4))
ax[0].scatter(U[:, 0], V[:, 0]); ax[0].set(xlabel="U1", ylabel="V1")
im = ax[1].imshow(Lx, cmap="RdBu_r", vmin=-1, vmax=1, aspect="auto")
ax[1].set_xticks(range(2)); ax[1].set_yticks(range(3))
ax[1].set_xticklabels(["U1", "U2"])
ax[1].set_yticklabels(["肺活量", "最大摄氧量", "体脂率"])
plt.colorbar(im, ax=ax[1]); plt.tight_layout(); plt.show()
B.4 PyTorch 最小 Deep CCA 骨架(第十章)
#------------------------------------------------------------------
# Deep CCA 最小骨架:两路 MLP 后接 CCA 目标(负典型相关为损失)
# 目标函数细节见 10.2.1 节;工程级实现请参考论文附带代码
#------------------------------------------------------------------
import torch, torch.nn as nn
from torch.utils.data import DataLoader
class ViewEncoder(nn.Module):
def __init__(self, d_in, d_out=32):
super().__init__()
self.net = nn.Sequential(
nn.Linear(d_in, 128), nn.ReLU(),
nn.Linear(128, d_out))
def forward(self, x):
return self.net(x)
def total_correlation_loss(fx, fy, r=1e-3):
# fx, fy: (B, d) 已中心化输出;r 为岭惩罚(7.1.2 节思想)
fx = fx - fx.mean(0); fy = fy - fy.mean(0)
n = fx.size(0)
cxx = fx.T @ fx / (n - 1) + r * torch.eye(fx.size(1))
cyy = fy.T @ fy / (n - 1) + r * torch.eye(fy.size(1))
cxy = fx.T @ fy / (n - 1)
# 广义特征问题解:负对数行列式给出"对齐度"损失
return -0.5 * torch.logdet(
torch.eye(fx.size(1)) - torch.linalg.solve(cxx, cxy @ torch.linalg.solve(cyy, cxy.T))
).clamp(min=-20)
encX, encY = ViewEncoder(3), ViewEncoder(2)
opt = torch.optim.Adam(list(encX.parameters()) + list(encY.parameters()), lr=1e-3)
for epoch in range(300): # 训练循环(对应图 10-4)
opt.zero_grad()
fx, fy = encX(torch.tensor(Xz, dtype=torch.float32)), \
encY(torch.tensor(Yz, dtype=torch.float32))
loss = total_correlation_loss(fx, fy)
loss.backward()
opt.step()
if epoch % 50 == 0:
print(epoch, loss.item())
执行说明:骨架中的 total_correlation_loss 通过岭正则化后的协方差行列式近似总相关,损失下降等价于视图表征对齐度上升;输出维度 ddd 与岭惩罚 rrr 是仅有的两个超参数,按 10.2.1 节的交叉验证惯例选择。
附录 C 典型相关分析检查清单
本附录把全书的纪律浓缩为三张检查清单,建议打印或置为桌面便签:分析开始前过 C.1,模型拟合后过 C.2,报告发布前过 C.3。每一条都可追溯到正文对应章节。
C.1 数据准备检查清单(对应第三章)
分组设计
- 分组依据来自理论、先导文献或"不依赖组间相关结构"的探索(3.1.1)
- 没有把同一构念的量表劈成两组制造双 Y 混淆(9.2.1)
- 每侧变量数在合理范围,min(p,q)\min(p,q)min(p,q) 对应的"故事容量"与预期一致(3.1.2)
- 组内共线已排查:相关 > 0.9 的变量对已裁决去留(3.1.3)
- 组内相关矩阵条件数与 VIF 无严重病态(3.1.3)
样本与缺失
- n≥10×(p+q)n\ge 10\times(p+q)n≥10×(p+q) 或已明确记录偏离与理由(3.2.1)
- 小样本场景的退路(降维 / 正则化)已预先写入分析方案(3.2.2)
- 缺失率矩阵已产出,缺失机制(MCAR/MAR/MNAR)有判断记录(3.3.1)
- 缺失率 > 20% 的变量已进入剔除候选并裁决(3.3.1)
异常与离群
- 单变量极端值(Z-score/箱线图)与多元离群(马氏距离)均已检查(3.3.2)
- 马氏距离使用或核对过稳健估计,遮蔽效应已被考虑(3.3.2)
- 删除敏感性的"剔前/剔后"结果对比已备好(3.3.3)
变换与分布
- 偏斜变量的形状变换(对数/Box-Cox)已执行且记录参数(3.4.2)
- 变换前后典型相关对比已看过(升降皆需解释)(3.4.2)
- Z-score 标准化决策有记录(经典 = 解读约定;正则化 = 数学必需)(3.4.3)
- 单变量正态:Q-Q 图 + Shapiro-Wilk 结果存档(3.5.1)
- 多元正态:Mardia 偏度/峰度检验结果存档(3.5.2)
- 偏离情形对应的退路(直接分析 / 变换 / 置换 / 换方法)已决策(3.5.3)
C.2 模型拟合与检验检查清单(对应第四、五章)
- 平台选择明确,分析脚本/语法已存档(菜单操作已粘贴为语法)(5.1.4)
- 三平台同时跑数时,系数一致、符号按约定对齐(5.4)
- 整体显著性检验(Wilks’ Lambda 或等价统计量)已执行并记录 χ2\chi^2χ2 与 dfdfdf(4.1)
- 保留对数由"逐级检验 + 碎石图 + 交叉验证"合议确定,决策有记录(4.2)
- 载荷矩阵(本组载荷 + 交叉载荷)已导出(6.3)
- 冗余指数(两方向)已计算(4.3)
- 若使用正则化/稀疏方法:惩罚参数选择路径(交叉验证/BIC)已记录(7.1.3、7.2.4)
- 若使用核方法:线性 vs 核的样本外对比已执行(7.3.4)
- 交叉验证的样本分裂种子已固定,结果可复现(9.1.3)
C.3 结果解读与报告发布检查清单(对应第六、九章)
解读纪律
- 显著性不达标的典型对没有被解读(6.1.1)
- 效应量已放进领域语境(小/中/大参照或领域基准)(6.1.2)
- 正文没有因果动词(驱动/导致/影响)描述典型相关(9.3.3)
- 载荷与权重没有混用,"净贡献 vs 总占有"已在文中交代(6.2.2)
- 载荷命名满足"6~8 个字能命名"纪律,无法命名的对未强行入报(9.2.5)
- 共享方差、组内解释、冗余指数三类口径没有混报(6.4.3、表 6-1)
- 冗余度报告带方向箭头(X→YX\to YX→Y 与 Y→XY\to XY→X 分清)(4.3.2)
稳健性
- 四道诊断工序(残差/杠杆/交叉验证/跨样本)执行或显式跳过并说明(9.1)
- Bootstrap 权重稳定性摘要(变号率)已生成(6.2.3)
- 置信区间(Fisher Z 或 Bootstrap)已报告(4.4)
- 局限段落覆盖:样本量、分布偏离、单群组、交叉验证缺失(9.3.3)
格式合规
- 三线表规范(顶线/栏目线/底线,无竖线)已检查(6.5.1)
- ppp 值精度统一(小于 0.001 写 p<0.001p<0.001p<0.001,不出现 0.000)(6.5.1)
- 表内数字与正文叙述一致(无版本错位)(9.3.2)
- APA 或中文规范按目标期刊要求择一执行(6.5.2、6.5.3)
- 方法部分五要素齐全:分组、样本、清洗、检验、稳健性(9.3.1)
】符号对照、代码实现 SPSS 语法、Python 完整分析脚本、&spm=1001.2101.3001.5002&articleId=164341283&d=1&t=3&u=70e146a41e0e498992dd672c5521105d)
41

被折叠的 条评论
为什么被折叠?



