<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Phylogenetics on TouchingFish.top</title><link>https://touchingfish.top/categories/phylogenetics/</link><description>Recent content in Phylogenetics on TouchingFish.top</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 10 Dec 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://touchingfish.top/categories/phylogenetics/index.xml" rel="self" type="application/rss+xml"/><item><title>树—数据—假设</title><link>https://touchingfish.top/2024/tree-data-and-hypothesis/</link><pubDate>Tue, 10 Dec 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/tree-data-and-hypothesis/</guid><description>&lt;p&gt;PGLS 最像一面镜子：它不一定告诉你新东西，但它很擅长把你原来不愿意看的细节照出来。&lt;/p&gt;
&lt;p&gt;比如这些：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你的物种名到底有没有对齐&lt;/li&gt;
&lt;li&gt;你的分支长度代表什么&lt;/li&gt;
&lt;li&gt;你有没有在无意中让几条异常点替你&amp;quot;完成论证&amp;quot;&lt;/li&gt;
&lt;li&gt;你拿到的是一棵树，还是一堆不确定的树&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我不是在吓人。我只是说：PGLS 的麻烦，大部分不在数学里，在整理里。&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;
&lt;h3 id="别信你的眼睛"&gt;别信你的眼睛&lt;/h3&gt;
&lt;p&gt;最常见的错误是：树里叫 &lt;code&gt;Homo_sapiens&lt;/code&gt;，表里叫 &lt;code&gt;Homo sapiens&lt;/code&gt;。&lt;br&gt;
你以为只是一个空格，代码会很礼貌地替你处理。&lt;br&gt;
但它经常不会，它只会很安静地把样本丢掉。&lt;/p&gt;
&lt;p&gt;我建议你在任何拟合之前，强制做三件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;显式列出：树里有哪些 tip label，数据里有哪些 species&lt;/li&gt;
&lt;li&gt;计算交集与差集，并把差集打印出来&lt;/li&gt;
&lt;li&gt;最终拟合使用的物种数写进结果里（别让它悄悄变化）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="时间还是替换数"&gt;时间，还是替换数&lt;/h3&gt;
&lt;p&gt;你当然可以说&amp;quot;我用的就是这棵树&amp;quot;。&lt;br&gt;
但 PGLS 会追问：你这棵树的分支长度是什么意思？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;时间树（ultrametric）更直观：共享历史 = 共享时间&lt;/li&gt;
&lt;li&gt;替换数树有时也能用，但解释要更谨慎：共享历史更像&amp;quot;共享变化量&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;（你不写清楚，读者很难判断你 $\Sigma$ 的意义是什么。）&lt;/p&gt;
&lt;h3 id="一棵树还是一堆树"&gt;一棵树，还是一堆树&lt;/h3&gt;
&lt;p&gt;很多时候我们只有一棵&amp;quot;最佳树&amp;quot;，于是就拿它当唯一真相。&lt;/p&gt;
&lt;p&gt;但如果你的树来自贝叶斯后验或 bootstrap，你其实已经有一堆树了。&lt;br&gt;
那你至少可以做一件很便宜的事：在多棵树上重复拟合，看看结论是否稳定。&lt;/p&gt;
&lt;p&gt;结论不稳定并不可耻。可耻的是你明明可以检查，却假装不知道。&lt;/p&gt;
&lt;h2 id="残差里藏了什么"&gt;残差里藏了什么&lt;/h2&gt;
&lt;p&gt;PGLS 的核心假设，是误差结构与树一致（或经 $\lambda$ 调过后足够一致）。&lt;br&gt;
所以你需要看的不是只有系数和 p 值，还有残差。&lt;/p&gt;
&lt;p&gt;我通常会做这几件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;残差 vs 拟合值：有没有明显模式（非线性、异方差）&lt;/li&gt;
&lt;li&gt;影响点：有没有某个物种把斜率拽得太狠&lt;/li&gt;
&lt;li&gt;系统发育信号：残差里是否仍有明显系统发育结构（意味着模型没吃掉你以为它能吃掉的那部分）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一步的心态很重要：诊断不是为了证明你对，而是为了找出你错在哪儿。&lt;/p&gt;
&lt;h3 id="残差诊断的统计学基础"&gt;残差诊断的统计学基础&lt;/h3&gt;
&lt;h4 id="残差的定义"&gt;残差的定义&lt;/h4&gt;
&lt;p&gt;在 GLS/PGLS 下，残差定义为：&lt;/p&gt;
$$e = y - X\hat{\beta}_{GLS}$$&lt;p&gt;在 OLS 下，残差方差是常数（$\sigma^2$）；但在 GLS 下，由于 $\Sigma$ 不是对角矩阵，原始残差 $e$ 的方差不是常数——离根越近的物种的残差，通常方差更大。&lt;/p&gt;</description></item><item><title>不爱解释的人 / Phylogenetic GLS</title><link>https://touchingfish.top/2024/phylogenetic-generalized-least-square/</link><pubDate>Wed, 20 Nov 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/phylogenetic-generalized-least-square/</guid><description>&lt;p&gt;同一份数据，同一个自变量，同一个因变量。&lt;/p&gt;
&lt;p&gt;OLS 说：显著。&lt;/p&gt;
&lt;p&gt;PGLS 说：不显著。&lt;/p&gt;
&lt;p&gt;很想把锅甩给树：是不是树不对？是不是分支长度乱了？&lt;/p&gt;
&lt;p&gt;还是哪里写错了代码？&lt;/p&gt;
&lt;p&gt;PGLS 只是站在那儿，像一个不爱解释的人。&lt;/p&gt;
&lt;p&gt;这篇我想用一种不那么&amp;quot;公式&amp;quot;的方式，讲清楚 PGLS 到底在做什么。&lt;/p&gt;
&lt;p&gt;你只需要抓住一个中心句：&lt;/p&gt;
&lt;p&gt;PGLS 不是换了一个更玄的回归，它只是承认误差有相关结构。&lt;/p&gt;
&lt;h2 id="误差像一盘散沙"&gt;误差像一盘散沙&lt;/h2&gt;
&lt;p&gt;普通线性回归（OLS，Ordinary Least Squares，普通最小二乘法）通常默认：&lt;/p&gt;
$$\epsilon \sim N(0, \sigma^2 I)$$&lt;p&gt;这里 $I$ 的意思很朴素：误差之间互不相关，方差还都一样。&lt;/p&gt;
&lt;p&gt;你可以把它理解成：每个物种的&amp;quot;解释不掉的那部分&amp;quot;，互相之间不应该传染。&lt;/p&gt;
&lt;p&gt;但系统发育数据里，这个默认经常站不住脚：近缘物种共享历史，解释不掉的那部分会一起漂。&lt;/p&gt;
&lt;p&gt;于是你进入另一个世界。&lt;/p&gt;
&lt;h3 id="ols-估计量的完整推导"&gt;OLS 估计量的完整推导&lt;/h3&gt;
&lt;p&gt;$y$ 是因变量的向量（每个物种一个值），$X$ 是设计矩阵（每行一个物种，每列一个自变量，第一列通常是全 1，代表截距），$\beta$ 是我们要估计的系数向量。符号 $'$ 表示转置。&lt;/p&gt;
&lt;p&gt;OLS 想做的事情很简单：找一组 $\beta$，让预测值 $X\beta$ 和观测值 $y$ 之间的残差平方和最小。目标函数写成矩阵形式就是：&lt;/p&gt;
$$S(\beta) = (y - X\beta)'(y - X\beta)$$&lt;p&gt;把它展开，是为了后面能对 $\beta$ 求导：&lt;/p&gt;
$$S(\beta) = y'y - y'X\beta - \beta'X'y + \beta'X'X\beta$$&lt;p&gt;中间两项看起来不一样，其实 $y'X\beta$ 是一个标量（1×1 的数），标量的转置等于自己，所以 $\beta'X'y = (y'X\beta)' = y'X\beta$。合并之后：&lt;/p&gt;</description></item><item><title>一棵树，怎么长出一个协方差矩阵</title><link>https://touchingfish.top/2024/pagels-lambda/</link><pubDate>Tue, 05 Nov 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/pagels-lambda/</guid><description>&lt;p&gt;我以前对&amp;quot;在树上做统计&amp;quot;最大的抵触，不是我不信树，而是我不信那句很随意的话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;我们假设性状沿着树做 Brownian motion。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;听起来像一句推脱。像你问一个人为什么迟到，他说：&amp;ldquo;路上有点堵。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;堵在哪儿？怎么堵的？堵到什么程度？有没有备选路线？——你越问越像在吵架。&lt;/p&gt;
&lt;p&gt;但后来我发现，Brownian motion（BM）在这里的意义，和&amp;quot;世界真的在做随机游走&amp;quot;没什么关系。它更像是一种最小的诚实：你承认性状会变、承认变化会积累、承认近缘会更像，然后你就能把&amp;quot;历史&amp;quot;写成一张可以计算的表。&lt;/p&gt;
&lt;p&gt;那张表就是协方差矩阵：$\Sigma$。&lt;/p&gt;
&lt;p&gt;这篇我想把三件事讲清楚：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;BM 在系统发育语境下到底是什么（别把它当玄学）&lt;/li&gt;
&lt;li&gt;为什么 $\Sigma_{ij}$ 只和&amp;quot;共享祖先到根的那段路&amp;quot;有关&lt;/li&gt;
&lt;li&gt;Pagel&amp;rsquo;s $\lambda$ 到底在调什么：不是调&amp;quot;模型拟合&amp;quot;，而是在调&amp;quot;你愿意相信多少历史&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="先把-brownian-motion-说成一句人话"&gt;先把 Brownian motion 说成一句人话&lt;/h2&gt;
&lt;p&gt;BM 在这里可以理解成：&lt;/p&gt;
&lt;p&gt;性状的增量（变化）在每一小段时间里都是随机的，方向不固定；但变化会累计，所以时间越长，方差越大。&lt;/p&gt;
&lt;p&gt;你不必把它当作宇宙真理。你只要把它当作一个&amp;quot;最低成本&amp;quot;的默认假设：它不要求你知道选择压力、也不要求你知道适应峰值在哪里；它只是说——不解释的东西，就先当成随机漂移。&lt;/p&gt;
&lt;p&gt;于是你立刻得到一个很实用的结论：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;沿着分支走得越久，性状的不确定性越大&lt;/li&gt;
&lt;li&gt;两个物种如果共享一段历史，它们那段历史里累积的&amp;quot;漂移&amp;quot;是同一份，所以它们会相关&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相关性在这里不是&amp;quot;统计技巧&amp;quot;，是&amp;quot;共享账本&amp;quot;。&lt;/p&gt;
&lt;h3 id="brownian-motion-的严格定义"&gt;Brownian Motion 的严格定义&lt;/h3&gt;
&lt;p&gt;上面的人话版够用了，但如果你想完全理解后面的推导，这里有一份不走捷径的版本。&lt;/p&gt;
&lt;p&gt;一维标准 Brownian Motion $W(t)$ 是一个随机过程，满足：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;初始条件：$W(0) = 0$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;独立增量：对任意 $0 \leq s &lt; t$，增量 $W(t) - W(s)$ 与 $\{W(u): u \leq s\}$ 独立&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;正态增量：$W(t) - W(s) \sim N(0, \sigma^2(t - s))$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;连续路径：$W(t)$ 关于 $t$ 几乎必然连续&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第 3 条是核心：增量服从正态分布，方差随时间线性增长。这直接导致&amp;quot;走得越久，方差越大&amp;quot;这个结论。&lt;/p&gt;</description></item><item><title>亲缘关系到底哪里不讲道理 / Phylogeny</title><link>https://touchingfish.top/2024/phylogenetic-relationships/</link><pubDate>Tue, 15 Oct 2024 00:00:00 +0000</pubDate><guid>https://touchingfish.top/2024/phylogenetic-relationships/</guid><description>&lt;p&gt;第一次认真看系统发育树的时候——一堆分叉的线条，像冬天窗户上的霜花。然后有人指着它说：这代表亲缘关系。接着就很自然地推出一句更狠的话：你的数据不独立。&lt;/p&gt;
&lt;p&gt;（我当时的反应大概是：我怎么就不独立了？我每个物种都只记录了一行数据啊。很独立，很孤独，甚至。）&lt;/p&gt;
&lt;p&gt;但这句话——&amp;ldquo;不独立&amp;rdquo;——其实是整套 phylogenetic comparative methods（系统发育比较方法）的门把手。你要进去，得先承认门在那儿。&lt;/p&gt;
&lt;p&gt;今天我想把这件事说得朴素一点：树不是装饰，它在记账；而相关性这东西，会从历史里长出来。&lt;/p&gt;
&lt;h2 id="树在用什么货币记账"&gt;树在用什么货币记账&lt;/h2&gt;
&lt;p&gt;系统发育树最核心的两件东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;拓扑（topology）：谁和谁更近，分叉顺序是什么&lt;/li&gt;
&lt;li&gt;分支长度（branch length）：每条边&amp;quot;有多长&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;拓扑像族谱：你是我表弟还是堂弟，这种事不关心你长多高。&lt;br&gt;
分支长度像时间或变化量：这才开始关心&amp;quot;隔了多久&amp;quot;&amp;ldquo;变了多少&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;问题是：分支长度到底是什么？&lt;/p&gt;
&lt;p&gt;常见两种含义：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按时间计：单位可能是百万年（Myr）。这类树往往是 ultrametric（所有叶子到根的距离相同），因为&amp;quot;都活到今天&amp;quot;。&lt;/li&gt;
&lt;li&gt;按替换数计：单位更像&amp;quot;每位点多少替换&amp;quot;。这类树不一定 ultrametric。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我更愿意把这件事叫做：树在用两种货币记账。你拿时间树去算替换、拿替换树去当时间，都会&amp;quot;余额不对&amp;quot;。&lt;/p&gt;
&lt;p&gt;后面做 PGLS（Phylogenetic Generalized Least Squares，系统发育广义最小二乘）的时候，这个&amp;quot;货币单位&amp;quot;会悄悄进入协方差矩阵里，影响你认为&amp;quot;相关性该有多强&amp;quot;。所以它不是细节，是地基。&lt;/p&gt;
&lt;h2 id="根外群以及方向感"&gt;根、外群，以及方向感&lt;/h2&gt;
&lt;p&gt;没有根的树（unrooted tree）只告诉你&amp;quot;相对关系&amp;quot;，不告诉你&amp;quot;谁先谁后&amp;quot;。&lt;br&gt;
有根的树（rooted tree）才有方向：从祖先走到后代。&lt;/p&gt;
&lt;p&gt;现实里我们常用外群（outgroup）来定根：找一个确定在研究对象之外的物种（或类群），把根放在它和其他物种之间。&lt;/p&gt;
&lt;p&gt;这里的直觉是：根不是为了更好看，是为了让时间的箭头出现。&lt;br&gt;
而一旦时间出现，很多事情就不再是统计上的巧合，而是历史造成的相似。&lt;/p&gt;
&lt;h2 id="别站队先说实话"&gt;别站队，先说实话&lt;/h2&gt;
&lt;p&gt;这两者的矛盾，很多时候不是理论问题，是现实问题：你手里有什么，就用什么，然后你就会担心自己是不是在骗人。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基因树（gene tree）：用某个基因或某段序列推出来的树&lt;/li&gt;
&lt;li&gt;物种树（species tree）：物种分化历史的更理想描述（通常需要多基因、多信息整合）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们不一致很常见：不完全谱系排序（ILS，Incomplete Lineage Sorting）、基因流、水平转移……这些词你以后会越来越熟，熟到有点麻木。&lt;/p&gt;
&lt;p&gt;我先给一个&amp;quot;写作上的诚实原则&amp;quot;（也算一种自我保护）：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你用什么树都可以，但你必须写清楚你用的是什么树，以及你为什么这么做。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PGLS 对&amp;quot;树代表相关结构&amp;quot;非常认真。你用错树，它不会骂你，它只会很安静地给你一个看起来很像真的 p 值。&lt;/p&gt;
&lt;p&gt;（这就是我最怕的那种错：它不痛，只是悄悄偏离。）&lt;/p&gt;
&lt;h2 id="走过同一条路而已"&gt;走过同一条路而已&lt;/h2&gt;
&lt;p&gt;在普通线性回归（OLS，Ordinary Least Squares，普通最小二乘法）里，你经常默认：每个样本的误差互不相关。&lt;br&gt;
翻译成人话：你这个物种的&amp;quot;偏差&amp;quot;，不应该能预测另一个物种的&amp;quot;偏差&amp;quot;。&lt;/p&gt;
&lt;p&gt;但如果两个物种共享很长一段进化历史，它们的性状（或者更准确地说：性状里那些你没解释掉的部分）就可能一起漂。&lt;/p&gt;
&lt;p&gt;你可以把它想成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;两个人从同一个起点出发走路&lt;/li&gt;
&lt;li&gt;走到某个路口才分开&lt;/li&gt;
&lt;li&gt;分开之前，他们走过的路完全一样&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你说他们最后的位置会不会更像？会的。&lt;br&gt;
不是因为他们商量过，是因为他们共同经历过。&lt;/p&gt;
&lt;p&gt;这就是系统发育相关性最朴素的来源：共享祖先的时间越长，性状越相关（在某些模型假设下，比如 Brownian motion，我们下一篇会讲）。&lt;/p&gt;
&lt;p&gt;所以&amp;quot;非独立&amp;quot;不是一句道德指控，它只是你对世界的一种承认：历史会留下惯性。&lt;/p&gt;
&lt;h2 id="先偷看一眼-pgls-在修什么"&gt;先偷看一眼 PGLS 在修什么&lt;/h2&gt;
&lt;p&gt;先不讲公式，只讲一句话：&lt;/p&gt;</description></item></channel></rss>