<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Statistics on TouchingFish.top</title><link>https://touchingfish.top/categories/statistics/</link><description>Recent content in Statistics on TouchingFish.top</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 28 Aug 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://touchingfish.top/categories/statistics/index.xml" rel="self" type="application/rss+xml"/><item><title>一个点的代价 / 读 Owen(2020)</title><link>https://touchingfish.top/2024/dropping-first-sobol-point/</link><pubDate>Wed, 28 Aug 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/dropping-first-sobol-point/</guid><description>&lt;p&gt;Sobol&amp;rsquo; 序列的第一个点永远是原点——$(0, 0, \dots, 0)$。&lt;/p&gt;
&lt;p&gt;很多人觉得这个点不对劲。它刚好落在单位超立方体的角落里。如果你要用 Sobol&amp;rsquo; 点做 Gaussian 分布的变换，逆正态 CDF 会把原点映射到 $-\infty$。这显然没法用。于是大家很自然地把第一个点丢掉，从第二个点开始取 $n$ 个。&lt;/p&gt;
&lt;p&gt;这个操作叫 burn-in，在 MCMC 里是标准动作。问题是——Sobol&amp;rsquo; 序列不是 Markov chain。&lt;/p&gt;
&lt;p&gt;Art B. Owen 在 2020 年写了一篇短文，标题干脆利落：&lt;em&gt;On dropping the first Sobol&amp;rsquo; point&lt;/em&gt;。结论也干脆利落：&lt;strong&gt;别丢。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;丢掉第一个点，你的 QMC 估计的均方根误差（RMSE）可能从 $O(n^{-3/2})$ 退化到 $O(n^{-1})$——在 $n$ 很大的时候，差别大约是 $\sqrt{n}$ 倍。&lt;/p&gt;
&lt;h2 id="qmc-为什么比-mc-好"&gt;QMC 为什么比 MC 好&lt;/h2&gt;
&lt;p&gt;先回顾一下基本设定。&lt;/p&gt;
&lt;p&gt;Monte Carlo（MC）的 RMSE 是 $O(n^{-1/2})$，对任何 $f \in L^2$ 都成立。这个收敛速度稳如老狗，但慢。&lt;/p&gt;
&lt;p&gt;Quasi-Monte Carlo（QMC）试图做得更好。它不随机抽样，而是用精心构造的&lt;strong&gt;低差异序列&lt;/strong&gt;（low-discrepancy sequence）来填满 $[0,1]^d$。Sobol&amp;rsquo; 序列是最常用的一种。&lt;/p&gt;
&lt;p&gt;Sobol&amp;rsquo; 序列在 base 2 下是一个 $(t,d)$-sequence。这意味着它的前 $2^m$ 个点构成一个 $(t,m,d)$-net——对于某些被称为 elementary interval 的特殊长方体，里面的点数恰好和体积成正比。&lt;/p&gt;</description></item><item><title>抽卡与测序的秘诀 / 超几何分布</title><link>https://touchingfish.top/2024/hypergeometric-distribution-yugioh/</link><pubDate>Sun, 07 Jul 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/hypergeometric-distribution-yugioh/</guid><description>&lt;h2 id="从一个游戏说起"&gt;从一个游戏说起&lt;/h2&gt;
&lt;p&gt;二十年前，我还是个小学生。每天放学都急着回家看上一集游戏王（Yu-Gi-Oh!）。&lt;/p&gt;
&lt;p&gt;这套卡牌游戏有一张传说中的卡——黑暗大法师（Exodia the Forbidden One）。这张卡必须同时集齐五个部件才能生效：右脚、左脚、右手、左手、头部。只要凑齐这五张，直接获胜。&lt;/p&gt;
&lt;p&gt;每副卡组四十张。由于规则限制，同一张卡最多只能放三张（某些特卡只能放一张），所以这五个部件在卡组里至多各有一张。&lt;/p&gt;
&lt;p&gt;问题来了：开局起手五张牌，恰好集齐全部五个部件的概率是多少？&lt;/p&gt;
&lt;p&gt;这是一个经典的&amp;quot;不放回抽样&amp;quot;问题。我们从一副有限的牌堆里抽出若干张，每抽一张，牌堆就少一张，不会重复抽到同一张。（&lt;strong&gt;暂时不考虑类似于特殊效果放回牌堆的骚操作&lt;/strong&gt;）&lt;/p&gt;
&lt;p&gt;超几何分布（Hypergeometric Distribution）正是为这类场景设计的。&lt;/p&gt;
&lt;h2 id="超几何分布的定义"&gt;超几何分布的定义&lt;/h2&gt;
&lt;p&gt;假设一个有限总体共有 $N$ 个单位，其中成功状态（我们感兴趣的类型）有 $K$ 个，失败状态有 $N-K$ 个。我们从这个总体中不放回地抽取 $n$ 个单位，令 $X$ 表示抽到的成功状态的数量，则 $X$ 服从超几何分布：&lt;/p&gt;
$$
X \sim \text{Hypergeometric}(N, K, n)
$$&lt;p&gt;其概率质量函数为：&lt;/p&gt;
$$
P(X = k) = \frac{\binom{K}{k} \binom{N-K}{n-k}}{\binom{N}{n}}, \quad k = \max(0, n - (N-K)), \ldots, \min(n, K)
$$&lt;p&gt;这个公式的逻辑很清晰：分子是&amp;quot;从 $K$ 个成功中抽到 $k$ 个&amp;quot;与&amp;quot;从 $N-K$ 个失败中抽到 $n-k$ 个&amp;quot;的组合数之积；分母是&amp;quot;从全部 $N$ 个中抽到 $n$ 个&amp;quot;的总组合数。&lt;/p&gt;
&lt;p&gt;三个核心参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$N$：总体大小&lt;/li&gt;
&lt;li&gt;$K$：总体中的成功单位数&lt;/li&gt;
&lt;li&gt;$n$：抽样数量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;没有放回，没有重复，每一张牌的抽取都改变了下一次抽取的概率。&lt;/p&gt;
&lt;h2 id="回到游戏王"&gt;回到游戏王&lt;/h2&gt;
&lt;p&gt;现在计算开局集齐黑暗大法师的概率。&lt;/p&gt;
&lt;p&gt;卡组 $N = 40$，五个部件 $K = 5$，起手抽牌 $n = 5$，我们想知道抽到全部五张部件的概率，即 $k = 5$。&lt;/p&gt;</description></item><item><title>从头解析 Sobol 全局敏感性分析</title><link>https://touchingfish.top/2024/sobol-global-sa-from-scratch/</link><pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/sobol-global-sa-from-scratch/</guid><description>&lt;p&gt;面对一个模型时，你在做什么？&lt;/p&gt;
&lt;p&gt;调参数。翻文献。看哪个数字不确定，然后想办法让它确定一点。道理上都懂——模型是对现实的压缩，参数是对这个压缩过程的描述。一个有十个参数的模型，意味着有十个地方可能出错、十种不确定性同时存在。&lt;/p&gt;
&lt;p&gt;问题在于：当模型跑出来的结果和你预期不符时，你该怀疑哪个参数？&lt;/p&gt;
&lt;p&gt;拍脑袋是一种方法。文献里查是另一种。但直觉会骗人，文献也不一定靠谱——有些参数是&amp;quot;纸老虎&amp;quot;，看起来重要其实无关紧要；有些参数是&amp;quot;幕后玩家&amp;quot;，自己不动声色地操纵整个系统。&lt;/p&gt;
&lt;p&gt;这就是 Sobol&amp;rsquo; 敏感性分析要回答的问题——不是&amp;quot;这个参数敏感吗&amp;quot;，而是&amp;quot;在参数的整个运动范围内，谁在决定输出的命运&amp;quot;。&lt;/p&gt;
&lt;h2 id="从局部到全局"&gt;从局部到全局&lt;/h2&gt;
&lt;p&gt;最直接的想法是这样的：找一个基准点，把每个参数稍微动一动，看看输出变多少。变幅大的就是&amp;quot;敏感&amp;quot;的参数，变幅小的就是&amp;quot;不敏感&amp;quot;的。实际操作中常见做法是固定所有参数在某个基准值上，然后逐个扰动——比如每个参数调高 1%，看输出变化多少。&lt;/p&gt;
&lt;p&gt;这就是局部敏感性分析（Local Sensitivity Analysis，Local SA）。对线性模型来说，这个方法够用——导数在哪里都一样，在一点上试过就知道全局。&lt;/p&gt;
&lt;p&gt;但现实中的模型大多是非线性的。参数 A 在基准点附近可能无关紧要，换一个区域就成了主导因素；参数 B 恰恰相反。局部 SA 给你的是一张从锁孔里拍的全景照片——理论上是全景，实际上你只看到了一条缝。&lt;/p&gt;
&lt;p&gt;全局敏感性分析（Global Sensitivity Analysis，Global SA）的思路完全不同。它不再执着于&amp;quot;在这个点谁敏感&amp;quot;这个局部问题，而是把目光投向参数的整个运动范围——&lt;strong&gt;谁的波动能掀起最大的风浪？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;具体来说，假设模型为&lt;/p&gt;
$$Y = \mathcal{M}(X_1, X_2, \ldots, X_m)$$&lt;p&gt;其中 $X_i \sim F_i$ 是相互独立的随机变量，分布 $F_i$ 反映了你对第 $i$ 个参数的不确定性认知。Sobol&amp;rsquo; 方法要做的，是把 $\text{Var}(Y)$ 这个数字拆成一堆加起来等于它的分量，每个分量对应一组参数的贡献。&lt;/p&gt;
&lt;p&gt;关键在于怎么拆。&lt;/p&gt;
&lt;h2 id="anova-分解方差的乐高"&gt;ANOVA 分解：方差的乐高&lt;/h2&gt;
&lt;p&gt;Sobol&amp;rsquo; 方法的数学基础是 ANOVA（Analysis of Variance）分解，也叫 Hoeffding–Sobol 分解。这个名字听起来吓人，直觉却很友好。&lt;/p&gt;
&lt;h3 id="一个类比"&gt;一个类比&lt;/h3&gt;
&lt;p&gt;想象你在做一道菜。最终的味道（输出 $Y$）取决于盐、糖、醋、酱油……每种调料（输入 $X_i$）。你每次做菜时各调料的用量都有一点随机波动，所以每次做出来的味道也略有不同。&lt;/p&gt;
&lt;p&gt;现在你想知道：味道的变化，多大程度上是因为盐用量的波动？多大程度上是糖和醋的配合出了问题？&lt;/p&gt;
&lt;p&gt;ANOVA 分解做的事情就是：把&amp;quot;味道的总波动&amp;quot;拆成&amp;quot;盐独自贡献的部分&amp;quot;、&amp;ldquo;糖独自贡献的部分&amp;rdquo;、&amp;ldquo;盐和糖交互贡献的部分&amp;rdquo;……一直拆到所有可能的组合。&lt;/p&gt;
&lt;h3 id="数学形式"&gt;数学形式&lt;/h3&gt;
&lt;p&gt;严格来说，Hoeffding–Sobol 分解说的是：任何一个平方可积函数 $f(X_1, \ldots, X_m)$ 都可以唯一地分解为&lt;/p&gt;
$$f(X) = f_0 + \sum_{i} f_i(X_i) + \sum_{i\lt j} f_{ij}(X_i, X_j) + \cdots + f_{1\ldots m}(X_1, \ldots, X_m)$$&lt;p&gt;其中每一项满足两个条件：&lt;/p&gt;</description></item><item><title>撒豆子的人和砌砖的工匠</title><link>https://touchingfish.top/2024/mcmc-vs-qmc-basics/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/mcmc-vs-qmc-basics/</guid><description>&lt;p&gt;积分是数值方法里的老问题了。&lt;/p&gt;
$$\int_{[0,1]^d} f(\boldsymbol{x}) d\boldsymbol{x} \approx \frac{1}{n}\sum_{i=1}^n f(\boldsymbol{x}_i)$$&lt;p&gt;找 $n$ 个点，算函数值，取平均——听起来简单到无聊。但稍微想一步就会碰到一个根本问题：&lt;strong&gt;点从哪里来？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个问题把世界分成两半。&lt;/p&gt;
&lt;p&gt;一个撒豆子的人，闭着眼睛往方格里扔，相信大数定律会替他摆平一切。
一个砌砖的工匠，拿着图纸往方格里填，相信结构本身就是均匀。&lt;/p&gt;
&lt;p&gt;前者叫 Monte Carlo，后者叫 Quasi-Monte Carlo。&lt;/p&gt;
&lt;h2 id="monte-carlo随机的智慧"&gt;Monte Carlo：随机的智慧&lt;/h2&gt;
&lt;p&gt;Monte Carlo 的哲学就一句话：我不知道怎么均匀地填满空间，但我知道随机撒点&amp;quot;大概率&amp;quot;会均匀。&lt;/p&gt;
&lt;p&gt;大数定律担保了这件事。弱大数定律、强大数定律、中心极限定理——这些定理说，只要你样本量够大，样本均值会收拢到期望值附近。管它怎么撒的，反正够多就行。&lt;/p&gt;
&lt;p&gt;所以 MC 的 RMSE 是 $O(n^{-1/2})$。这个收敛速度稳如老狗——不管你的函数多复杂、维度多高，永远是这个速度。&lt;/p&gt;
&lt;p&gt;但&amp;quot;稳&amp;quot;有时候是夸奖，有时候是批评。$O(n^{-1/2})$ 意味着什么？意味着你想把误差压一半，样本量要翻四倍。$n=1000$ 不够，换 $n=4000$。还不够？$n=16000$。这是一条没有尽头的高速公路，每往前开一倍，只能缩短一半的距离。&lt;/p&gt;
&lt;p&gt;说到底，MC 的均匀是逼出来的——你不知道怎么设计均匀，就只好赌概率够大时运气会好。&lt;/p&gt;
&lt;h3 id="当独立采样太贵"&gt;当独立采样太贵&lt;/h3&gt;
&lt;p&gt;标准 MC 假设样本是独立的。这有时候太奢侈了。&lt;/p&gt;
&lt;p&gt;比如你要做 Bayesian inference。后验分布 $\pi(\theta \mid x) \propto L(x \mid \theta)\pi(\theta)$ 里那个配分函数 $Z = \int L(x \mid \theta)\pi(\theta) d\theta$，在高维空间里根本算不出来。拒绝采样更是灾难——高维空间里大部分随机点都会被拒绝，效率低到让人想转行。&lt;/p&gt;
&lt;p&gt;MCMC（Markov Chain Monte Carlo）就是来解决这个问题的。&lt;/p&gt;
&lt;p&gt;思路是：不追求独立，追求&lt;strong&gt;平稳&lt;/strong&gt;。构造一个 Markov chain，让它的平稳分布刚好是你想要的分布。然后让 chain 跑起来，跑久了，样本就&amp;quot;像是&amp;quot;从目标分布来的。&lt;/p&gt;
&lt;p&gt;Metropolis-Hastings、Gibbs sampling、Hamiltonian Monte Carlo——这些名字在统计圈里如雷贯耳。它们不是去挑战大数定律，而是去利用 Markov chain 的遍历定理。&lt;/p&gt;</description></item><item><title>回归能做的事 / Simple Linear Regression Universe</title><link>https://touchingfish.top/2023/regression-universal-advantage/</link><pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/regression-universal-advantage/</guid><description>&lt;p&gt;这个系列走到了最后一篇。&lt;/p&gt;
&lt;p&gt;前面七篇文章论证了一件事：t检验、ANOVA、相关分析——你在基础统计课上学到的几乎所有参数检验，都是线性回归的特例。有些等价于简单回归，有些等价于加了固定效应的回归，有些等价于标准化后的回归。但归根结底，它们都住在 $Y = X\beta + \varepsilon$ 这栋楼里。&lt;/p&gt;
&lt;p&gt;这栋楼本身还远不止如此。今天聊聊：回归的框架为什么比传统检验&amp;quot;能打&amp;quot;那么多。&lt;/p&gt;
&lt;h2 id="t检验只能问一个是或否"&gt;t检验只能问一个&amp;quot;是或否&amp;quot;&lt;/h2&gt;
&lt;p&gt;t检验能回答的问题是：两组均值是否不同？&lt;/p&gt;
&lt;p&gt;能给你的输出是：t值、p值、&amp;ldquo;显著还是不显著&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;就这样。&lt;/p&gt;
&lt;p&gt;如果你想问&amp;quot;控制年龄之后，两组均值是否仍然不同？&amp;quot;——t检验答不了。如果你想问&amp;quot;剂量每增加一个单位，血压下降多少？&amp;quot;——t检验答不了。如果你想问&amp;quot;男性和女性对治疗的反应是否有差异？&amp;quot;——t检验可以分组做，但不能在一个模型里同时估计主效应和交互效应。&lt;/p&gt;
&lt;p&gt;回归框架下，这些问题全都是在一个模型里多加一行 $X$ 的事。&lt;/p&gt;
&lt;h2 id="加协变量从有没有差异到为什么有差异"&gt;加协变量：从&amp;quot;有没有差异&amp;quot;到&amp;quot;为什么有差异&amp;quot;&lt;/h2&gt;
&lt;p&gt;成组t检验告诉你：治疗组和对照组的血压有显著差异。&lt;/p&gt;
&lt;p&gt;回归可以告诉你：&lt;strong&gt;在控制了年龄、性别和基线血压之后&lt;/strong&gt;，治疗组和对照组的血压仍然有显著差异。&lt;/p&gt;
&lt;p&gt;只需要把模型从&lt;/p&gt;
$$
Y = \beta_0 + \beta_1 \cdot \rm{treatment} + \varepsilon
$$&lt;p&gt;扩展为&lt;/p&gt;
$$
Y = \beta_0 + \beta_1 \cdot \rm{treatment} + \beta_2 \cdot \rm{age} + \beta_3 \cdot \rm{sex} + \beta_4 \cdot \rm{baseline} + \varepsilon
$$&lt;p&gt;$\beta_1$ 的含义从&amp;quot;两组均值之差&amp;quot;变成了&amp;quot;&lt;strong&gt;其他条件不变时&lt;/strong&gt;，治疗组与对照组的血压差异&amp;quot;。从 association 到 conditional association，这是一大步。&lt;/p&gt;
&lt;p&gt;在医学研究中，不加协变量的分析几乎是不可发表的。因为随机对照试验（RCT）虽然理论上保证了组间可比性，但实际中总有运气不好的时候——万一治疗组平均年龄偏高呢？加协变量就是在统计上抹平这些偶然的不均衡。&lt;/p&gt;
&lt;p&gt;而t检验没有&amp;quot;加协变量&amp;quot;这个选项。你得另找方法——通常是回归。&lt;/p&gt;
&lt;h2 id="交互项效应不是一成不变的"&gt;交互项：效应不是一成不变的&lt;/h2&gt;
&lt;p&gt;t检验默认治疗效应在所有子群体中相同。回归可以加交互项：&lt;/p&gt;
$$
Y = \beta_0 + \beta_1 \cdot \rm{treatment} + \beta_2 \cdot \rm{sex} + \beta_3 \cdot (\rm{treatment} \times \rm{sex}) + \varepsilon
$$&lt;p&gt;$\beta_3$ 告诉你：男性和女性的治疗效应是否有显著差异？&lt;/p&gt;</description></item><item><title>r = β*</title><link>https://touchingfish.top/2023/pearson-correlation-regression/</link><pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/pearson-correlation-regression/</guid><description>&lt;p&gt;Pearson相关系数 $r$ 是统计101的必修内容。定义是：&lt;/p&gt;
$$
r = \frac{\sum (X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum (X_i - \bar{X})^2 \sum (Y_i - \bar{Y})^2}}
$$&lt;p&gt;就是&amp;quot;协方差除以两个标准差的乘积&amp;quot;。取值范围 $[-1, 1]$，绝对值越大说明线性相关越强。&lt;/p&gt;
&lt;p&gt;而回归系数 $\beta_1$ 是：&lt;/p&gt;
$$
\beta_1 = \frac{\sum (X_i - \bar{X})(Y_i - \bar{Y})}{\sum (X_i - \bar{X})^2}
$$&lt;p&gt;长得有点像，但不是同一个东西。$\beta_1$ 可以大于 $1$，单位取决于 $Y$ 和 $X$ 的单位。&lt;/p&gt;
&lt;p&gt;这两个公式之间有什么精确的关系？如果你把 $X$ 和 $Y$ 都标准化（减去均值再除以标准差），回归系数就变成了 $r$。&lt;/p&gt;
&lt;h2 id="标准化回归"&gt;标准化回归&lt;/h2&gt;
&lt;p&gt;定义标准化变量：&lt;/p&gt;
$$
X_i^* = \frac{X_i - \bar{X}}{s_X}, \quad Y_i^* = \frac{Y_i - \bar{Y}}{s_Y}
$$&lt;p&gt;其中 $s_X$ 和 $s_Y$ 分别是 $X$ 和 $Y$ 的样本标准差。标准化后，两个变量的均值都是 $0$，标准差都是 $1$。&lt;/p&gt;</description></item><item><title>固定效应回归的视角 / Paired T-test</title><link>https://touchingfish.top/2023/paired-t-test-fixed-effects/</link><pubDate>Mon, 20 Nov 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/paired-t-test-fixed-effects/</guid><description>&lt;p&gt;前面的文章一直在讲&amp;quot;某某检验等价于回归&amp;quot;。这一篇要讲一个&lt;strong&gt;不完全等价&lt;/strong&gt;的情况。&lt;/p&gt;
&lt;p&gt;配对t检验（paired t-test）不等价于普通的简单线性回归。但它等价于另一种回归——带个体固定效应的回归（fixed effects regression）。这种&amp;quot;不完全等价&amp;quot;反而能帮你理解回归框架的灵活性。&lt;/p&gt;
&lt;h2 id="配对t检验在做什么"&gt;配对t检验在做什么？&lt;/h2&gt;
&lt;p&gt;配对设计：每个受试者接受两种处理（或前后测量两次），你关心的是两种处理下结果是否有差异。比如：10个人吃药前和吃药后的血压变化。&lt;/p&gt;
&lt;p&gt;配对t检验的做法是：对每个人算差值 $D_i = Y_{i,\rm after} - Y_{i,\rm before}$，然后对差值做单样本t检验，$H_0: \mu_D = 0$。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;130&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;142&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;135&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;140&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;132&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;138&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;129&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;136&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;133&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;138&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;126&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;130&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;135&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;134&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;125&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;131&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;130&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;t.test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;paired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Paired&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;-13.038&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;3.787e-07&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;alternative&lt;/span&gt; &lt;span class="n"&gt;hypothesis&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;true&lt;/span&gt; &lt;span class="n"&gt;mean&lt;/span&gt; &lt;span class="n"&gt;difference&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;equal&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;95&lt;/span&gt; &lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;-4.811372&lt;/span&gt; &lt;span class="m"&gt;-3.388628&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sample&lt;/span&gt; &lt;span class="n"&gt;estimates&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mean&lt;/span&gt; &lt;span class="n"&gt;difference&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;-4.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="为什么普通回归不行"&gt;为什么普通回归不行？&lt;/h2&gt;
&lt;p&gt;如果你不管配对结构，直接把前后数据当独立样本做成组t检验：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;t.test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;var.equal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Two&lt;/span&gt; &lt;span class="n"&gt;Sample&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;-2.0014&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.06066&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;alternative&lt;/span&gt; &lt;span class="n"&gt;hypothesis&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;true&lt;/span&gt; &lt;span class="n"&gt;difference&lt;/span&gt; &lt;span class="kr"&gt;in&lt;/span&gt; &lt;span class="n"&gt;means&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;equal&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;95&lt;/span&gt; &lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;-8.4039&lt;/span&gt; &lt;span class="m"&gt;0.2039&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sample&lt;/span&gt; &lt;span class="n"&gt;estimates&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mean&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;mean&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;130.2&lt;/span&gt; &lt;span class="m"&gt;134.3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你会发现t值和p值都跟配对检验不一样——通常配对检验的p值更小（因为它消除了个体间差异的干扰）。&lt;/p&gt;
&lt;p&gt;同样的，如果你跑一个&amp;quot;处理前后&amp;quot;的虚拟变量回归：&lt;/p&gt;
$$
Y = \beta_0 + \beta_1 \cdot \rm{after} + \varepsilon
$$&lt;p&gt;$\beta_1$ 的t检验等价于上面的独立样本t检验，不是配对t检验。因为这个回归把同一个人的前后两次测量当成两个独立的观测，忽略了个体间的相关性。&lt;/p&gt;
&lt;p&gt;配对设计的核心是：&lt;strong&gt;同一个人的两次测量不是独立的&lt;/strong&gt;。张三的血压无论吃药前后都可能比李四高——如果不控制这个&amp;quot;张三效应&amp;quot;，个体差异就会淹没处理效应。&lt;/p&gt;
&lt;h2 id="个体固定效应回归"&gt;个体固定效应回归&lt;/h2&gt;
&lt;p&gt;解决方案：给每个人加一个单独的截距。这就是个体固定效应模型（individual fixed effects model）：&lt;/p&gt;
$$
Y_{it} = \alpha_i + \beta \cdot \rm{after}_{it} + \varepsilon_{it}
$$&lt;p&gt;其中 $\alpha_i$ 是第 $i$ 个人的固定效应（一个只属于他/她的截距项），$\rm{after}_{it}$ 是&amp;quot;是否为处理后测量&amp;quot;的虚拟变量，$\beta$ 是我们关心的处理效应。&lt;/p&gt;</description></item><item><title>多个虚拟变量的回归 / One-way ANOVA</title><link>https://touchingfish.top/2023/one-way-anova-regression/</link><pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/one-way-anova-regression/</guid><description>&lt;p&gt;前一篇文章证明了在两组比较中 $t^2 = F$，t检验、ANOVA、回归三者等价。&lt;/p&gt;
&lt;p&gt;现在从两组推广到多组。单因素ANOVA有 $k$ 个处理组（$k \ge 2$），想知道各组均值是否有差异。传统做法：算组间平方和、组内平方和、F统计量，查表做结论。&lt;/p&gt;
&lt;p&gt;回归视角：把 $k$ 个组编码为 $k-1$ 个虚拟变量，做多元线性回归，然后做整体F检验。&lt;/p&gt;
&lt;h2 id="从两组到多组问题在哪"&gt;从两组到多组：问题在哪？&lt;/h2&gt;
&lt;p&gt;两组时，一个虚拟变量就够了——$X=0$ 表示A组，$X=1$ 表示B组。多组时，你不能用一个变量编码&amp;quot;A、B、C&amp;quot;三种取值（因为 C 和 A 的差距不一定刚好是 B 和 A 的两倍，假设线性的数值关系毫无道理）。&lt;/p&gt;
&lt;p&gt;解决方案：用 $k-1$ 个虚拟变量。&lt;/p&gt;
&lt;p&gt;以三组为例。设对照组为A组，构造两个虚拟变量：&lt;/p&gt;
$$
X_{B} =
\begin{cases}
1, &amp; \rm{B组} \\
0, &amp; \rm{其他}
\end{cases}
\quad
X_{C} =
\begin{cases}
1, &amp; \rm{C组} \\
0, &amp; \rm{其他}
\end{cases}
$$&lt;p&gt;A组对应 $(X_B, X_C) = (0, 0)$，作为参照组（reference group）。回归模型：&lt;/p&gt;
$$
Y = \beta_0 + \beta_B X_B + \beta_C X_C + \varepsilon
$$&lt;p&gt;OLS估计结果：&lt;/p&gt;</description></item><item><title>t² = F</title><link>https://touchingfish.top/2023/t-squared-equals-f/</link><pubDate>Sun, 10 Sep 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/t-squared-equals-f/</guid><description>&lt;p&gt;如果你在统计课上认真听了两组比较那两章，你可能隐约记得：t检验的t值和ANOVA的F值之间好像有点关系。&lt;/p&gt;
&lt;p&gt;但大多数教材不会把这件事说透。t检验在第四章，ANOVA在第六章，它们被当作两个独立的工具来讲。你忙着记公式、背适用条件、算自由度，没时间去想&amp;quot;这两个东西本质上是不是同一个&amp;quot;。&lt;/p&gt;
&lt;p&gt;答案是：在两组比较的情形下，$t^2 = F$。这不是近似，是严格的数学恒等式。&lt;/p&gt;
&lt;h2 id="从两个分布说起"&gt;从两个分布说起&lt;/h2&gt;
&lt;p&gt;t 分布的定义是这样的：如果 $Z \sim \mathcal{N}(0, 1)$ 和 $V \sim \chi^2_{df}$ 独立，那么&lt;/p&gt;
$$
t = \frac{Z}{\sqrt{V / df}} \sim t_{df}
$$&lt;p&gt;F 分布的定义是这样的：如果 $U \sim \chi^2_{d_1}$ 和 $V \sim \chi^2_{d_2}$ 独立，那么&lt;/p&gt;
$$
F = \frac{U / d_1}{V / d_2} \sim F_{d_1, d_2}
$$&lt;p&gt;把 t 的定义平方一下：&lt;/p&gt;
$$
t^2 = \frac{Z^2}{V / df}
$$&lt;p&gt;$Z^2$ 服从自由度为 $1$ 的 $\chi^2$ 分布。所以 $t^2$ 恰好是分子自由度为 $1$、分母自由度为 $df$ 的 F 分布：&lt;/p&gt;
$$
t^2_{df} = F_{1, df}
$$&lt;p&gt;这就是分布层面的等价性。不是&amp;quot;差不多&amp;quot;，是&amp;quot;平方之后完全一样&amp;quot;。&lt;/p&gt;</description></item><item><title>虚拟变量 / Independent T-test</title><link>https://touchingfish.top/2023/independent-t-test-regression/</link><pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/independent-t-test-regression/</guid><description>&lt;p&gt;在特定条件下，它们本质上是同一个统计检验，只是表达形式不同。&lt;/p&gt;
&lt;p&gt;如果把&amp;quot;成组 t 检验&amp;quot;理解为&amp;quot;两组均值比较的独立样本 t 检验&amp;quot;，那么它与&amp;quot;只有一个二元自变量的简单线性回归中的回归系数显著性检验&amp;quot;是完全等价的。&lt;/p&gt;
&lt;h2 id="两种写法同一个模型"&gt;两种写法，同一个模型&lt;/h2&gt;
&lt;p&gt;t检验的设定：比较A组与B组均值是否不同。你有两组独立样本，想知道它们来自的总体均值是否相等。&lt;/p&gt;
&lt;p&gt;回归的设定：设&lt;/p&gt;
$$
Y = \beta_0 + \beta_1 X + \varepsilon
$$&lt;p&gt;其中 $X$ 是一个虚拟变量（dummy variable）：&lt;/p&gt;
$$
X =
\begin{cases}
0, &amp; \rm{A组} \\
1, &amp; \rm{B组}
\end{cases}
$$&lt;p&gt;最小二乘估计的结果是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\hat\beta_0 = \bar{Y}_{\rm A}$，A组的样本均值&lt;/li&gt;
&lt;li&gt;$\hat\beta_1 = \bar{Y}_{\rm B} - \bar{Y}_{\rm A}$，两组均值之差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后检验 $H_0: \beta_1 = 0$。&lt;/p&gt;
&lt;p&gt;这里得到的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;t 值相同&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;p 值相同&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自由度相同&lt;/strong&gt;（都是 $n_{\rm A} + n_{\rm B} - 2$）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结论相同&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从数学上看，它们是同一个模型的两种写法。&lt;/p&gt;
&lt;h2 id="一个数值验证"&gt;一个数值验证&lt;/h2&gt;
&lt;p&gt;算一个具体例子比讲十遍理论更有说服力。假设A组有5个数据：$[3.2, 4.1, 3.8, 3.5, 4.0]$，B组有5个数据：$[5.1, 5.8, 5.3, 5.5, 5.0]$。&lt;/p&gt;</description></item><item><title>截距项 / One Sample t-test</title><link>https://touchingfish.top/2023/one-sample-t-test-regression/</link><pubDate>Thu, 20 Jul 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/one-sample-t-test-regression/</guid><description>&lt;p&gt;我们从最简情形开始。&lt;/p&gt;
&lt;p&gt;单样本t检验是你在统计课上学到的第一个检验：有一组数据，想知道它的均值是否等于某个特定值 $\mu_0$。比如：这批药片的平均重量是不是 $500\rm{mg}$？这个班级的平均成绩是不是 $70$ 分？&lt;/p&gt;
&lt;p&gt;标准做法：算t统计量，查t分布表，看p值，做结论。&lt;/p&gt;
&lt;p&gt;而&amp;quot;回归视角&amp;quot;的做法更简单：跑一个&lt;strong&gt;只有截距项&lt;/strong&gt;的回归。&lt;/p&gt;
&lt;h2 id="只有截距的回归"&gt;只有截距的回归&lt;/h2&gt;
&lt;p&gt;考虑模型：&lt;/p&gt;
$$
Y_i = \beta_0 + \varepsilon_i, \quad \varepsilon_i \sim \mathcal{N}(0, \sigma^2)
$$&lt;p&gt;没有自变量，只有截距 $\beta_0$。对这个模型做最小二乘估计（OLS），$\hat\beta_0$ 恰好是样本均值 $\bar{Y}$。这应该不意外——当你只能用一条水平线去拟合数据时，最好的选择就是取平均值。&lt;/p&gt;
&lt;p&gt;检验 $H_0: \beta_0 = \mu_0$ 的 t 统计量为：&lt;/p&gt;
$$
t = \frac{\hat\beta_0 - \mu_0}{\rm{SE}(\hat\beta_0)}
$$&lt;p&gt;其中 $\rm{SE}(\hat\beta_0) = s / \sqrt{n}$，$s$ 是样本标准差。&lt;/p&gt;
&lt;p&gt;而单样本t检验的公式是：&lt;/p&gt;
$$
t = \frac{\bar{Y} - \mu_0}{s / \sqrt{n}}
$$&lt;p&gt;一样。&lt;/p&gt;
&lt;p&gt;因为 $\hat\beta_0 = \bar{Y}$，所以两个公式完全等价。t值相同，自由度相同（都是 $n-1$），p值相同，结论相同。&lt;/p&gt;
&lt;h2 id="拟合一个空模型"&gt;拟合一个&amp;quot;空&amp;quot;模型&lt;/h2&gt;
&lt;p&gt;在 R 里，你可以这样拟合：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="nf"&gt;c&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4.9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;lm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Call&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;lm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;formula&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Residuals&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;2.000e-01&lt;/span&gt; &lt;span class="m"&gt;-2.000e-01&lt;/span&gt; &lt;span class="m"&gt;1.000e-01&lt;/span&gt; &lt;span class="m"&gt;1.041e-16&lt;/span&gt; &lt;span class="m"&gt;-1.000e-01&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Coefficients&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Estimate&lt;/span&gt; &lt;span class="n"&gt;Std.&lt;/span&gt; &lt;span class="n"&gt;Error&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="nf"&gt;Pr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;|&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Intercept&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;5.00000&lt;/span&gt; &lt;span class="m"&gt;0.07071&lt;/span&gt; &lt;span class="m"&gt;70.71&lt;/span&gt; &lt;span class="m"&gt;2.4e-07&lt;/span&gt; &lt;span class="o"&gt;***&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;---&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Signif.&lt;/span&gt; &lt;span class="n"&gt;codes&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;***&amp;#39;&lt;/span&gt; &lt;span class="m"&gt;0.001&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;**&amp;#39;&lt;/span&gt; &lt;span class="m"&gt;0.01&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;*&amp;#39;&lt;/span&gt; &lt;span class="m"&gt;0.05&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;.&amp;#39;&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt; &lt;span class="s"&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Residual&lt;/span&gt; &lt;span class="n"&gt;standard&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.1581&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="n"&gt;degrees&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;freedom&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Estimate&lt;/code&gt; 那一栏就是样本均值，t值和p值和单样本t检验的输出一模一样。&lt;/p&gt;</description></item><item><title>y=ax+b这么能打？ / Simple Linear Regression Universe</title><link>https://touchingfish.top/2023/linear-model-unified-perspective/</link><pubDate>Sat, 10 Jun 2023 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2023/linear-model-unified-perspective/</guid><description>&lt;p&gt;学了这么多年统计，有一个问题我直到很晚才想明白。&lt;/p&gt;
&lt;p&gt;为什么基础统计课要教那么多互不相关的检验方法？t检验、ANOVA、Pearson相关、线性回归——它们各自有各自的公式、各自的适用条件、各自的查表方式。考试的时候，你得先判断&amp;quot;这道题该用哪种检验&amp;quot;，然后再套对应的公式。&lt;/p&gt;
&lt;p&gt;我当时就是这么学的。背了一堆检验，考完就忘，需要考试的时候又背一遍。&lt;/p&gt;
&lt;p&gt;直到某天我突然意识到：&lt;/p&gt;
&lt;p&gt;它们其实都是同一个公式的不同写法。&lt;/p&gt;
&lt;p&gt;更准确地说，它们都是线性回归模型 $Y = X\beta + \varepsilon$ 在 $X$ 取不同形式时的特例。&lt;/p&gt;
&lt;p&gt;这个发现让我整个人有点懵。倒不是因为数学有多难——恰恰相反，是因为数学太简单了。简单到你会怀疑：为什么当初没人告诉我？&lt;/p&gt;
&lt;p&gt;当然，老师不这样教是有原因的（可能是怕我们一时接受不了？也可能教材就是从各种检验分别讲起的，历史惯性使然）。但站在&amp;quot;事后诸葛亮&amp;quot;的视角，用回归统一一切，确实能让统计的版图变得异常清晰。&lt;/p&gt;
&lt;h2 id="回归是最通用的语言"&gt;回归是最通用的语言&lt;/h2&gt;
&lt;p&gt;考虑最简单的线性回归：&lt;/p&gt;
$$
Y = \beta_0 + \beta_1 X + \varepsilon
$$&lt;p&gt;这里 $\beta_0$ 是截距，$\beta_1$ 是斜率，$\varepsilon$ 是误差项。你关心的问题是：$X$ 对 $Y$ 有没有影响？统计上就是检验 $H_0: \beta_1 = 0$。&lt;/p&gt;
&lt;p&gt;现在，如果我告诉你 $X$ 可以是什么，你就知道为什么回归能统一一切了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果 $X$ 只有 $0$ 和 $1$ 两个取值（比如：$0$ = 对照组，$1$ = 实验组），这个回归就是&lt;strong&gt;成组t检验&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果根本没有 $X$，只保留截距 $\beta_0$，这个回归就是&lt;strong&gt;单样本t检验&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果把 $X$ 扩展为多个 $0/1$ 虚拟变量（表示多组分类），就变成了&lt;strong&gt;单因素ANOVA&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果 $X$ 是连续的，并且先把 $X$ 和 $Y$ 都标准化，回归系数 $\beta_1$ 恰好等于&lt;strong&gt;Pearson相关系数 $r$&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果加入个体固定效应（每个受试者一个截距），就变成了&lt;strong&gt;配对t检验&lt;/strong&gt;的等价形式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这就有意思了。五个看起来八竿子打不着的检验方法，在回归的框架下全是一个东西。&lt;/p&gt;</description></item><item><title>贝叶斯网络：因果图模型的前身</title><link>https://touchingfish.top/2022/bayesian-network/</link><pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2022/bayesian-network/</guid><description>&lt;p&gt;贝叶斯网络（Bayesian Network），作为一种图形化模型，早在20世纪末便广为流传，其主要用以描述随机变量之间的条件独立性与概率分布关系。它以有向无环图（Directed Acyclic Graph, DAG）为基础，将复杂的概率系统分解为易于处理的子结构。&lt;/p&gt;
&lt;p&gt;在这一框架下，每个节点代表一个随机变量，每条有向边则表示变量间的条件依赖。例如，在贝叶斯网络中，若变量 $X$ 指向 $Y$，这仅表示给定 $X$ 的条件下，$Y$ 的概率分布被决定。&lt;/p&gt;
&lt;h2 id="条件独立性的理论基础"&gt;条件独立性的理论基础&lt;/h2&gt;
&lt;p&gt;考虑我们将要进行建模的分布为 $P(x_1,x_2,\dots,x_n)$，根据链式法则（chain rule），对其进行分解：&lt;/p&gt;
$$
\begin{aligned}
P(x_1,x_2,\dots,x_n)&amp;=P(x_n|x_{n-1},\dots,x_1)P(x_{n-1}|x_{n-2},\dots,x_1)\cdots P(x_2|x_1)P(x_1)\\&amp;=P(x_1)\prod_iP(x_i|x_{i-1},\dots,x_1)
\end{aligned}
$$&lt;p&gt;假设 $x_i$ 均为二元变量（binary），其中 $i=1,2,3,\dots,n$。当考虑 $3$ 个变量时（$n=3$），需要建模的因子 $P(x_3|x_2,x_1)$ 有 $4$ 个参数（parameters）：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;$x_1$&lt;/th&gt;
 &lt;th&gt;$x_2$&lt;/th&gt;
 &lt;th&gt;$P(x_3\|x_2,x_1)$&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;$a_1$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;$a_2$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;$a_3$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;$a_4$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;当考虑 $4$ 个变量时（$n=4$），参数为 $8$ 个。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;$x_1$&lt;/th&gt;
 &lt;th&gt;$x_2$&lt;/th&gt;
 &lt;th&gt;$x_3$&lt;/th&gt;
 &lt;th&gt;$P(x_4\|x_3,x_2,x_1)$&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;$a_1$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;$a_2$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;$a_3$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;$a_4$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;$a_5$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;$a_6$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;$a_7$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;$a_8$&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;也就是说，对 $P(x_n|x_{n-1},\dots,x_1)$ 进行建模必要的参数为 $2^{n-1}$ 个，随着 $n$ 的增加呈指数型增长。&lt;/p&gt;</description></item><item><title>负二项分布和它的朋友（RNA表达量）</title><link>https://touchingfish.top/2021/gamma-poisson/</link><pubDate>Mon, 01 Feb 2021 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2021/gamma-poisson/</guid><description>&lt;h2 id="一个看似奇怪的事实"&gt;一个看似奇怪的事实&lt;/h2&gt;
