对数线性模型

所属分类:广义线性模型

这个方法是做什么的

手上有 2~3 个分类变量,想知道它们之间有没有关联、关联出现在哪些格子上。做法是把列联表里每个单元格的频数当成泊松计数来建模:先拟合“各变量相互独立”的主效应模型,再用它相对饱和模型的似然比 G² 检验独立性。拒绝原假设就说明独立模型不够、变量之间存在关联。数据要按每行一个个案给,模块自己按组合计数建表。

报告分三层证据。卡② 是主效应模型的参数(β 与乘性效应 exp(β)),它刻画的是各变量自身的边际分布是否均衡,不是变量之间的关联——表注与结论文案都专门点名了这一点。卡④ 才是关联证据:独立模型对饱和模型的 G² 与 Pearson 卡方、两个模型各自的 AIC/BIC、每一对变量的 Cramér's V 及其非中心卡方反演出的 95% 区间、以及逐单元格的调整残差(同时给未校正的 |r| > 1.96 与 Bonferroni 校正两条阈)。卡① 报表的维度、平均每格样本量、零频数格数与最小期望频数。

需要准备什么数据

  • 计数变量(分类):至少 2 个,定类变量(分组/标签)
  • 第三个分类变量(可选)(可选):定类变量(分组/标签)

数据要求

  • 数据表至少 30 行。
  • 单列缺失率不超过 20%。
  • 不接受取值全都一样的列(零方差列没有可分析的变异)。
  • 「计数变量(分类)」的类别数需在 2~10 之间。
  • 「第三个分类变量(可选)」的类别数需在 2~10 之间。

以上条目由系统从该方法的校验规则直接生成,与上传数据时的实际拦截规则一致。

什么时候用它

  • 三个分类变量(性别 × 是否吸烟 × 是否患病)的联合频数结构,想一次看清哪几对相关
  • 已知两个变量相关,想看引入第三个变量后关联还在不在
  • 想定位关联究竟出在哪些单元格上,而不只是拿到一个整体的 p 值
  • 需要一个把频数当因变量、把分类变量当因子的模型化框架

变量必须是定类,每个至少 2 个、最多 10 个水平——水平太多会让表极度稀疏、期望频数不足。模型把格子频数当泊松计数,推断依赖大样本近似:平均每格 5 个以上观测是经验要求,卡① 会报期望频数小于 5 的格数。存在零频数格时不做连续性修正,因为主效应模型的极大似然只要求各边际频数为正、不要求每格为正;只有主效应模型确实拟合不出来时才兜底加上 0.5 并在报告中登记、对结论降级。两个拖拽区的名字容易误导,见下方第一条。

什么时候不要用它

  • 只有两个分类变量、只想做独立性检验:用「卡方检验」,结论等价而输出更直接;2×2 表且期望频数不足时用「Fisher精确检验」。
  • 想把其中一个变量当作结果去解释、并报效应量:结果是二分类用「逻辑回归」,结果是等级用「有序逻辑回归」。
  • 暴露与结局都是二分类、第三个变量是要控制的混杂:用「分层卡方分析」,它直接给合并 OR 与各层齐性检验,而本模块只给边际关联。
  • 分类变量超过 3 个,或水平数很多:本模块最多收 3 个变量、每个最多 10 个水平。改用「多重对应分析」看整体结构,或按研究问题拆成若干个三变量分析分别做。
  • 只想描述构成比、看行列百分比,不打算建模:用「列联(交叉)分析」。
  • 因变量是真正的计数(每天几起事故)而不是列联表格子:用「计数数据回归」;只想检验它是不是泊松分布用「泊松分布检验」。

容易误读的地方

  • 两个拖拽区的名字都不是字面意思,拖进去的全都是分类变量。 “计数变量(分类)”要放 2 个或更多分类变量,不是一列计数;“第三个分类变量(可选)”放的就是第三个分类变量,不是频数权重列——代码里它就是直接接在变量清单后面。所以这里没有频数加权入口:如果你手上是已经汇总好的“组合 → 频数”表,必须先在数据处理里按频数展开成每行一个个案,否则报告里的 N 就是表的行数而不是样本量,全部 p 值随之失真。同一族的「泊松分布检验」里那个“加权项”才是真正的频数列,两者别混。
  • 卡② 的参数不是关联,把它读成关联是这个模块最大的坑。 模块只拟合主效应模型,公式里根本没有交互项,所以“是否吸烟=吸烟 β = 0.354、exp(β) = 1.424”的意思只是“吸烟者的人数是不吸烟者的 1.424 倍”,与患病与否毫无关系。同理,“性别=男 p = 0.549”说的是男女人数是否均衡,不是性别与其他变量无关。判断有没有关联必须看卡④ 的 G²,强度看 Cramér's V,位置看调整残差。
  • G² 显著只说明“独立模型不够”,它不告诉你是哪一层交互。 三个变量时,拒绝独立可能来自任何一对二阶交互,也可能来自三阶交互,而本模块只拟合两端——主效应模型与饱和模型,中间那些层次模型不给,也不逐项报交互系数。示例数据 G²(4) = 15.598、p = 0.004 显著,是卡④ 的两两 Cramér's V 才定位到“性别 × 是否吸烟”(V = 0.1324)与“是否吸烟 × 是否患病”(V = 0.1352),而“性别 × 是否患病”那一对 p = 0.148 并不显著。注意这些两两 V 是把第三个变量折叠掉之后的边际关联,与“控制第三个变量后的偏关联”不是一回事,要控制混杂请转「分层卡方分析」。
  • AIC/BIC 那两行不是检验,别拿它们判断独立性。 示例数据里独立模型 AIC = 69.325、饱和模型 AIC = 61.727,饱和更小;但饱和模型对观测频数本来就是完美拟合(G² 恒为 0),它的 AIC 只用来看“多出来的参数值不值”。独立性成不成立看的是 G² 的 p 值。另外表注写明这里的 BIC 取对数似然口径而非 statsmodels 的 deviance 口径,和别处的 BIC 数字不能混着比。
  • 大样本下 G² 一定会显著,关联强不强要看 Cramér's V 的区间;而小样本下未校正的残差很容易冒假阳性。 示例数据 N = 400 时两个显著的 V 也只有 0.13 左右(Cohen 惯例里 0.1 算“小”),区间下限 0.034 与 0.037 都贴近 0——“统计显著”和“值得写进结论的关联”是两码事。另一头,调整残差给了两条阈:未校正的 |r| > 1.96 下有 3 格达标,Bonferroni 校正 8 次比较后的 |r| > 2.734 下只剩 2 格。只有校正后仍达标的格才宜作为“关联所在”写进结论。

报告里有什么

  1. 输出结果一:数据概览与前提检验
  2. 输出结果二:对数线性模型参数估计
  3. 输出结果三:频数分布与观测-期望对比可视化
  4. 输出结果四:效应量与事后分析
  5. 输出结果五:结论与学术表述
变量'性别'的频数分布
图1 变量'性别'的频数分布
变量'是否吸烟'的频数分布
图2 变量'是否吸烟'的频数分布
变量'是否患病'的频数分布
图3 变量'是否患病'的频数分布
各单元格:观测频数 vs 独立模型期望频数
图4 各单元格:观测频数 vs 独立模型期望频数
以上各图分别展示各输入变量的边际频数分布,以及各单元格观测频数与独立模型期望频数的对比。

在线统计分析平台 · 233 种分析方法 · AI 智能解读

在线使用
使用教程