&lt;p&gt;做RNAseq分析的时候，我们通常会说：表达量计数（read counts）服从负二项分布（Negative Binomial distribution，NB）。这个结论出现在几乎所有主流差异表达分析工具的文档里——DESeq2、edgeR、limma-voom——好像这是一个不言自明的前提。&lt;/p&gt;
&lt;p&gt;但为什么？&lt;/p&gt;
&lt;p&gt;我查过很多资料，大多数解释要么太浅（&amp;ldquo;因为数据过度离散，过dispersed&amp;rdquo;），要么直接跳到公式层面（&amp;ldquo;NB的概率质量函数是……&amp;quot;），要么扯到什么&amp;quot;等待时间&amp;quot;上去（&amp;ldquo;NB描述的是等待r次成功所需的试验次数&amp;rdquo;）——最后一种解释尤其让人困惑，因为RNAseq计数和&amp;quot;等待时间&amp;quot;八竿子打不着。&lt;/p&gt;
&lt;p&gt;所以我想把这件事彻底说清楚。用一个最简单的例子，一步步推出为什么NB是自然的选择，而那个经典的等待时间定义，其实和我们的推导毫无关系。&lt;/p&gt;
&lt;h2 id="从一个直观的例子说起"&gt;从一个直观的例子说起&lt;/h2&gt;
&lt;p&gt;假设我们要研究某个基因在细胞A和细胞B中的表达量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;细胞内部发生了什么？&lt;/strong&gt; 一个基因要被转录，首先要有RNA聚合酶结合到启动子上，然后开始合成。聚合酶会随机地到达和离开启动子区域，所以转录本身是一个随机过程——在任何给定的时间窗口内，合成出的mRNA分子数是随机的。&lt;/p&gt;
&lt;p&gt;如果我们把观察时间固定（比如观察一秒），转录产生的mRNA数量大致服从Poisson分布。理由是：mRNA的产生可以看作一系列独立的&amp;quot;成功&amp;quot;事件（一次转录起始），在一个固定时间窗口内，Poisson是描述这类计数过程的自然模型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;但问题来了——Poisson有一个很强的假设：均值等于方差。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于单细胞来说，均值和方差的关系确实大致如此。但当我们比较&lt;strong&gt;一群细胞&lt;/strong&gt;（比如组织样本中的上万个细胞）时，情况完全不同。即使是同一个基因，不同细胞的表达量也可能差异巨大——有些细胞可能完全不表达，有些高表达。&lt;strong&gt;这种细胞间的异质性（biological variability）会导致整个群体的方差远大于均值。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这就是所谓的&amp;quot;过度离散&amp;rdquo;（overdispersion）。Poisson处理不了这个问题。&lt;/p&gt;
&lt;h2 id="gamma-poisson层级模型"&gt;Gamma-Poisson层级模型&lt;/h2&gt;
&lt;p&gt;解决之道来自一个层级思想。&lt;/p&gt;
&lt;p&gt;我们先承认：不同细胞的真实表达率（$\lambda$）本身是不同的。这种差异可以用一个分布来描述。选什么分布？在统计中，Gamma分布是一个自然的选择——因为它数学上处理起来方便，而且足够灵活，可以描述各种形状的随机变量。&lt;/p&gt;
&lt;p&gt;于是我们构建一个两层模型：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一层（细胞间变异）：&lt;/strong&gt; $\lambda \sim \text{Gamma}(\alpha, \beta)$&lt;/p&gt;
&lt;p&gt;这里 $\lambda$ 代表每个细胞的真实表达率（单位时间内的mRNA平均产量）。$\alpha$ 和 $\beta$ 是Gamma分布的参数。均值 $\mu = \alpha/\beta$，方差 $= \alpha/\beta^2$。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二层（细胞内随机性）：&lt;/strong&gt; 给定 $\lambda$，计数 $X$ 服从Poisson分布：$X | \lambda \sim \text{Poisson}(\lambda)$&lt;/p&gt;
&lt;p&gt;这一层描述的是：即使两个细胞有完全相同的 $\lambda$，由于转录过程本身的随机性，实际观察到的计数也会有波动。&lt;/p&gt;
&lt;p&gt;现在，&lt;strong&gt;把 $\lambda$ 积掉&lt;/strong&gt;（marginalize out），求 $X$ 的边缘分布：&lt;/p&gt;
$$P(X = k) = \int_0^\infty P(X=k|\lambda) \cdot P(\lambda) \, d\lambda$$&lt;p&gt;这个积分的结果是：&lt;/p&gt;
$$P(X = k) = \frac{\Gamma(k+\alpha)}{k! \cdot \Gamma(\alpha)} \left(\frac{\beta}{1+\beta}\right)^\alpha \left(\frac{1}{1+\beta}\right)^k$$&lt;p&gt;而这——恰好就是&lt;strong&gt;负二项分布&lt;/strong&gt;的参数化形式。&lt;/p&gt;</description></item></channel></rss>