<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Notes on TouchingFish.top</title>
    <link>https://touchingfish.top/notes/</link>
    <description>Recent content in Notes on TouchingFish.top</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 04 Nov 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://touchingfish.top/notes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>药物警戒：从《众病之王》谈药物滥用的警示</title>
      <link>https://touchingfish.top/notes/pharmacovigilance/</link>
      <pubDate>Sat, 04 Nov 2023 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/pharmacovigilance/</guid>
      <description>&lt;p&gt;再读《众病之王》一书，颇多感慨。此书述癌症治疗之历程，情节悲壮，既叙科学突破之辉煌，又警示人类对未知领域探险时的误判与代价。其中，对化疗药物VAMP（长春花生物碱、甲氨蝶呤、巯基嘌呤等）滥用所致毒性反应之描述，尤为深刻，让人不禁思考：药物，救命良方抑或伤身利刃，其分界如何厘清？&lt;/p&gt;&#xA;&lt;h2 id=&#34;药物滥用的教训&#34;&gt;药物滥用的教训&lt;/h2&gt;&#xA;&lt;p&gt;《众病之王》记述20世纪50年代，化疗药物被寄予厚望，尤其是VAMP联合用药在某些白血病患者中展现出显著疗效。然而，这些药物靶向细胞增殖，虽抑制了癌细胞，却也不可避免地伤害到正常快速分裂的细胞，如骨髓、肠上皮与毛囊细胞。剂量稍有不慎，即引发严重副作用，譬如重度免疫抑制、出血性肠炎，甚至患者因治疗本身而亡。&lt;/p&gt;&#xA;&lt;p&gt;当时，科学家与医生的意图虽为善，然医学技术与知识尚未成熟，对药物剂量、代谢路径及长期毒性缺乏系统了解。此种滥用药物的后果，令我们不得不正视药物本身的“双刃剑”属性：救人与伤人，仅在一念之间。&lt;/p&gt;&#xA;&lt;h2 id=&#34;药物警戒与现代医疗&#34;&gt;药物警戒与现代医疗&lt;/h2&gt;&#xA;&lt;p&gt;正因有此历史教训，人们越来越关注药物使用的安全问题。&lt;/p&gt;&#xA;&lt;p&gt;药物警戒（pharmacovigilance）起源于1961年的&amp;quot;反应停&amp;quot;事件，随后作为一门学科逐渐兴起，意在对药物使用过程中的风险进行监测、评价与控制。药物警戒的核心任务，可总结为以下几点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;监测不良反应&lt;/strong&gt;：通过收集患者使用药物后的不良反应报告，分析其中规律与风险因素，揭示潜在问题。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;评估风险与收益&lt;/strong&gt;：每一种药物都可能伴随副作用，而药物警戒需衡量这些风险是否被其临床益处所抵消。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;完善用药指导&lt;/strong&gt;：根据药物警戒的发现，修订剂量建议、禁忌症及相互作用提示，为医患提供更安全的用药方案。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;预防滥用与依赖&lt;/strong&gt;：药物的过度使用或错误使用，不仅危害个体健康，亦会导致更广泛的公共健康问题，如抗生素耐药性。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;在现代医疗体系中，药物警戒已非可有可无的附属功能，而是贯穿新药研发、审批及上市后全程的必要环节。特别是随着精准医疗的发展，个体化用药逐渐成为现实，药物警戒也从“平均风险”评估转向“个体风险”分析，更注重遗传差异、共病情况及环境因素对药物反应的影响。&lt;/p&gt;&#xA;&lt;h3 id=&#34;国际药物监测合作计划&#34;&gt;国际药物监测合作计划&lt;/h3&gt;&#xA;&lt;p&gt;1963年世界卫生大会通过决议，旨在加速药品不良应信患的传播，随后WHO于1968年制定了国际药物监测合作计划，逐步在全球范围内推广药物警戒。国际药物监测合作计划自1968年起由世界卫生组织推动，目前已有超过140个国家参与。乌普萨拉监测中心作为该计划的核心机构，负责收集、分析和评估药品不良反应报告，并将其反馈给各国中心。这一网络的形成极大地促进了药品安全领域的国际合作。尽管多数国家已建立药物警戒中心，但各国在药物警戒的实施和成熟度上存在差异。&lt;/p&gt;&#xA;&lt;p&gt;美国的药物警戒体系采用中央系统模式，由FDA的药品审评与研究中心统一管理，这种模式有利于数据的集中管理和处理。该体系具有完善的组织体系、健全的法律法规体系以及信息公开和反馈机制。美国FDA作为全球药品监管的领导者，其药物警戒模式被许多国家效仿。美国食品药品监督管理局内部负责药物警戒工作的组织机构包括监测与流行病学办公室、新药办公室、协调办公室和药品安全监督委员会，它们各自的职责和工作流程确保了药物警戒的有效实施。&lt;/p&gt;&#xA;&lt;p&gt;欧盟通过药物警戒法规（ECNo.726/2004）实施，要求所有新药必须附有详细的药物警戒说明和风险管理系统。EMA有权在药品批准通过后提出额外要求，并要求申办者在必要时提供相关信息。上市后监管中，申办者必须保存并定期提交可疑药品不良反应的报告，以评估药品的风险-效益。此外，欧盟还要求某些产品提交EU-RMP，并在产品上市后的应用发生变化时进行评估。&lt;/p&gt;&#xA;&lt;p&gt;国际药物监测合作计划促进了全球范围內的信息共享，而各国的药物警戒体系根据自身国情采取，不同的管理模式，共同维护公众的用药安全。药物警戒的法律框架和社会学意义也强调了药品安全问题的多维度管理，确保药品在上市前后的安全性得到全面保障。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结语&#34;&gt;结语&lt;/h2&gt;&#xA;&lt;p&gt;回顾历史，药物滥用的悲剧常因对科学与技术的过分乐观而起，而药物警戒正是对人类认知局限性的一种谦卑回应。它提醒我们，在面对药物时，既需怀抱希望，也需保持警惕。正如《众病之王》所言：“药物是进步的象征，但它的滥用却暴露了我们对疾病与治疗的复杂性认识不足。”愿更多人以科学的态度对待药物，善用其益，防其害，使之成为真正的“众病之王”的克星，而非新的隐患之源。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GXP标准：药品研发与商业化的安全准则</title>
      <link>https://touchingfish.top/notes/biopharmaceutical-gxp/</link>
      <pubDate>Wed, 04 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/biopharmaceutical-gxp/</guid>
      <description>&lt;p&gt;良好操作规范（Good x Practice，GXP）是一套在药品研发和商业化过程中应用的规章、指南和行业标准，涵盖以下四大规范：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;药物非临床研究质量管理规范（Good laboratory practice，GLP）&lt;/li&gt;&#xA;&lt;li&gt;药品临床试验质量管理规范（Good clinical practice，GCP）&lt;/li&gt;&#xA;&lt;li&gt;药品生产质量管理规范（Good manufacturing practice，GMP）&lt;/li&gt;&#xA;&lt;li&gt;药物分销质量管理规范（Good distribution practice，GDP）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些规范旨在确保药物的安全性和有效性，尽管这一目标在实践中并不总是得以实现。&lt;/p&gt;&#xA;&lt;p&gt;GXP的发展是对不当科学操作、医疗事故和侵犯人权等事件的反应并受到媒体的关注。为此，人们拟定了一系列道德准则和规章，这些准则和规章随着时间推移不断演变。四大良好操作规范的内容相似，包括独立监督、书面规程、变化控制以及规范的文件管理。&lt;/p&gt;&#xA;&lt;p&gt;在美国，GXP的要求由FDA通过规章和指南进行管理，这些规章和指南通常不规定具体步骤，而是允许公司按照自己的方法达到要求。在某一行业中，这些要求往往有行业标准作为遵守的标准或惯用的操作规程。例如，ICH-GCP主要关注临床试验前的准备、受试者权益保障、试验方案、研究者职责、申办者职责、数据管理与统计分析等方面。其发展趋势是加强监管、提高临床试验质量、保护受试者权益。在药品研发和商业化过程中，GXP的依从性检查至关重要。在美国，FDA会对相关企业的组织结构、人员、设备、实验室设施、实验方法、记录、报告、质量保证和质量控制等方面进行检查。这些检查确保了企业在遵循GXP标准的同时，也确保了药品的安全性和有效性。&lt;/p&gt;&#xA;&lt;p&gt;GXP系统在保障药品安全性和有效性方面发挥了重要作用，尽管在实施过程中面临挑战，但其在各国的应用和监管都在不断改进和发展。通过GXP的实施，药品研发和商业化过程中的风险得以降低，从而更好地保护公众健康。&lt;/p&gt;&#xA;&lt;h2 id=&#34;欧美的glp系统非临床研究的质量控制标准&#34;&gt;欧美的GLP系统：非临床研究的质量控制标准&lt;/h2&gt;&#xA;&lt;p&gt;GLP（良好实验室实践）是一种国际公认的标准，用于确保非临床研究中的数据可性和操作规范性。这一标准的发展始于20世纪70年代，当时美国食品药品监督管理局（FDA）制定了药品GLP规范草案，并于1978年正式实施。这一举措源于对制药公司非临床安全性教据质疑的行业过失，旨在确保研究结朵的可靠性和完整性。1981年，经济合作与发展组织（OECD）颁布了GLP，促进了化学制品非临床安全性数据的相互认可，为全球制药研究提供了统一的标准。美国的GLP法规经历了多次修订，使其在非临床研究的各个环节更具灵活性。1987年的修订使得非临床研究的开展更加科学，并且在2016年8月，FDA发布了GLP修订的征求意见稿，旨在强化质量体系的要求，并扩大GLP的适用范围。&lt;/p&gt;&#xA;&lt;p&gt;欧盟的GLP发展经历了类似的过程，1975年欧共体公布了关于药品药理毒理、临床及临床标准草案法规，并在1988年发布了GLP检查法令。此后，欧盟对GLP法规进行了多次增补和修订，使其适用范围涵盖了化学品、人用药品、曾药产品、化妆品、食品、饲料添加剂、农药、生物杀灭剂和清洁剂等多个领域。&lt;/p&gt;&#xA;&lt;p&gt;在美国，GLP法规要求适用于支持新药、医疗器械和生物制品上市申请的非临床研这些研究需要专题负责人、主要研究者和质量保证部门来确保研究的科学性和合規性。设施与设备的设计和维护要求适以減少实验品和对照品的交叉污染风险。试验方案与记录的管理同样重要，所有研究必须按照经过車批的方案进行，确保原始数据的完整性和可靠性。&lt;/p&gt;&#xA;&lt;p&gt;在欧盟，GLP法规要求所有可能影响实验结果的实验室必须获得官方GLP认可。项且负责人与试验机构管理者负责试验机构的管理和技术问題的专业把握。留样问題也被严格规定，每个批次的试验品都应保留足够的量，以确保重现性和可信性。数据与档案管理采用电子数据采集系统，确保数据的真实性和可追溯性。GLP系统的发展与要求在非临床研究的质量控制、数据可靠性以及确保人体和动物安全方面起到了重要作用。&lt;/p&gt;&#xA;&lt;p&gt;美国和欧盟的GLP法规为制药研究和相关实验室操作提供了国际标准，通过严格的规范确保数据的可靠性和试验的重复性，为药品的安全性和有效性提供了重要保障。&lt;/p&gt;&#xA;&lt;h2 id=&#34;美国gcp的各方之责确保临床试验的透明与公信力&#34;&gt;美国GCP的各方之责：确保临床试验的透明与公信力&lt;/h2&gt;&#xA;&lt;p&gt;GCP指南框架在美国的形成与演变反映了社会对受试者权益保护的逐步重视，尤其在人体生理学试验中。美国GCP的法规内容体现在联邦法规的主题21和主题45中，这些法规不仅适用于FDA监管的产品，还涉及HHS出资的研究。GCP的指南文件由多个重要的指导性文件组成，其中FDA于2013年颁布的《临床试验监督一一基于风险的临床试验监查指南》强调了集中化监查的重要性。而ICHE6则是1996年制定的全面指南，为涉及受试者的试验提供统标准。ICHE6的修订鼓励采用更先进的方法来保证受试者的权益和临床试验数据的质量。&lt;/p&gt;&#xA;&lt;p&gt;伦理委员会的职责在GCP中占据重要地位。它们负责独立监督临床试验以确保受试者的权益、安全和健康。伦理委员会分为局部伦理委员会和中心伦理委员会，后者通常是非营利性机构，负责保障病人的安全。伦理委员会的职责包括审核和批准试验方案、知情同意书等，并且必须按照书面程序确保其职责的有效执行。&lt;/p&gt;&#xA;&lt;p&gt;研究者的职责同样关键。研究者必须按照试验方案开展研究，亲自监督研究的进行，并在必要时获得受试者的知情同意。研究者还需报告所有副作用，并确保研究记录的质量。研究者的监管责任还包括确保IRB的审查和监督，以及遵守国家、地方的其他法规或书面规程。&lt;/p&gt;&#xA;&lt;p&gt;申办者的职责在于确保临床试验的开展和数据生成、录入和报告的合规性。申办者必须实施质量管理系统和SOP以保证试验的合规性，并对研究者进行资格认定和培训。申办者还需进行安全性监督和临床数据管理，并确保研究的透明度和公信力例如通过临床试验注册与结果公开制度。&lt;/p&gt;&#xA;&lt;p&gt;GCP指南框架通过法规、指南文件和各方职责，确保临床试验的合法性、合规性，并最大限度地保护受试者的权益和试验数据的质量。这一框架对全球临床医学研究产生了深远的影响，推动了临床试验的规范化和标准化。&lt;/p&gt;&#xA;&lt;h2 id=&#34;国际gmp体系规范药品生产确保质量安全&#34;&gt;国际GMP体系：规范药品生产，确保质量安全&lt;/h2&gt;&#xA;&lt;p&gt;药品生产质量管理规范（GMP）在全球范围内对药品生产过程进行规范，确保药品的质量和安全。美国的药品GMP（cGMP）是世界第一部GMP，其基础法规是《联邦食品、药品与化妆品法》，由FDA负责检查。cGMP的发展可以追溯到1938年的磺胺酏剂事件后的立法，这一事件催生了《联邦食品、药品与化妆品法》的出台，随后的《Kefauver-Harris修正案》和《医疗设备修正案》，进一步推动了公众对GMP的认知。21世纪的cGMP强调于风险考虑的管理方法，引入了&amp;quot;质量源于设计&amp;quot;的理念，并通过ICH发布的&amp;quot;Q8药物开发&amp;quot;、&amp;ldquo;Q9质暈风险管理&amp;quot;和&amp;quot;Q10制药质量体系&amp;quot;等指南，强调质量系统的重要性和风险管理。&lt;/p&gt;&#xA;&lt;p&gt;欧盟的GMP体现了集中与分权的特征。欧盟委员会确定GMP的令和方针，现场检查工作则由各国的药品管理部门执行。欧洲药品评价局（EMA）负责协调欧盟的药品评估工作，并参与GMP的起草及修订，以确保欧盟GMP的一致性和协调性。瑞典药品管理局作为欧盟国家的一个例子，实行专职化制度，确保检查的严格性和专业性。&lt;/p&gt;&#xA;&lt;p&gt;世界卫生组织的CMP作力国际药品贸易的技术框架文件，由基本要求、特殊药品的GMP、GMP检查和补充指南等四大部分组成。其目的是促进各成员国药品注册监管系统的建立，并作为各国制定GMP的考。尽管WHO-GMP不具有法定地位但其科学性和可操作性得到了许多国家的认可。ICH制定的Q7A为国际公认的原料药GMP标准，强调了质量管理、人员管理、厂房与设施等方面的要求，对药品注册的技术要求和格式进行统一。药品检查协定组织（PIC/S）成立于1970年，旨在促进药品GMP检查当局的联系，以及保持相互间的信任，其指南文件被多个国家和国际组织采纳。&lt;/p&gt;&#xA;&lt;p&gt;国际药品GMP体系的发展反映了全球对药品质量管理的重视和创新。通过不断更新的法规和指南，确保了药品从研发到上市后的整个生命周期的质量得到保障。这不仅提升了药品的安全性，也推动了药品生产领域的持续进步。&lt;/p&gt;</description>
    </item>
    <item>
      <title>医疗器械与特殊食品的监管</title>
      <link>https://touchingfish.top/notes/health-industry-regulatory/</link>
      <pubDate>Wed, 13 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/health-industry-regulatory/</guid>
      <description>&lt;h2 id=&#34;医疗器械的监管&#34;&gt;医疗器械的监管&lt;/h2&gt;&#xA;&lt;p&gt;为了确保医疗器械从研发、生产到市场后的全程监管，需要建立详细的法律法规和细致的管理程序，以及全面的医疗器械监管体系。美国食品药品监督管理局（Food and Drug Administration，FDA）在这一过程中起到了关键作用。通过设立多个中心和办公室，确保国产和进口医疗器械的安全、有效和标签的真实性。&lt;/p&gt;&#xA;&lt;p&gt;医疗器械和放射健康中心（Center for Devices and Radiological Health，CDRH）和监管事务办公室（Office of Regulatory Affairs，ORA）是负责医疗器械监管的两个核心部门，CDRH负责制定和执行相关标准和规范，ORA负责现场检査。《联邦食品、药品与化妆品法》及其修正案为医疗器械的监管提供了法律依据，明确了监管机构的职责，并对医疗器械的分类、临床试验和上市后的监管提出了具体要求。&lt;/p&gt;&#xA;&lt;p&gt;美国还是最早对医疗器械实行分类管理并制定详细分类原则的国家，根据产品的潜在风险，医疗器械被分为三个类别，每种类别对应不同的监管要求。临床试验的医疗器械豁免（Investigational device exemption，IDE）制度促进了新医疗器械的发明和开发，制造商在临床研究启动前获得FDA的批准，并对研究过程进行监控。临床试验分为三个层次，根据风险程度进行不同的管理。&lt;/p&gt;&#xA;&lt;p&gt;生产管理方面，美国实施了医疗器械质量体系规范（Quality System Regulation，QSR），也就是医疗器械的GMP，要求厂商建立完整的质量管理体系。此外，还对医疗器械制造厂商和最初进口商进行机构注册，确保所有医疗器析符台FDA的规定。&lt;/p&gt;&#xA;&lt;p&gt;上市管理提供了三种途径： 豁免、上市前通告510（k）和上市前许可（Premarket Approval，PMA），每种途径对应不同类别的医疗器械，确保只有经过严格审查的产品才能进入市场。&lt;/p&gt;&#xA;&lt;p&gt;上市后管理实行强制性的不良事件监测和召回制度，通过医疗器械唯一标识（Unique Device Identification，UDI）系统进行产品追踪，有效实施召回措施。&lt;/p&gt;&#xA;&lt;h2 id=&#34;特殊食品的监管&#34;&gt;特殊食品的监管&lt;/h2&gt;&#xA;&lt;p&gt;医疗与健康行业内，接受DFA监管的，除了药物和医疗器械之外，最常见的就是保健食品和膳食补充剂，属于特殊食品。&lt;/p&gt;&#xA;&lt;p&gt;保健食品和膳食补充剂虽然在功能上有重叠，但还是存在一些区别。前者除了提供营养外，还具有特定的保健功能，如调节免疫力、改善睡眠等，有待验证和审批。保健食品在国内有明确的注册和备案条件，监管的重点包括原料、功能、标识、生产经营（符合GMP要求）和广告宣传等，由国家市场监督管理总局负责。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;2018年3月，组建国家市场监督管理总局，下设国家药品监督管理局，不再保留国家食品药品监督管理总局。&#xA;原国家食品药品监督管理总局发布的《保健食品注册与备案管理办法》（2016年2月26日国家食药监管总局令第22号），现由国家市场监督管理总局负责修订（2020年10月23日国家市场监督管理总局令第31号）&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;膳食补充剂则在美国有严格的监管框架，由膳食补充剂健康与教育法案（Dietary Supplement Health and Education Act，DSHEA）和现行药品生产质量管理规范（cGMP）构成。&lt;/p&gt;&#xA;&lt;p&gt;DSHEA法案于1994年通过，为膳食补充剂提供了一个在法律上介于食品和药品之间的特殊地位。该法案认识到膳食补充剂在市场上的巨大潜力及其与健康的潜在联系，因此为其提供了合法地位。根据DSHEA，膳食补充剂被定义为旨在补充饮食中营养素的产品，如维生素、矿物质、草药等，并且以丸剂、胶囊等形式销售。这些产品形式多样，可以单独使用，也可以作为饮食的一部分，但不能代替普通食品或作为饮食的唯一品种。&lt;/p&gt;&#xA;&lt;p&gt;在管理方面，膳食补充剂的标识必须含有足够的产品成分信息，且真实可靠，不存在误导。任何包含新成分的膳食补充剂。必须在上市前75天通知FDA。FDA负责确保膳食补充剂的安全性，而联邦贸易委员会（Federal Trade Commission，FTC）则监管膳食补充剂的广告，以确保內容的真实性和公正性。&lt;/p&gt;&#xA;&lt;p&gt;此外，膳食补充剂的生产过程受到cGMP的规范，这些规范旨在确保膳食补充剂的生产、包装和储存过程符合安全标准。膳食补充剂在美国被视为食品，因此不需要通过上市前的严格审批。然而，生产商必须确保产品的成分安全且标识准确，所有的成分含量与标签所注一致。对于新成分，生产商必须提供足够的安全证据，并在上市前向FDA通报。FDA在膳食补充剂上市销售前不对其进行检验，但生产商应确保产品的安全性和标识的真实性。&lt;/p&gt;&#xA;&lt;p&gt;美国的膳食补充剂监管框架通过DSHEA法案和cGMP为膳食补充剂提供了明确的定义、标识要求和上市程序，同时确保产品的安全和质量，为消费者提供了可靠的信息来源。这一监管体系既鼓励了膳食补充剂行业的发展，也保护了消费者的权益。&lt;/p&gt;</description>
    </item>
    <item>
      <title>药品监管机构的 AI 日志</title>
      <link>https://touchingfish.top/notes/drug-regulatory-admin/</link>
      <pubDate>Mon, 11 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/drug-regulatory-admin/</guid>
      <description>&lt;p&gt;全球药品监管体系在不同的国家和地区表现出各自的特色和优势。发达国家通过多层次的组织结构和职能划构建起了一个全面、高效的药品监管体系。这些机构在确保药品安全、有效运作的同时，也促进了药品研发和创新，为理解和全球药品监管体系提供了重要参考。&lt;/p&gt;&#xA;&lt;h2 id=&#34;美国食品药品监督管理局&#34;&gt;美国食品药品监督管理局&lt;/h2&gt;&#xA;&lt;p&gt;美国食品药品监督管理局（Food and Drug Administration，FDA），可以说是美国药品监管的超级大佬，不仅管药，还要操心食品、生物制品、化妆品、兽药、医疗器械和诊断用品。这个庞然大物坐拥超过17000名员工，总部设在华盛顿特区和马里兰州的罗克维尔城。总部和分区各有分工：总部掌握最终决策权，负责审批药品；而那些分布在全国的区所和工作站，则负责检查和确认数据的真实性以及是否符合GMP和GLP的要求——是的，他们是FDA的“眼线”和“实干派”。&lt;/p&gt;&#xA;&lt;p&gt;FDA的组织架构也不含糊，分为七大中心和两大办公室，各自管着一摊事儿。比如药物评价和研究中心（Center for Drug Evaluation and Research，CDER），这是那个让你新药梦成真或破碎的地方。他们审核你的上市申请，研究你的标签和说明书，还会帮你定生产标准。另一方面，医疗器械和放射健康中心（Center for Devices and Radiological Health，CDRH）是医疗器械的守护神，确保医生和患者手里的器械不仅有用，而且安全。他们还通过推进所谓的“监管科学”来让整个行业的规矩更统一、更透明——当然，这对从业者来说有时候是福音，有时候是噩梦。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;cdrh-某个无趣得让人打哈欠的星期三&#34;&gt;CDRH 某个无趣得让人打哈欠的星期三&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;7:45 AM&lt;/strong&gt;&#xA;到办公室的时间早得我想直接冲咖啡机哭诉。CDRH的任务很重要，确实如此，但重要的任务也可以是无聊的。今天的工作是检查一堆510(k)提交资料，这意味着我要阅读100多页长得像本科实验报告的文档，确保医疗器械的申报材料齐全，还要判断它们是否符合一堆晦涩的法规。问题在于，有些申请就像是在玩“医疗器械名词拼接游戏”。“高科技镀钛支架结合抗菌纳米涂层的创新技术”听起来很炫酷，结果文件里真正的“创新”居然是：把支架的尺寸改小了0.2毫米。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;10:15 AM&lt;/strong&gt;&#xA;我花了20分钟试图搞清楚一个文件夹里该死的命名规则。为什么有人会认为“FINAL_FINAL_V3”是个好文件名？更糟糕的是，这居然是一个已经“审查过”的版本！在邮箱里翻到提交人的邮件，看到一长串的“感谢您的专业审查”，真想回复：“谢谢，但我需要的是明确的命名规则，不是外交辞令。”&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;12:00 PM&lt;/strong&gt;&#xA;午饭时间终于到了。和同事一起吐槽了半小时某位提交人将风险管理表格和随机的市场调研数据搞混的荒谬行为。他们真的以为“我们有很好的客户反馈”能代替生物相容性测试结果吗？为了缓解愤怒，我点了个巨无霸套餐。如果不能让提交人负责，这么多碳水也算让我的胃负责一点。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2:30 PM&lt;/strong&gt;&#xA;下午的任务是核查几个Q-sub会议纪要。老实说，Q-sub会议的纪要读起来比说明书还让人昏昏欲睡。今天的亮点是一个会议记录里把“real-world evidence”拼成了“real-word evidence”。希望设备的制造商没想用这个设备测字典里的词汇频率。最令人费解的是，每个纪要都要求我们添加“无保留意见”的声明。好吧，我确实没什么意见，因为我现在只想睡觉。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;4:45 PM&lt;/strong&gt;&#xA;一天快结束了，我终于把最后一个审查意见发了出去。关闭电脑的那一刻，我突然意识到自己忘了填写今天的工作日志。&lt;/p&gt;&#xA;&lt;p&gt;工作日志：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;阅读了20份文件，每份文件都让我怀疑人生。&lt;/li&gt;&#xA;&lt;li&gt;和同事对垃圾命名规则展开了一场深入讨论，最终得出结论：宇宙的混乱可能始于第一个人写下“FINAL_DRAFT”。&lt;/li&gt;&#xA;&lt;li&gt;吃了一个巨无霸，碳水带来的快乐比医疗器械创新更可靠。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;5:30 PM&lt;/strong&gt;&#xA;在回家的路上，我思考了一会儿这份工作的意义。监管确实重要，但有时候我怀疑，我们的每一天是否也被一层“合规”的枷锁束缚着。&lt;/p&gt;&#xA;&lt;p&gt;不过，至少明天还有巨无霸。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;总之，FDA就是这样一个权力无边的“保姆”，他们的存在是为了让你不会因为某个新药的奇怪副作用或者医疗器械的离奇故障而出现在报纸头条上（除非你真的出了事，那就尴尬了）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;日本厚生劳动省医药品医疗器械综合机构&#34;&gt;日本厚生劳动省医药品医疗器械综合机构&lt;/h2&gt;&#xA;&lt;p&gt;日本的药品监管机构，厚生劳动省（Ministry of Health, Labour and Welfare，MHLW），是一座精密运转的庞大机器。它的核心架构包括11个局、8个附属机构和13个检疫所。就像一座繁忙的城堡，各个部分分工明确又相互依存。其中，医药生活卫生局是这台机器中处理药品事务的心脏。他们负责临床研究的推进、注册审查的进行，以及上市药品安全性的掌控，仿佛一位细致入微的园丁，修剪每一片药品领域的枝叶。&lt;/p&gt;&#xA;&lt;p&gt;医药品医疗器械综合机构（Pharmaceuticals and Medical Devices Agency，PMDA）专注于药品的审评工作。它整合了国立医药品食品卫生研究所的审评中心，以及医药品副作用被害救济研究振兴调查机构等资源，构建出了一套几近完整的监管体系，犹如一座坚不可摧的堡垒，为药品的安全、疗效和质量提供全方位的守护。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;pmda-某个连蝉鸣都懒得热烈的夏日&#34;&gt;PMDA 某个连蝉鸣都懒得热烈的夏日&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;7:30 AM&lt;/strong&gt;&#xA;走进办公室，还是那股冷气机与打印机墨粉混杂的味道。窗外的阳光被百叶窗切割成细长的光柱，像某种无形的监视器，提醒我们这些职员每天都必须无声无息地完成堆积如山的审查任务。今天的目标是审查一个新的医疗器械申请，文件夹厚得像某位作家的长篇小说，却没有一点文学性的可取之处。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;9:45 AM&lt;/strong&gt;&#xA;我开始翻阅第一部分——适用性分析。厚厚的技术说明文件在灯光下闪烁着某种机械的冰冷，每个字都没有温度。“以患者为中心”“提升医疗质量”，这些词句出现在申请表的扉页上，像是某种仪式性的咒语。我凝视这些词汇，觉得它们比办公室的冷气还要抽象。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;11:15 AM&lt;/strong&gt;&#xA;翻到风险管理部分，发现申请方提交的风险表格充满漏洞，仿佛是在一张旧毛毯上数洞。谁会认为“可能导致患者不适”的风险可以用“适当培训医护人员”来完全规避？我仔细填写审查意见，尽量用平和但坚定的语气提醒提交人：医疗器械并非文字游戏，而是一场真正影响生死的实验。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;12:00 PM&lt;/strong&gt;&#xA;午休时间，我带着便当坐到窗口旁，眺望楼下庭院中孤零零的一棵松树。松针在风中摇曳得微不可察，像在嘲笑我们这些庸庸碌碌的人类。突然想起昨晚看的书里一句话：“人生不过是无数次机械重复的微小动作，像水滴冲刷岩石，留下的痕迹不值一提。”我在纸巾上随手写下这句话，然后又揉成一团丢进了垃圾桶。&lt;/p&gt;</description>
    </item>
    <item>
      <title>药事法规与框架</title>
      <link>https://touchingfish.top/notes/drug-regulation/</link>
      <pubDate>Sun, 03 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/drug-regulation/</guid>
      <description>&lt;p&gt;药事法规是调整药品研制、生产、流通、使用和监管等环节的法律规范，其目的在于确保药品的安全、有效和经济合理。药事法规通过法律手段管理药品供应，确保药品的安全有效，维护公众健康。在药品研发阶段，药事法规指导新药的申报和审批；在生产和流通阶段，制定标准化的生产流程和规定；在药品使用阶段，提供用药指导和建议。&lt;/p&gt;&#xA;&lt;h2 id=&#34;药品管理的法律框架&#34;&gt;药品管理的法律框架&lt;/h2&gt;&#xA;&lt;p&gt;药事法规的基本框架涉及法律效力层级和文件体系。各国药事法规所呈现的文件体系各不相同，但主要內容分为具有法律效力的成文法、判例及司法解释等。美国、欧盟、英国和加拿大等国家的药事法规体系各具特点。美国联邦制定法按单行法会期法、法典和法典注释四种方式颁布，而欧盟药事法规分为基本法和二级法，包括条例、指令、决议和建议。加拿大的药事法规体系包括法、规章和指南文件，其中法由议会制订，规章由法指定的部门发布，指南文件则是具体管理部门对某一具体事件的指导性意见。&lt;/p&gt;&#xA;&lt;p&gt;药事法规制定的原则强调药品上市前必须通过安全性临床试验和有效性评估，以确保药品的安全性和有效性。各国通过立法手段，如价格控制、仿制药政策等手段，确保药品使用的经济性和可及性。鼓励制药工业的发展和传统药物的支持也是药事法规的重要原则。通过立法支持新药研发，鼓励制药企业创新，促进制药行业的发展。同时，重视植物药和传统药物的发展，承认其医学价值，支持传统药物的应用和发展。&lt;/p&gt;&#xA;&lt;p&gt;药事法规的基本框架与原则体现了药品管理的全面性和系统性，通过明确的法律规定和原则，保障药品的安全、有效和合理使用，同时促进制药工业和传统药物的发展，为全球的药品供应和安全提供了法律保障。&lt;/p&gt;&#xA;&lt;h2 id=&#34;法律法规在药品生命周期的作用&#34;&gt;法律法规在药品生命周期的作用&lt;/h2&gt;&#xA;&lt;p&gt;药品的生命周期包括研发、生产、流通、使用与监督等环节。&lt;/p&gt;&#xA;&lt;p&gt;在研发环节，各国普遍采用GLP和GCP进行药物研发的质量管理。GLP规范了非临床研究，确保研究数据的质量，已成为药品上市的重要依据。GCP则确保临床试验的合理性和数据可靠性。ICH-GCP的建立促进了多国临床数据互认可，提高了新药研发数据的国际认可度。此外，各国还建立了知识产权保护体系，以保护创新药企的市场地位和低进仿制药的研发与上市。对于罕见病和儿科药物的研发，美国、欧盟和日本等国家推出了鼓励政策，如美国的孤儿药法案和欧盟的孤儿药委员会，通过提供资金支持和简化上市流程，激励相关药物的研发。&lt;/p&gt;&#xA;&lt;p&gt;在生产环节，美国、欧盟和日本等国家制定了GMP规范，确保药品生产过程中的质量。GMP为药品生产提供了统一的标准和指导原则。ICH会议制度的建立促进了药品生产质量管理规范的国际协调，使得新药研发數据在全球范围内得到认可。这一协调不仅提升了药品质量，也降低了药企的研发成本和市场壁垒。&lt;/p&gt;&#xA;&lt;p&gt;在流通环节，各国通过法律法规对药品分销商的行为进行规范，如英国的GDP，确保药品在流通过程中的质量。广告管理方面，美国、英国和法国等国家对药品广告进行监管，确保广告内容的真实性和全面性。价格管理上，各国采取不同的模式，如美国的市场定价和英国的利润控制，以平衡药品市场的竞争与价格控制。&lt;/p&gt;&#xA;&lt;p&gt;在使用与监督环节，欧美国家通过药师制度和药房法规范医生合理用药，提高用药安全。药品分类管理方面，各国对药品进行分类，分为处方药和非处方药，以确保药品的使用安全和方便。药物警戒体系方面，各国建立了药物警戒体系，通过收集和分析药品不良反应数据。保障公众用药安全。药品召回制度对存在餘陷的药品进行及时召回，保障患者健康。药品不良反应救济制度为药品不良反应受害者提供救济，减轻受害者的经济负担。&lt;/p&gt;&#xA;&lt;p&gt;药品从研发到使用的完整法律保障体系通过各国立法确保药品的质量、安全和有效性。这些法规不仅保障了公众的健康权益，还促进了药品产业的健康发展，为国际药品市场的协调与合作奠定了基础。&lt;/p&gt;&#xA;&lt;h2 id=&#34;全球发展与协调趋势&#34;&gt;全球发展与协调趋势&lt;/h2&gt;&#xA;&lt;p&gt;药事法规的制定和完善是一个不断摸索的过程。药害事件频发促使立法和执法部门不断反思，最终形成了相对完善的体系。这个体系有效地保障了药品供应的安全，确保了药品的质量、安全和经济供应。&lt;/p&gt;&#xA;&lt;p&gt;各国的药事法规体系各具特色，西方发达国家的药品管理系统背后是一套完善的药事法规体系。这些法规体系基于本国的经济发展水平，提出了一系列切实可行的法规和政策措施，旨在促进国内制药工业和传统药物的发展，保证药品安全有效，并经济合理地供应，维护人民的生命健康。随着各国法治化程度的加深，法律已成为国家管理经济的重要手段。&lt;/p&gt;&#xA;&lt;p&gt;药事法规的相当一部分内容是对药品研发、生产、流通、使用等环节的技术规范的法律化。这些法规不仅确保了药品的安全性和有效性，还促进了制药行业的创新和发展。&lt;/p&gt;&#xA;&lt;p&gt;为了实现这一目标，各国药事法规都带有本国特色，适应本国的经济发展水平，确保法规的有效实施。经济全球化加速了药品管理国际协调的趋勢。欧盟率先尝试进行各国的药品管理协调工作，显示了药品管理国际协调已成为不可阻挡的趋势。ICH会议制度的诞生是这一趋势的体现，其目的是减少重复试验，节约资源，并保证新药的质量、安全性和有效性。通过ICH会议，各国药品注册时的科学和技术要求得以协调，从而提高了药品监管的国际效率和标准。&lt;/p&gt;&#xA;&lt;p&gt;药事法规的发展是一个动态变化的过程，通过不断反思药害事件和法律创新，形成了完善的体系。各国药事法规体系基于本国实际，具有独特性，而国际协调则是药事法规的发展趋势，以满足全球化市场的要求和公共健康需求。了解这些发展特点对于促进药品产业的进步和保障人民健康具有重要意义。&lt;/p&gt;</description>
    </item>
    <item>
      <title>当混淆因素隐匿于幕后：因果关系的困与解</title>
      <link>https://touchingfish.top/notes/unobserved-confounding/</link>
      <pubDate>Mon, 27 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/unobserved-confounding/</guid>
      <description>&lt;h2 id=&#34;基本问题&#34;&gt;基本问题&lt;/h2&gt;&#xA;&lt;p&gt;所谓混淆因素，指的是与处理（treatment）及结果（outcome）皆有联系之变量。若不予控制，易致偏差，令我们所得结论非因果关系之实，乃混淆所致之假象。然而，倘若混淆因素不可观测（unobserved confounding），我们又该如何在未知中求解因果？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;UnobservedConfound.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;界限估计&#34;&gt;界限估计&lt;/h2&gt;&#xA;&lt;p&gt;当我们不能妄断“unconfoundedness”的条件成立，则需要借助弱假设，推导出因果效应的区间（interval）估计。这类方法一般依赖部分识别（partial identification）之思想，亦即在无法完全排除混淆时，通过宽泛但合理的假设，限定因果效应的可能范围。&lt;/p&gt;&#xA;&lt;p&gt;如 Bounding methods 并不假设完全无混淆（unconfoundedness），而是假设混淆的影响在某特定范围内。借此，我们可以得出一个因果效应的上下界，而非唯一值之估计。这种思路可以在不严苛的假设之下，仍提供有意义的推断。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“The Law of Decreasing Credibility: the credibility of inference decreases with the strength of the assumptions maintained.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;no-assumptions-bound&#34;&gt;No-Assumptions Bound&lt;/h3&gt;&#xA;&lt;p&gt;对二元（binary）之个体处理效应（ITE）而言，其最大值和最小值为&lt;/p&gt;&#xA;$$&#xA;-1 \leq Y_i(1)-Y_i(0) \leq 1 \qquad \text{if } \forall t,0 \leq Y(t) \leq 1&#xA;$$&lt;p&gt;故平均处理效应（ATE）之区间长度也都在 $2$ 之内。&lt;/p&gt;&#xA;&lt;p&gt;在无需任何假设的条件下，较之 ITE，ATE 的区间长度可减半，即 ATE 将落于长度为 $1$ 的区间内。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;ASSUMPTION&lt;/strong&gt; Bounder Potential Outcomes&lt;/p&gt;&#xA;$$&#xA;\forall t,a \leq Y(t) \leq b&#xA;$$&lt;p&gt;根据该假设，易得&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;a-b \leq Y_i(1)-Y_i(0) \leq b-a&#xA;\\\&#xA;a-b \leq \Bbb{E}[Y_i(1)-Y_i(0)] \leq b-a&#xA;\end{aligned}&#xA;$$&lt;p&gt;ITE 的区间长度为 $(b-a)-(a-b)=2(b-a)$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>敏感性分析：衡量因果推论之稳定性</title>
      <link>https://touchingfish.top/notes/sensitivity-analysis/</link>
      <pubDate>Wed, 27 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/sensitivity-analysis/</guid>
      <description>&lt;p&gt;敏感性分析（sensitivity analysis）乃衡量因果推论之稳定性所用。当研究中存有不可观测混淆因素时，结论或受此影响而失真，敏感性分析可助吾等评估此种未知因素对估计因果效应之干扰程度。今撰此小文，略述其要义。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本原理&#34;&gt;基本原理&lt;/h2&gt;&#xA;&lt;p&gt;敏感性分析旨在通过设定不同假想情境，量化未观测混淆之潜在影响。其核心在于引入两个参数：一为混淆因素对处理（treatment）的影响，二为混淆因素对结果（outcome）的影响。通过调整此等参数之值，吾辈可模拟不同程度之混淆，并观察因果效应估计之变化。&lt;/p&gt;&#xA;&lt;p&gt;若吾等发现某结论在较大范围之参数变动中仍保持稳健，则可对所得推断更有信心；反之，若结论在微小假设变化下便剧烈波动，则应审慎看待，或重新考虑所用之假设。&lt;/p&gt;&#xA;&lt;p&gt;举例而言，在一个线性模型中，考虑可观测的共因 $W$，和不可观测的共因 $U$：&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;T &amp;:= \alpha_w W + \alpha_u U\\\&#xA;Y &amp;:= \beta_w W + \beta_u U + \delta T&#xA;\end{aligned}&#xA;$$&lt;p&gt;其中，$\alpha_u$ 乃是混淆因素 $U$ 对处理 $T$ 的影响， $\beta_u$  则为混淆因素 $U$ 对结果 $Y$ 的影响，$T$ 对 $Y$ 之因果效应表示为 $\delta$。&lt;/p&gt;&#xA;&lt;p&gt;由调整公式得&lt;/p&gt;&#xA;$$&#xA;\Bbb{E}[Y(1)-Y(0)]=\Bbb{E}_{W,U}\big[\Bbb{E}[Y|T=1,W,U]-\Bbb{E}[Y|T=0,W,U]\big]=\delta&#xA;$$&lt;p&gt;因 $U$ 不可观测，故我们只能对 $W$ 进行调整，混淆因素所致之偏差为 $\frac{\beta_u}{\alpha_u}$。&lt;/p&gt;&#xA;$$&#xA;\Bbb{E}_{W}\big[\Bbb{E}[Y|T=1,W]-\Bbb{E}[Y|T=0,W]\big]-\Bbb{E}_{W,U}\big[\Bbb{E}[Y|T=1,W,U]-\Bbb{E}[Y|T=0,W,U]\big]=\frac{\beta_u}{\alpha_u}&#xA;$$&lt;h2 id=&#34;证明&#34;&gt;证明&lt;/h2&gt;&#xA;&lt;p&gt;据 $Y$ 与 $T$ 之结构方程，可推出 $\implies U=\frac{T-\alpha_w W}{\alpha_u}$，故有&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;\Bbb{E}_W\big[\Bbb{E}[Y|T=t,W]\big]&#xA;&amp;=\Bbb{E}_W\big[\Bbb{E}[\beta_w W + \beta_u U + \delta T|T=t,W]\big]&#xA;\\\&#xA;&amp;=\Bbb{E}_W\left[\beta_w W + \beta_u \Bbb{E}[U|T=t,W] + \delta t\right]&#xA;\\\&#xA;&amp;=\Bbb{E}_W\left[\beta_w W + \beta_u \left(\frac{t-\alpha_w W}{\alpha_u}\right) + \delta t\right]&#xA;\\\&#xA;&amp;=\Bbb{E}_W\left[\beta_w W + \frac{\beta_u}{\alpha_u}t - \frac{\beta_u\alpha_w}{\alpha_u}W + \delta t\right]&#xA;\\\&#xA;&amp;=\beta_w\Bbb{E}[W]+\frac{\beta_u}{\alpha_u}t - \frac{\beta_u\alpha_w}{\alpha_u}\Bbb{E}[W] + \delta t&#xA;\\\&#xA;&amp;=\left(\beta_w - \frac{\beta_u\alpha_w}{\alpha_u}\right)\Bbb{E}[W]+\left(\delta+\frac{\beta_u}{\alpha_u}\right) t&#xA;\end{aligned}&#xA;$$&lt;p&gt;若我们对 $W$ 进行调整时，根据上式来估计 ATE&lt;/p&gt;</description>
    </item>
    <item>
      <title>孟德尔随机化的原理</title>
      <link>https://touchingfish.top/notes/mendelian-randomization/</link>
      <pubDate>Sun, 24 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/mendelian-randomization/</guid>
      <description>&lt;p&gt;在因果推论之研究中，科学家们常面临一关键挑战：如何确定某一因素（如特定药物或生活习惯）是否真正引发了所观察之结果（如疾病发生或健康改善）。传统观察性研究虽能揭示两变量间之关联，但难以区分因果关系与混淆因素之影响，故难以得出明确之因果结论。&lt;/p&gt;&#xA;&lt;p&gt;孟德尔随机化（Mendelian randomization, MR）乃一新兴之流行病学研究方法，利用遗传信息以推断暴露因素与疾病结局间之因果关系。&lt;/p&gt;&#xA;&lt;h2 id=&#34;工具变量因果推论之利器&#34;&gt;工具变量：因果推论之利器&lt;/h2&gt;&#xA;&lt;p&gt;工具变量（instrumental variables,&#xA;IV）是计量经济学的三板斧之一，用于解决普通最小二乘法（OLS）中的内生性问题。简言之，自变量与误差项间存在相关性，致使无法准确估计因果效应。&lt;/p&gt;&#xA;&lt;p&gt;若想研究吸烟（$T$）是否会导致肺癌（$Y$），一个直接的方法是比较吸烟者和不吸烟者的肺癌发生率。但此法的问题在于，吸烟者和不吸烟者在很多方面都存在差异，比如社会地位、教育水平和健康状况等。致使混淆吸烟与肺癌间之因果关系。工具变量为解决混淆因素不可观测时之良策。&lt;/p&gt;&#xA;&lt;p&gt;一个好的工具变量应该满足以下条件：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;相关性（Relevance）&lt;/strong&gt;：工具变量（$Z$）必须与自变量（$T$）显著相关。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;无混淆因素（Instrumental Unconfoundedness）&lt;/strong&gt;：工具变量（$Z$）不得与任何已知或未知的混淆因素，即误差项 ($\epsilon$) 有关。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;排除限制（Exclusion Restriction）&lt;/strong&gt;：工具变量（$Z$）只能通过自变量（$T$）简介影响因变量（$Y$），不得直接影响（$Y$）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;我们可以使用一个工具变量，如吸烟税收（$Z$），来帮助我们识别吸烟对肺癌的因果效应。&lt;/p&gt;&#xA;&lt;p&gt;吸烟税收满足工具变量的三个条件：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;与吸烟行为有关（相关性）。&lt;/li&gt;&#xA;&lt;li&gt;与其他健康因素无关（无混淆因素）。&lt;/li&gt;&#xA;&lt;li&gt;通过改变吸烟行为影响肺癌，而不是直接影响肺癌（排除限制）。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;工具变量的估计方法&#34;&gt;工具变量的估计方法&lt;/h3&gt;&#xA;&lt;p&gt;工具变量之基本思路，凭借**二阶最小平方估计（Two-Stage Least Squares Estimator, 2SLS）**实现：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;2SLS.svg&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;第一阶&lt;/strong&gt;：用工具变量（$Z$）对自变量（$T$）进行回归，得到预测值（$\hat{T}$）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;第二阶&lt;/strong&gt;：用预测值（$\hat{T}$）对因变量（$Y$）进行回归，得到因果效应之估计值。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;数学上，可以表示为：&lt;/p&gt;&#xA;$$T=\pi_0+\pi_1 Z + u \tag{1}$$$$Y=\beta_0+\beta_1\hat{T}+v \tag{2}$$&lt;p&gt;通过这种方法，可以有效地控制内生性问题，得到更可靠的因果推论。&lt;/p&gt;&#xA;&lt;h2 id=&#34;孟德尔随机化工具变量的遗传学应用&#34;&gt;孟德尔随机化：工具变量的遗传学应用&lt;/h2&gt;&#xA;&lt;p&gt;孟德尔随机化以遗传变异为工具变量，以期绕过传统观察性研究中混淆因素之干扰，从而更为精确地估计因果效应。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;选择与暴露因素有关之遗传变异（如“基因变异”或“单核苷酸多态性（SNP）”），满足工具变量条件之一。&lt;/li&gt;&#xA;&lt;li&gt;基因型在受精时随机分配，使得遗传变异与大多数环境因素无关，从而满足工具变量条件之二。&lt;/li&gt;&#xA;&lt;li&gt;个体的基因型在一生中通常是相对稳定的，这使得遗传变异不太可能受到结局的影响，从而满足工具变量条件之三。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;孟德尔随机化之步骤，可简述如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;选择工具变量： 首先，需选取一组与暴露因素高度相关的遗传变异，且此等变异不得与结局存在直接因果联系，亦不得受其他混淆因素之影响。通常由全基因组关联研究（GWAS）等方法来寻找。&lt;/li&gt;&#xA;&lt;li&gt;假设检验：其次，还需检验找到的遗传变异是否满足三个条件。&lt;/li&gt;&#xA;&lt;li&gt;估计因果效应： 以所选遗传变异为工具变量，运用统计学方法，估计暴露因素对结局之因果效应。&lt;/li&gt;&#xA;&lt;li&gt;敏感性分析： 最后，为验证结果之稳健性，需进行一系列敏感性分析，如排除弱工具变量、考虑潜在的水平多效性等。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;优势&#34;&gt;优势&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;减少混淆偏差： 遗传变异在受孕时即已确定，不受后天生活方式或其他环境因素影响，故能有效减少混淆偏差。&lt;/li&gt;&#xA;&lt;li&gt;解决反向因果关系： 遗传变异对暴露因素之影响早于结局之发生，从而避免了反向因果关系之困扰。&lt;/li&gt;&#xA;&lt;li&gt;提供因果推论： 孟德尔随机化能提供更强之因果推论证据，相较于传统观察性研究更具说服力。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;局限性&#34;&gt;局限性&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;工具变量之选择： 合适工具变量之选取至关重要，若工具变量不满足相关假设，则结果将产生偏倚。&lt;/li&gt;&#xA;&lt;li&gt;水平多效性： 遗传变异可能通过多个途径影响结局，若存在水平多效性，则会高估或低估因果效应。&lt;/li&gt;&#xA;&lt;li&gt;样本量要求： 孟德尔随机化通常需要较大样本量，以保证统计功效。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;总结&#34;&gt;总结&lt;/h1&gt;&#xA;&lt;p&gt;孟德尔随机化乃近来流行病学研究中之利器，用以探究暴露因素与结局之间之因果关系。其原理甚为精妙，以遗传变异充当工具变量，通过利用遗传变异的随机性，在观察性数据中模拟出近似于随机对照试验之条件，从而更准确地推断因果关系。然而，研究者在应用此方法时，应充分认识其优势与局限性，谨慎选择工具变量，并进行充分的敏感性分析，以确保结果之可靠性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>局部平均处理效应：精准刻画的智慧</title>
      <link>https://touchingfish.top/notes/local-average-treatment-effect/</link>
      <pubDate>Fri, 22 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/local-average-treatment-effect/</guid>
      <description>&lt;p&gt;局部平均处理效应（Local Average Treatment Effect, LATE）是解决工具变量（instrumental variables, IV）分析中“异质性”问题的重要概念，尤其在处理效应并非全体受试者均一致之时，LATE 能准确捕捉那些响应工具变量之人群的因果效应。其所估计者，并非总体平均处理效应，而是仅针对那些遵从工具变量之个体（即“遵从者”）的平均处理效应。&lt;/p&gt;&#xA;&lt;h2 id=&#34;样本的分层&#34;&gt;样本的分层&lt;/h2&gt;&#xA;&lt;p&gt;如果将医生的处方作为工具变量 $Z$，是否遵从处方服用药物为 $T$，则可以将样本分为“遵从者”（Compliers）与“非遵从者”（Defiers）组，并对这两组个体之潜在结果进行比较。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;样本分层记号&lt;/strong&gt;：借鉴潜在结果的表示，我们用&#xA;&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;T(1) \triangleq T(Z=1)\\\&#xA;T(0) \triangleq T(Z=0)&#xA;\end{aligned}&#xA;$$&lt;p&gt;&#xA;来表示对 $Z$ 进行干预时获得的处理 $T$，所有样本可以分为以下 4 种类型：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Compliers: $T(1)=1$ and $T(0)=0$&lt;/li&gt;&#xA;&lt;li&gt;Always-takers: $T(1)=1$ and $T(0)=1$&lt;/li&gt;&#xA;&lt;li&gt;Never-takers: $T(1)=0$ and $T(0)=0$&lt;/li&gt;&#xA;&lt;li&gt;Defiers: $T(1)=0$ and $T(0)=1$&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;其中，遵从者与非遵从者是否接受处理完全取决于工具变量。&lt;/p&gt;&#xA;&lt;p&gt;而 Always-takers 和 Never-takers 是否接受处理则与工具变量无关。例如，根据自己意愿，而不按处方用药者。&lt;/p&gt;&#xA;&lt;p&gt;后者之因果图中不存在 $Z \to T$ 的边，故对 Always-takers 和 Never-takers 而言，$Z$ 对 $Y$ 之因果效应为 $0$。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;LATE.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;根据是否被要求接受处理($Z=1 \quad \text{or} \quad Z=0$)，以及是否接受处理($T=1 \quad \text{or} \quad T=0$) 进行分层时，共有4种组合：&lt;/p&gt;</description>
    </item>
    <item>
      <title>宝可梦：数据可视化作业</title>
      <link>https://touchingfish.top/notes/pokemon-dataviz/</link>
      <pubDate>Wed, 30 Mar 2022 13:04:15 +0800</pubDate>
      <guid>https://touchingfish.top/notes/pokemon-dataviz/</guid>
      <description>&lt;h2 id=&#34;数据准备宝可梦属性必知必会&#34;&gt;数据准备：宝可梦属性必知必会&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Type（属性）：共十多种，到第五世代开始，宝可梦可以拥有两个属性&lt;/li&gt;&#xA;&lt;li&gt;Total（能力值）：也叫种族值，表示该种宝可梦各项能力的数值总和&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;HP（体力值）&lt;/li&gt;&#xA;&lt;li&gt;Attack（物理攻击力）&lt;/li&gt;&#xA;&lt;li&gt;Defence（物理防御力）&lt;/li&gt;&#xA;&lt;li&gt;SpAtk, SpecialAttack（特殊攻击力）&lt;/li&gt;&#xA;&lt;li&gt;SpDef, SpecialDefence（特殊防御力）&lt;/li&gt;&#xA;&lt;li&gt;Speed（速度）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Generation（世代）：第一代即为大家熟知的皮卡丘、杰尼龟等，本次作业的数据集为前六个世代的宝可梦&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Legendary（传说）：神兽。通常被主角小智撞见，或者剧场版登场的稀有宝可梦&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;p0.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;数据简介&#34;&gt;数据简介&lt;/h5&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#加载&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;library&lt;/span&gt;(tidyverse)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#处理图标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;library&lt;/span&gt;(png)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ibrary&lt;/span&gt;(grid)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#读取数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pokemon &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;read.csv&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Pokemon.csv&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#查看数据概况&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;glimpse&lt;/span&gt;(pokemon)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#数据整理&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;colnames&lt;/span&gt;(pokemon)[1] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ID&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;colnames&lt;/span&gt;(pokemon) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;str_replace_all&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;names&lt;/span&gt;(pokemon), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\.&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;names&lt;/span&gt;(Gen) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;names&lt;/span&gt;(Type) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;levels&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;as.factor&lt;/span&gt;(pokemon&lt;span style=&#34;color:#f92672&#34;&gt;$&lt;/span&gt;Type1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;names&lt;/span&gt;(Stat) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;levels&lt;/span&gt;(pkm_long&lt;span style=&#34;color:#f92672&#34;&gt;$&lt;/span&gt;Key)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#长数据转换&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pkm_long &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; pokemon &lt;span style=&#34;color:#f92672&#34;&gt;%&amp;gt;%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pivot_longer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;), names_to &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;, values_to &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Value&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#筛选&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pkm_nonLegendary &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; pokemon &lt;span style=&#34;color:#f92672&#34;&gt;%&amp;gt;%&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;filter&lt;/span&gt;(Legendary &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;False&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#载入图标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;img &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;readPNG&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pokemon.png&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;img &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rasterGrob&lt;/span&gt;(img, interpolate &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TRUE&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#取色&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Gen &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#DA4511&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#FFBD00&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#6A953F&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#9A6233&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#D3AE7C&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#307CA1&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#a8b820&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#705848&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#7860e0&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#f8c030&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#FFAAFF&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#a05038&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#f05030&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#98a8f0&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#6060b0&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#78c850&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#d0b058&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#58c8e0&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#a8a090&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#b058a0&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#f870a0&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#b8a058&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#a8a8c0&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#3898f8&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Stat &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#f5ac78&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#fae078&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ff5959&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#9cb4f3&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#a3da8a&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#fa92b2&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;可视化&#34;&gt;可视化&lt;/h2&gt;&#xA;&lt;h3 id=&#34;属性&#34;&gt;属性&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-r&#34; data-lang=&#34;r&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#原生属性的宝可梦数量&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pokemon &lt;span style=&#34;color:#f92672&#34;&gt;%&amp;gt;%&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;group_by&lt;/span&gt;(Type1) &lt;span style=&#34;color:#f92672&#34;&gt;%&amp;gt;%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;summarise&lt;/span&gt;(count &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;()) &lt;span style=&#34;color:#f92672&#34;&gt;%&amp;gt;%&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ggplot&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;aes&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fct_reorder&lt;/span&gt;(Type1, count, desc), count, fill &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Type1), color &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;black&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;geom_bar&lt;/span&gt;(stat &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;identity&amp;#34;&lt;/span&gt;, position &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dodge&amp;#34;&lt;/span&gt;, show.legend &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; F) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;geom_text&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;aes&lt;/span&gt;(label &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; count), nudge_y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2.5&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;coord_flip&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scale_fill_manual&lt;/span&gt;(values &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Type) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;labs&lt;/span&gt;(x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;, y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   title &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Num of Pokemons by Type&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   subtitle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;All pokemons have a primary type. But not all pokemons have a secondary type.&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;theme&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  panel.background &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;element_blank&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  panel.border &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;element_rect&lt;/span&gt;(fill &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NA&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  plot.background &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;element_blank&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  axis.text.x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;element_blank&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  plot.title &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;element_text&lt;/span&gt;(face &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bold&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;annotation_custom&lt;/span&gt;(img, xmin &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, xmax &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;, ymin &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;, ymax &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;112&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;p1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>工具变量如何通向因果效应</title>
      <link>https://touchingfish.top/notes/instrumental-variables/</link>
      <pubDate>Mon, 28 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/instrumental-variables/</guid>
      <description>&lt;p&gt;在日常生活中，我们经常会遇到这样的问题：某种行为是否会导致某种结果？例如，吸烟是否会导致肺癌？参加工作培训是否会提高就业率？这些问题的答案并不总是显而易见，因为很多时候，行为和结果之间可能存在其他隐藏的混淆因素。工具变量（Instrumental Variables, IV）是当混淆因素不可观测时，识别因果效应的一种解决方案。&lt;/p&gt;&#xA;&lt;p&gt;假设我们有以下变量：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;$T$：处理变量（例如，是否接受某种治疗）&lt;/li&gt;&#xA;&lt;li&gt;$Y$：结果变量（例如，健康状况）&lt;/li&gt;&#xA;&lt;li&gt;$U$：混淆因素（例如，个人健康习惯）&lt;/li&gt;&#xA;&lt;li&gt;$Z$：工具变量（例如，是否被建议接受治疗）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;工具变量 $Z$ 必须满足下列三个假设:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;相关性假设（Relevance Assumption）: $Z$ 对 $T$ 存在因果效应&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;排他限制（Exclusion Restriction）: $Z$ 对 $Y$ 的所有因果效应都必须经过中介 $T$&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;$Z$ causal effects on $Y$ is fully mediated by $T$.&lt;/p&gt;&#xA;&lt;p&gt;This assumption is known as the exclusion restriction because it excludes $Z$ from the structural equation for $Y$ and from any other structural equations that would make causal association flow from $Z$ to $Y$ without going through $T$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>贝叶斯网络：因果图模型的前身</title>
      <link>https://touchingfish.top/notes/bayesian-network/</link>
      <pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/bayesian-network/</guid>
      <description>&lt;p&gt;贝叶斯网络（Bayesian Network），作为一种图形化模型，早在20世纪末便广为流传，其主要用以描述随机变量之间的条件独立性与概率分布关系。它以有向无环图（Directed Acyclic Graph, DAG）为基础，将复杂的概率系统分解为易于处理的子结构。&lt;/p&gt;&#xA;&lt;p&gt;在这一框架下，每个节点代表一个随机变量，每条有向边则表示变量间的条件依赖。例如，在贝叶斯网络中，若变量 $X$ 指向 $Y$，这仅表示给定 $X$ 的条件下，$Y$ 的概率分布被决定。&lt;/p&gt;&#xA;&lt;h2 id=&#34;条件独立性的理论基础&#34;&gt;条件独立性的理论基础&lt;/h2&gt;&#xA;&lt;p&gt;考虑我们将要进行建模的分布为 $P(x_1,x_2,\dots,x_n)$，根据链式法则（chain rule），对其进行分解：&lt;/p&gt;&#xA;$$&#xA;\begin{aligned}&#xA;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)&#xA;\end{aligned}&#xA;$$&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;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;$x_1$&lt;/th&gt;&#xA;          &lt;th&gt;$x_2$&lt;/th&gt;&#xA;          &lt;th&gt;$P(x_3\|x_2,x_1)$&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;$a_1$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;$a_2$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;$a_3$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;$a_4$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;当考虑 $4$ 个变量时（$n=4$），参数为 $8$ 个。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;$x_1$&lt;/th&gt;&#xA;          &lt;th&gt;$x_2$&lt;/th&gt;&#xA;          &lt;th&gt;$x_3$&lt;/th&gt;&#xA;          &lt;th&gt;$P(x_4\|x_3,x_2,x_1)$&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;$a_1$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;$a_2$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;$a_3$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;$a_4$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;$a_5$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;$a_6$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;$a_7$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;$a_8$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;也就是说，对 $P(x_n|x_{n-1},\dots,x_1)$ 进行建模必要的参数为 $2^{n-1}$ 个，随着 $n$ 的增加呈指数型增长。&lt;/p&gt;</description>
    </item>
    <item>
      <title>因果图：结构性的因果关系表征</title>
      <link>https://touchingfish.top/notes/structural-causal-model/</link>
      <pubDate>Sat, 20 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/structural-causal-model/</guid>
      <description>&lt;p&gt;传统的因果推断（causal inference）多依赖于回归模型与假设检验，着重于处理数据中变量间的关联性，而忽视了因果关系的结构性。因果图模型的引入，则为我们提供了一种全新的视角，可谓因果推断领域的一大颠覆。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结构方程&#34;&gt;结构方程&lt;/h2&gt;&#xA;&lt;p&gt;相比传统回归分析的变量间关联，结构因果模型强调因果关系的显性表达，为我们提供了更多的信息。例如，$M$ 是一个结构因果模型（structural causal model），其中 $V=\{Z,X,Y\}$ 是研究中所讨论因果关系的变量，称为内生变量（endogenous variables），$U=\{U_z.U_x,U_y\}$ 是外生变量（exogenous variables），代表研究中没有被明确建模的扰动（disturbances）。&lt;/p&gt;&#xA;&lt;p&gt;函数 $F=\{f_z,f_x.f_y\}$  称为结构方程（structural equations），每个函数表示对应的内生变量的数据生成机制，即对应的内生变量的值由其他变量的值所决定的因果过程。&lt;/p&gt;&#xA;$$&#xA;M=\begin{cases}&#xA;Z \leftarrow f_z(U_z)\\&#xA;X \leftarrow f_x(Z,U_x)\\&#xA;Y \leftarrow f_y(X,Z,U_y)\\&#xA;U \sim P(U)&#xA;\end{cases}&#xA;$$&lt;p&gt;$P(U)$ 表示外生变量相关联的概率分布，在本例中，假设外生变量是相互独立的。结构因果模型 $M$ 表示内生变量的联合分布 $P(V)$，称作观测分布（observational distribution）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;有向无环图&#34;&gt;有向无环图&lt;/h2&gt;&#xA;&lt;p&gt;每一个结构因果模型 $M$ 有一个对应的因果图 $G$，直观地刻画了各个变量之间的因果关系，每个节点表示模型 $M$ 中的一个变量（Variables，$V$），图中每一条边都表示变量之间的因果效应，箭头 $V_i \to V_j$ 说明变量 $V_i$ 是变量 $V_j$ 的直接原因（$V_i$ 出现在 $V_j$ 的结构方程中），表现为一个有向无环图（directed acyclic graph, DAG）。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;SCM.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;通常情况下，因果图不会将外生变量明确地表示出来。如果外生变量非独立，即同时存在结构方程 $f_{v_i}$ 和 $f_{v_j}$ 中时，可以用虚线的双向箭头 $V_i \dashleftarrow\dashrightarrow V_j$ 表示。&lt;/p&gt;&#xA;&lt;h2 id=&#34;do-算子&#34;&gt;&lt;em&gt;do&lt;/em&gt; 算子&lt;/h2&gt;&#xA;&lt;p&gt;关于因果关系的讨论中，Fisher 的随机化试验是实验性研究的黄金标准，而是否能够进行操纵（manipulability）被认为是讨论因果关系的先决条件，并形成了“无操纵不因果”（“no causation without manipulation”）的观念。&lt;/p&gt;</description>
    </item>
    <item>
      <title>潜在结果框架：因果推论的基石</title>
      <link>https://touchingfish.top/notes/potential-outcome/</link>
      <pubDate>Wed, 17 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/potential-outcome/</guid>
      <description>&lt;p&gt;在 Neyman-Rubin 因果模型（或称“潜在结果框架”，Potential Outcome）中，所谓因果推论，实际上是估计“因果效应”（causal effect）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;何谓因果效应&#34;&gt;何谓因果效应&lt;/h2&gt;&#xA;&lt;p&gt;Rubin 给出一个直观的例子：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Intuitively,  &amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;If an hour ago I had taken two aspirins instead of just a glass of water, my headache would now be gone,&amp;rdquo; or &amp;ldquo;Because an hour ago I took two aspirins instead of just a glass of water, my headache is now gone.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;“如果一个小时前我服用了两个阿司匹林而不是一杯水，我的头痛现在就会消失”，或者“因为一个小时前我服用了两个阿司匹林而不是一杯水，我的头痛现在消失了”&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Now define the causal effect of the $E$ versus $C$ treatment on $Y$ for a particular trial (i.e., a particular unit and associated&#xA;times $t_1$, $t_2$) as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title>随机变量（RANDOM VARIABLES）</title>
      <link>https://touchingfish.top/notes/random-variable/</link>
      <pubDate>Fri, 15 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/random-variable/</guid>
      <description>&lt;p&gt;RANDOM VARIABLES:&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;f:\Omega\mapsto\mathbb{R}&#xD;&#xA;$$&lt;p&gt;For a random variable $X$, the function $F$ defined by&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;F(x)=P\{X \leq x\} \qquad -\infty \leq x \leq \infty&#xD;&#xA;$$&lt;p&gt;&#xA;is called the &lt;strong&gt;cumulative distribution function&lt;/strong&gt;, or, more simply, the &lt;em&gt;distribution function&lt;/em&gt; of $X$. Thus, the distribution function specifies, for all real values $x$, the probability that the random variable is less than or equal to $x$.&lt;/p&gt;&#xA;&lt;h2 id=&#34;discrete-random-variables&#34;&gt;DISCRETE RANDOM VARIABLES&lt;/h2&gt;&#xA;&lt;p&gt;A random variable that can take on &lt;!-- raw HTML omitted --&gt;at most a countable number of possible values&lt;!-- raw HTML omitted --&gt; is said to be discrete. For a discrete random variable $X$, we define the &lt;strong&gt;probability mass function&lt;/strong&gt; $p(a)$ of $X$ by&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>多变量微积分：格林公式</title>
      <link>https://touchingfish.top/notes/greens-theorem/</link>
      <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/greens-theorem/</guid>
      <description>&lt;p&gt;梯度场 $\vec F=M\vec{i}+N\vec{j}=\grad{f}$, 其中 $f(x,y)$ 是关于 $x$ 和 $y$ 的函数.&lt;/p&gt;&#xA;&lt;p&gt;若一个在平面内处处可导的向量场 $\vec F$ 有$M_y = N_x$, 则这个向量场是梯度场.&lt;/p&gt;&#xA;&lt;h2 id=&#34;旋度curl&#34;&gt;旋度(Curl)&lt;/h2&gt;&#xA;&lt;p&gt;旋度描述场向量旋转的部分, 表示某一点上扭转程度的大小.&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;\operatorname{curl}(\vec F)=N_x-M_y&#xD;&#xA;$$&lt;p&gt;&#xA;在梯度场(保守场)中, 旋度为 $0$.&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;\vec F=\grad{f} \implies \operatorname{curl}(\vec F)=0&#xD;&#xA;$$&lt;blockquote&gt;&#xA;&lt;p&gt;For example, if the swirl of the airflow or water flow is $0$, it means there is no eddy current. Such that $\vec F = x\vec i + y\vec j$.&lt;/p&gt;&#xA;&lt;p&gt;In complex motion, some points may rotate more than others, and the curl is not constant at this time, it depends on the position of the point, that is, the values of $x$ and $y$. In the weather map, the high rotation may be a typhoon or a tornado: $\vec F = -y\vec i + x\vec j$, $curl(\vec F)=1-(-1)=2$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>多变量微积分：平面向量场</title>
      <link>https://touchingfish.top/notes/vector-field/</link>
      <pubDate>Mon, 27 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/vector-field/</guid>
      <description>&lt;p&gt;当研究物理系统中温度、压力、密度等在一定空间内的分布状态时, 数学上只需用一个代数量来描绘, 这些代数量 (即标量函数)所定出的场就称为标量场. 最常用的标量场有温度场, 电势场, 密度场, 浓度场等等.&lt;/p&gt;&#xA;&lt;p&gt;向量场(Vector Field, 矢量场)是由一个向量对应另一个向量的函数. 向量场广泛应用于物理学, 尤其是电磁场.&lt;/p&gt;&#xA;&lt;p&gt;建立坐标系(x,y,z). 空间中每一点 $(x_0,y_0,z_0)$ 都可以用由原点指向该点的向量表示. 因此, 如果空间在所有点对应一个唯一的向量 $(a,b,c)$, 那么时空中存在向量场 $F:(x_0,y_0,z_0)\to(a,b,c)$&lt;/p&gt;&#xA;&lt;p&gt;在二维平面上的每个点都对应一个向量, 可以如下表示:&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;\vec{F}=M\vec{i}+N\vec{j}&#xD;&#xA;$$&lt;p&gt;&#xA;其中 $i$ 和 $j$ 是单位向量, $M$ 和 $N$ 是关于 $x$ 和 $y$ 的函数, 也就是平面向量场中的所有向量都取决于 $x$ 和 $y$. 故 $\vec F$ 还可以表示为 $\lang M,N \rang$&lt;/p&gt;&#xA;&lt;p&gt;在物理学中常见的还有水流场和引力场. 在流体中, 每一点都有速度和力量, 在地球上, 所有物体都受到重力的约束, 共同组成重力场, 宇宙中, 行星之间相互吸引或排斥, 形成引力场.&lt;/p&gt;&#xA;&lt;h2 id=&#34;线积分-line-integral&#34;&gt;线积分 (Line Integral)&lt;/h2&gt;&#xA;&lt;p&gt;在数学中, 线积分的积分函数的取值沿的不是区间, 而是特定的曲线, 称为积分路径.&lt;/p&gt;&#xA;&lt;p&gt;在物理学上, 线积分是质点在外力作用下运动一段距离后总功.&lt;/p&gt;&#xA;&lt;p&gt;在物理学上, 力所做的功等于力与位移的乘积, 更严格地说, 力在足够小的距离上做的功等于力的向量与位移向量的点积:&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 X</title>
      <link>https://touchingfish.top/notes/cal10/</link>
      <pubDate>Sun, 27 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal10/</guid>
      <description>&lt;h1 id=&#34;体积弧长和表面积&#34;&gt;§体积、弧长和表面积&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For volumes and surface areas, we&amp;rsquo;ll pay special attention to solids which are formed by revolving a region in the plane about some axis which lies in the plane; such solids are called &lt;em&gt;solids of revolution&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;圆盘法（disc method）和壳法（shell method）求体积&lt;/li&gt;&#xA;&lt;li&gt;求更一般固体的体积&lt;/li&gt;&#xA;&lt;li&gt;求光滑曲线（smooth curve）的弧长（arc lengths）和带参数的质点（parametric particles）速率&lt;/li&gt;&#xA;&lt;li&gt;求旋转体（solids of revolution）的表面积&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;291-旋转体的体积&#34;&gt;29.1 旋转体的体积&lt;/h2&gt;&#xA;&lt;p&gt;定积分的回顾（见&lt;em&gt;第16章&lt;/em&gt;）&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So here&amp;rsquo;s the pattern: we make a little strip of width $\mathrm{d}x$ units and height $y$ units at position $x$ on the $x$-axis, work out its area, then put a definite integral sign in front to get the total area we&amp;rsquo;re looking for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 IX</title>
      <link>https://touchingfish.top/notes/cal9/</link>
      <pubDate>Mon, 21 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal9/</guid>
      <description>&lt;h1 id=&#34;参数方程和极坐标&#34;&gt;§参数方程和极坐标&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;参数方程（parametric equations）、图像和切线（tangents）&lt;/li&gt;&#xA;&lt;li&gt;笛卡尔坐标（Cartesian coordinates）和极坐标（polar coordinates）的转换&lt;/li&gt;&#xA;&lt;li&gt;极坐标曲线（polar curve）的切线&lt;/li&gt;&#xA;&lt;li&gt;极坐标曲线围成的面积&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;271-参数方程&#34;&gt;27.1 参数方程&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;hellip;suppose that both $x$ and $y$ are functions of another variable $t$.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;$x=3\cos(t)$ 和 $y=3\sin(t)$，其中 $0{\leq}t{\leq}2\pi$ 是圆 $x^2+y^2=9$ 的参数化（parametrization）&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The variable $t$ is called a parameter, and the above equations are called &lt;em&gt;parametric equations&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;描点作图：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;$t$&lt;/th&gt;&#xA;          &lt;th&gt;$0$&lt;/th&gt;&#xA;          &lt;th&gt;$\pi/6$&lt;/th&gt;&#xA;          &lt;th&gt;$\pi/4$&lt;/th&gt;&#xA;          &lt;th&gt;$\pi/3$&lt;/th&gt;&#xA;          &lt;th&gt;$\pi/2$&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;$x$&lt;/td&gt;&#xA;          &lt;td&gt;$3$&lt;/td&gt;&#xA;          &lt;td&gt;$3\sqrt{3}/2$&lt;/td&gt;&#xA;          &lt;td&gt;$3/\sqrt{2}$&lt;/td&gt;&#xA;          &lt;td&gt;$3/2$&lt;/td&gt;&#xA;          &lt;td&gt;$0$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;$y$&lt;/td&gt;&#xA;          &lt;td&gt;$0$&lt;/td&gt;&#xA;          &lt;td&gt;$3/2$&lt;/td&gt;&#xA;          &lt;td&gt;$3/\sqrt{2}$&lt;/td&gt;&#xA;          &lt;td&gt;$3\sqrt{3}/2$&lt;/td&gt;&#xA;          &lt;td&gt;$3$&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;可以得到圆（$x^2+y^2=(3\cos(t))^2+(3\sin(t))^2=9$）的四等分弧（quarter-arc）&lt;/p&gt;&#xA;&lt;p&gt;$t$ 的周期为 $2\pi$，也可以使 $t$ 从 $0$ 向 $t&lt;0$ 的区间取点作图，得到完整的圆&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 VIII</title>
      <link>https://touchingfish.top/notes/cal8/</link>
      <pubDate>Sat, 19 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal8/</guid>
      <description>&lt;h1 id=&#34;泰勒多项式泰勒级数与幂级数&#34;&gt;§泰勒多项式、泰勒级数与幂级数&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;近似值（approximations）、泰勒多项式和泰勒近似定理（Taylor approximation theorem）&lt;/li&gt;&#xA;&lt;li&gt;近似值的精确度和泰勒定理&lt;/li&gt;&#xA;&lt;li&gt;幂级数&lt;/li&gt;&#xA;&lt;li&gt;泰勒级数和麦克劳林级数（Maclaurin series）&lt;/li&gt;&#xA;&lt;li&gt;泰勒级数的收敛性问题&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;241-近似值和泰勒多项式&#34;&gt;24.1 近似值和泰勒多项式&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a nice fact: for any real number $x$, we have&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;&gt; e^x \cong 1 + x + {x^2\over2} + {x^3\over6}&#xD;&#xA;&gt; $$&lt;p&gt;&#xA;Also, the closer x is to 0, the better the approximation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;2411-线性化的回顾&#34;&gt;24.1.1 线性化的回顾&lt;/h3&gt;&#xA;&lt;p&gt;平滑的函数可经过多次求导（见&lt;em&gt;13.2&lt;/em&gt;），曲线在点 $(a,f(a))$ 处的切线的方程为：&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;y=f(a)+f&#39;(a)(x-a)&#xD;&#xA;$$&lt;p&gt;称为函数 $f$ 在 $x=a$ 处的线性化（linearization）&lt;/p&gt;&#xA;&lt;p&gt;线性近似，即&lt;strong&gt;在切点处附近，切线与曲线差别很小&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;2412-二次方程近似&#34;&gt;24.1.2 二次方程近似&lt;/h3&gt;&#xA;&lt;p&gt;二次近似（quadratic approximates）&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;y=f(a)+f&#39;(a)(x-a)+{f&#39;&#39;(a)\over2}(x-a)^2&#xD;&#xA;$$&lt;p&gt;关于 $x$ 的二次函数&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$P_2(x)=y$，代入 $x=a$ 时，$P_2(a)=f(a)$&lt;/li&gt;&#xA;&lt;li&gt;$P_2&#39;(x)=f&#39;(a)+f&#39;&#39;(a)(x-a)$，代入 $x=a$ 时，$P_2&#39;(a)=f&#39;(a)$&lt;/li&gt;&#xA;&lt;li&gt;$P_2&#39;&#39;(x)=f&#39;&#39;(a)$，代入 $x=a$ 时，$P_2&#39;&#39;(a)=f&#39;(a)$&lt;/li&gt;&#xA;&lt;li&gt;因为 $f&#39;&#39;(a)$ 是一个常数，$P_2&#39;&#39;&#39;(x)=0$&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The second-order correction term helps us get even closer to the curve, at least for $x$ near $a$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 VII</title>
      <link>https://touchingfish.top/notes/cal7/</link>
      <pubDate>Wed, 09 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal7/</guid>
      <description>&lt;h1 id=&#34;数列和级数基本概念&#34;&gt;§数列和级数：基本概念&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;数列（sequences）的收敛和发散&lt;/li&gt;&#xA;&lt;li&gt;两个重要的数列&lt;/li&gt;&#xA;&lt;li&gt;数列极限与函数极限的关系&lt;/li&gt;&#xA;&lt;li&gt;级数的收敛与发散，以及几何级数（geometric series）的敛散性&lt;/li&gt;&#xA;&lt;li&gt;第 $n$ 项判别法（the $n$th term test for series）&lt;/li&gt;&#xA;&lt;li&gt;级数和反常积分的联系&lt;/li&gt;&#xA;&lt;li&gt;比式判别法（ratio test）、根式判别法（root test）、积分判别法（integral test）和交错级数判别法（alternating series test）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;221-数列的收敛和发散&#34;&gt;22.1 数列的收敛和发散&lt;/h2&gt;&#xA;&lt;p&gt;无穷数列（infinite sequence）的敛散性&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In math notation, does $\lim\limits_{n\to\infty}a_n$ exist, and if so, what is it?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;2211-数列和函数的关系&#34;&gt;22.1.1 数列和函数的关系&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There&amp;rsquo;s also a connection to horizontal asymptotes:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;若 $\lim\limits_{x\to\infty}f(x)=L$，则 $y=f(x)$ 的图像有水平渐近线 $y=L$&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For example, if you have two convergent sequences $a_n$ and $b_n$, such that $a_n \to L$ and $b_n \to M$ as $n \to \infty$, then the sum $a_n + b_n$ gives a new sequence which converges to $L + M$. The same goes for differences, products, quotients (provided that $M \neq 0$, since you can&amp;rsquo;t divide by $0$), and constant multiples.&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 V</title>
      <link>https://touchingfish.top/notes/cal5/</link>
      <pubDate>Thu, 13 May 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal5/</guid>
      <description>&lt;h1 id=&#34;积分的方法一&#34;&gt;§积分的方法（一）&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;替代法（substitution）&lt;/li&gt;&#xA;&lt;li&gt;分部积分法（integration by parts）&lt;/li&gt;&#xA;&lt;li&gt;使用部分积分对有理函数求积分&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;181-替代法&#34;&gt;18.1 替代法&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Example1&lt;/strong&gt;&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;\int{x^2\cos(x^3)\mathrm{d}x}&#xD;&#xA;&amp;=\int{\cos(x^3)(x^2\mathrm{d}x)}\\&#xD;&#xA;&amp;=\int{\cos(t)({1\over3}\mathrm{d}t)}={1\over3}\sin(t)+C&#xD;&#xA;\\&#xD;&#xA;\int{e^{2x}\sec^2(e^{2x})\mathrm{d}x}&#xD;&#xA;&amp;=\int{\sec^2(e^{2x})(e^{2x}\mathrm{d}x})\\&#xD;&#xA;&amp;=\int{\sec^2(t)({1\over2}\mathrm{d}t)}={1\over2}\tan(t)+C&#xD;&#xA;\end{aligned}&#xD;&#xA;$$&lt;p&gt;&lt;strong&gt;Example2&lt;/strong&gt;&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;\int{\frac{f&#39;(x)}{f(x)}\mathrm{d}x}=\ln|f(x)|+C&#xD;&#xA;$$&lt;p&gt;&lt;strong&gt;Example3&lt;/strong&gt;&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;\int\frac{1}{x\ln{x}}\mathrm{d}x=\int\frac{1/x}{\ln{x}}\mathrm{d}x=\ln|\ln{x}|+C&#xD;&#xA;$$&lt;h3 id=&#34;1811-换元法和定积分&#34;&gt;18.1.1 换元法和定积分&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So one way to use the substitution method on a definite integral is to focus on the indefinite integral first, then after you&amp;rsquo;ve found it, plug in the limits of integration.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;换元法：先换元求不定积分，然后把积分上下限分别代入求定积分；或者对上下限也进行换元计算&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;&#xA;$$&#xD;&#xA;\int_{1/\sqrt{2}}^{\sqrt{3}/2}{\frac{1}{\sin^{-1}(x)\sqrt{1-x^2}}\mathrm{d}x}&#xD;&#xA;$$&lt;p&gt;$\arcsin(x)$ 的导数是 $1\over\sqrt{1-x^2}$，所以用 $t=\arcsin(x)$&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;\int{\frac{1}{\arcsin(x)\sqrt{1-x^2}}\mathrm{d}x}=\int{\frac{1/\sqrt{1-x^2}}{\arcsin(x)}\mathrm{d}x}\int{1\over{t}}\mathrm{d}t=\ln|t|+C&#xD;&#xA;$$&lt;h3 id=&#34;1812-替代公式的决定&#34;&gt;18.1.2 替代公式的决定&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 VI</title>
      <link>https://touchingfish.top/notes/cal6/</link>
      <pubDate>Thu, 06 May 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal6/</guid>
      <description>&lt;h1 id=&#34;反常积分的基本概念&#34;&gt;§反常积分的基本概念&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;反常积分（improper integrals）的定义、收敛（convergence）和发散（divergence）&lt;/li&gt;&#xA;&lt;li&gt;无界区间（over unbounded regions）的反常积分&lt;/li&gt;&#xA;&lt;li&gt;比较判别法（comparison test）、极限比较判别法、p 判别法和绝对收敛比较判别法的理论基础&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;201-收敛和发散&#34;&gt;20.1 收敛和发散&lt;/h2&gt;&#xA;&lt;p&gt;积分有意义：$\int_a^b{f(x)}{\mathrm d}x$ 的被积函数在区间 $[a,b]$ 内&lt;strong&gt;有界且连续&lt;/strong&gt;（有限个间断点也可以）的；或者&lt;strong&gt;无限多个不连续点&lt;/strong&gt;（infinitely many discontinuities）（见&lt;em&gt;16.7&lt;/em&gt;）&lt;/p&gt;&#xA;&lt;p&gt;反常积分的定义：满足以下任一条件&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;$f$ 在区间 $[a,b]$ 内无界&lt;/li&gt;&#xA;&lt;li&gt;$b=\infty$  或&lt;/li&gt;&#xA;&lt;li&gt;$a=-\infty$&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If $f(x)$ is unbounded for $x$ near some number $c$, we&amp;rsquo;ll say that f has a &lt;em&gt;blow-up point&lt;/em&gt; at $x = c$. Again, in most situations, this is the same thing as a vertical asymptote.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;破裂点（blow-up point）的大多数情况是垂直渐近线，需要使用极限思想&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;if the integral isn&amp;rsquo;t improper, it automatically converges!&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 IV</title>
      <link>https://touchingfish.top/notes/cal4/</link>
      <pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal4/</guid>
      <description>&lt;h1 id=&#34;积分&#34;&gt;§积分&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;求和符号（sigma notation）&lt;/li&gt;&#xA;&lt;li&gt;位移与面积的关系&lt;/li&gt;&#xA;&lt;li&gt;使用分区的方法求面积&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;151-求和符号&#34;&gt;15.1 求和符号&lt;/h2&gt;&#xA;&lt;p&gt;求和符号 —— sigma notation&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In general, the number of integers between $A$ and $B$, including $A$ and $B$, is $B - A + 1$.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;注意：$\sum\limits_{A}^{B}$ 共有 $B-A+1$ 个数求和&lt;/p&gt;&#xA;&lt;h3 id=&#34;1511-一个有用的求和&#34;&gt;15.1.1 一个有用的求和&lt;/h3&gt;&#xA;$$&#xD;&#xA;S = \sum_{i=1}^{100}i = \sum_{i=1}^{100}(101-i)&#xD;&#xA;$$&lt;p&gt;$2S = \sum_{i=1}^{100}(i+101-i) = \sum\limits_{i=1}^{100}101$&lt;/p&gt;&#xA;&lt;h3 id=&#34;1512-伸缩求和法&#34;&gt;15.1.2 伸缩求和法&lt;/h3&gt;&#xA;&lt;p&gt;伸缩级数（telescoping series）&lt;/p&gt;&#xA;$$&#xD;&#xA;\sum_{j=a}^{b}(f(j)-f(j-1))=f(b)-f(a-1)&#xD;&#xA;$$&lt;h2 id=&#34;152-位移与面积&#34;&gt;15.2 位移与面积&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1524-连续速度&#34;&gt;15.2.4 连续速度&lt;/h3&gt;&#xA;$$&#xD;&#xA;mesh=max(t_1 - t_0); (t_2 - t_1); ... ; (t{n-1} - t{n-2}); (t_n - t_{n-1})&#xD;&#xA;$$&lt;p&gt;Riemann sum（黎曼和）：速度曲线下的实际面积&lt;/p&gt;</description>
    </item>
    <item>
      <title>可变剪接分析详解（Alternative Splicing）</title>
      <link>https://touchingfish.top/notes/alternative-splice-algorithm-cn/</link>
      <pubDate>Sat, 01 May 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/alternative-splice-algorithm-cn/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;在真核生物中，一个基因可以通过可变剪接（Alternative Splicing, AS）产生多种&#xA;mRNA 亚型 &amp;ndash; 即在 pre-mRNA 剪接过程中，通过不同的外显子组合方式，生成不同的&#xA;成熟 mRNA。这一机制在不增加基因数目的前提下，极大扩展了蛋白质组的多样性。&lt;/p&gt;&#xA;&lt;p&gt;一个含有 N 个外显子的基因，理论上最多可产生 2^(N-1) 种剪接变体。实际中，&#xA;大多数基因产生 2-10 种亚型，但个别基因（如果蝇 Dscam）可产生数万种。&lt;/p&gt;&#xA;&lt;h3 id=&#34;为什么需要计算分析&#34;&gt;为什么需要计算分析&lt;/h3&gt;&#xA;&lt;p&gt;高通量转录组测序（RNA-seq、全长 cDNA 测序）会产生数千条转录本比对到参考基因组&#xA;上的结果。人工逐个检查每个基因的剪接变异是不现实的。计算流程需要：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;将属于同一基因位点的转录本聚类&lt;/li&gt;&#xA;&lt;li&gt;区分真正的剪接变体与比对假象&lt;/li&gt;&#xA;&lt;li&gt;对每种剪接变异进行分类&lt;/li&gt;&#xA;&lt;li&gt;对全基因组的 AS 事件进行定量和汇总&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;as-code-的概念&#34;&gt;AS Code 的概念&lt;/h3&gt;&#xA;&lt;p&gt;AS Code 体系（Sammeth et al., 2008）提供了一种紧凑、无歧义的记号来描述任意&#xA;可变剪接事件。其核心思想是：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;对于任意一对重叠的转录本，它们之间不同的剪接位点定义了 AS 事件。将这些差异&#xA;位点按位置编号，并标记为供体（^）或受体（-），即可得到唯一描述该事件结构的&#xA;编码。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这一编码使得 AS 事件可以被系统地分类为具有生物学意义的类别。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;输入数据与预处理&#34;&gt;输入数据与预处理&lt;/h2&gt;&#xA;&lt;h3 id=&#34;所需输入文件&#34;&gt;所需输入文件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;+-------------------+------------------+-----------------------------------+&#xA;| 文件              | 格式             | 内容                              |&#xA;+-------------------+------------------+-----------------------------------+&#xA;| 基因组            | FASTA            | 参考基因组序列                    |&#xA;| 基因注释          | GTF              | 基因模型及外显子坐标              |&#xA;| cDNA 比对         | GFF3 (cDNA_match)| 全长 cDNA 比对结果                |&#xA;+-------------------+------------------+-----------------------------------+&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;基因注释提供参考转录本结构；cDNA 比对提供实验观测到的转录本结构，可能揭示注释中&#xA;未收录的新剪接变体。&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 III</title>
      <link>https://touchingfish.top/notes/cal3/</link>
      <pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal3/</guid>
      <description>&lt;h1 id=&#34;最优化和线性化&#34;&gt;§最优化和线性化&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最优化（optimization）&lt;/li&gt;&#xA;&lt;li&gt;线性近似（linearization）&lt;/li&gt;&#xA;&lt;li&gt;估算函数的零点&lt;/li&gt;&#xA;&lt;li&gt;牛顿法（Newton&amp;rsquo;s method）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;131-最优化&#34;&gt;13.1 最优化&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Identify all the variables you might possibly need. One of them should be the quantity you want to maximize or minimize - make sure you know which one! Let&amp;rsquo;s call it $Q$ for now, although of course it might be another letter like $P$, $m$, or $\alpha$.&lt;/li&gt;&#xA;&lt;li&gt;Get a feel for the extremes of the situation, seeing how far you can push your variables. (For example, in the problem from the previous section, we saw that $x$ had to be between $2$ and $8$.)&lt;/li&gt;&#xA;&lt;li&gt;Write down equations relating the variables. One of them should be an equation for $Q$.&lt;/li&gt;&#xA;&lt;li&gt;Try to make $Q$ a function of only one variable, using all your equations to eliminate the other variables.&lt;/li&gt;&#xA;&lt;li&gt;Differentiate $Q$ with respect to that variable, then find the critical points; remember, these occur where the derivative is $0$ or the derivative doesn&amp;rsquo;t exist.&lt;/li&gt;&#xA;&lt;li&gt;Find the values of $Q$ at all the critical points and at the endpoints. Pick out the maximum and minimum values. As a verification, use a table of signs or the sign of the second derivative to classify the critical points.&lt;/li&gt;&#xA;&lt;li&gt;Write out a summary of what you&amp;rsquo;ve found, identifying the variables in words rather than symbols (wherever possible).&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;考虑所有可能需要的变量&lt;/li&gt;&#xA;&lt;li&gt;确认极端变量的可能&lt;/li&gt;&#xA;&lt;li&gt;写出不同变量的方程&lt;/li&gt;&#xA;&lt;li&gt;构建单变量函数&lt;/li&gt;&#xA;&lt;li&gt;求导，计算临界点&lt;/li&gt;&#xA;&lt;li&gt;计算临界点及端点的函数值，使用一阶或二阶导数判断最大值和最小值&lt;/li&gt;&#xA;&lt;li&gt;结论&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;注意：构建单变量函数时，有时候可以通过隐函数求导&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 II</title>
      <link>https://touchingfish.top/notes/cal2/</link>
      <pubDate>Mon, 12 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal2/</guid>
      <description>&lt;h1 id=&#34;微分&#34;&gt;§微分&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通过定义求导&lt;/li&gt;&#xA;&lt;li&gt;乘法法则、除法法则和链式法则&lt;/li&gt;&#xA;&lt;li&gt;切线方程&lt;/li&gt;&#xA;&lt;li&gt;速度和加速度&lt;/li&gt;&#xA;&lt;li&gt;求导数伪装的极限&lt;/li&gt;&#xA;&lt;li&gt;分段函数的求导&lt;/li&gt;&#xA;&lt;li&gt;根据函数图像画出导函数的图像&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;61-通过定义求导&#34;&gt;6.1 通过定义求导&lt;/h2&gt;&#xA;&lt;p&gt;定义：&#xA;&lt;/p&gt;&#xA;$$&#xD;&#xA;f&#39;(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}&#xD;&#xA;$$&lt;p&gt;例如，$\frac{\mathrm d}{\mathrm d x}({1 \over x}) = -\frac{1}{x^2}$ 和 $\frac{\mathrm d}{\mathrm d x}(\sqrt x) = \frac{1}{2\sqrt x}$&lt;/p&gt;&#xA;&lt;p&gt;幂函数 $f(x) = x^n$ 的导数的推导（略），当 $n &gt; 0, n\in\Bbb{Z}$ 时&lt;/p&gt;&#xA;$$&#xD;&#xA;\frac{\mathrm d}{\mathrm d x}(x^n) = nx^{n-1}&#xD;&#xA;$$&lt;p&gt;在上面的两个例子中，可见 $n = -1, n = 1/2$ 时，等式成立&lt;/p&gt;&#xA;&lt;p&gt;事实上，对所有实数 $n\in\Bbb{R}$，等式成立（详见&lt;em&gt;第9章&lt;/em&gt;）&lt;/p&gt;&#xA;&lt;p&gt;当 $n = 0$ 时，$x^n = 1$，$nx^{n-1} = 0$，$\frac{\mathrm d}{\mathrm d x}(1) = 0$&lt;/p&gt;</description>
    </item>
    <item>
      <title>普林斯顿微积分读本 I</title>
      <link>https://touchingfish.top/notes/cal1/</link>
      <pubDate>Fri, 02 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/cal1/</guid>
      <description>&lt;h1 id=&#34;函数图像与直线&#34;&gt;§函数、图像与直线&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;函数，定义域（domain）、上域（codomain）、值域（range）和垂直线检验&lt;/li&gt;&#xA;&lt;li&gt;反函数和水平线检验&lt;/li&gt;&#xA;&lt;li&gt;复合函数&lt;/li&gt;&#xA;&lt;li&gt;奇偶性&lt;/li&gt;&#xA;&lt;li&gt;函数图像&lt;/li&gt;&#xA;&lt;li&gt;绝对值处理&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;11-函数&#34;&gt;1.1 函数&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;it&amp;rsquo;s technically not correct to say &amp;ldquo;$f(x)$ is a function&amp;rdquo;; it should be &amp;ldquo;$f$ is a function.&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;$f$ 是一个函数 （√）&lt;/p&gt;&#xA;&lt;p&gt;$f(x)$ 是一个函数（×）&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a function must assign a unique output for each valid input.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;函数：每一个有效输入指定唯一的输出（一一对应）&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The codomain is a set of possible outputs, while the range is the set of actual outputs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;设 $f$ 是从始集 $X$ 到终集 $Y$ 的关系，$f$ 的定义域 $D(G)$ 为 $X$，且对任何 $x \in X$ 都有惟一的 $y\in Y$ 满足 $f(x,y)$，则称 $f$ 为 $X \to Y$ 的映射&lt;/p&gt;</description>
    </item>
    <item>
      <title>编程语言中的函数</title>
      <link>https://touchingfish.top/notes/c-functions-of-programming/</link>
      <pubDate>Fri, 29 May 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/c-functions-of-programming/</guid>
      <description>&lt;p&gt;数学上的函数是指一种映射关系，通常用来将一个输入（或多个输入）映射到一个输出。对于每一个特定的输入，总是有一个确定的输出。例如，函数 f(x) = x² 将输入 x 映射为其平方。&lt;/p&gt;&#xA;&lt;p&gt;编程语言中的函数与之类似，具有输入和输出的概念，但其本质上更广泛和灵活。&lt;/p&gt;&#xA;&lt;p&gt;在编程中，函数不仅可以执行计算，还可以执行一系列操作，如修改数据、输出信息、读取文件等。函数在编程中是用来封装一段代码，使得该代码可以复用，并且能够通过调用函数来执行特定的任务。&lt;/p&gt;&#xA;&lt;p&gt;编程语言中的函数通常具有以下的特点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;定义与调用：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;定义函数时，需要给出函数名、参数（如果有）和函数体。&lt;/li&gt;&#xA;&lt;li&gt;调用函数时，通过函数名和传递的参数来执行函数。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;参数与返回值：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;函数通常接受参数（inputs），并可能返回一个值（output）。&lt;/li&gt;&#xA;&lt;li&gt;某些函数可能不接受参数或不返回值（如在 C 语言中使用 &lt;code&gt;void&lt;/code&gt; 关键字）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;封装与抽象：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;函数将代码封装起来，使得复杂操作可以通过简单的函数调用来实现。&lt;/li&gt;&#xA;&lt;li&gt;通过函数的使用，可以更容易地理解和管理代码结构。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;作用域：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;函数的内部变量通常具有局部作用域，即它们只能在函数内部访问。&lt;/li&gt;&#xA;&lt;li&gt;这种作用域规则有助于避免变量命名冲突和意外的值修改。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;windows-c-的函数编程&#34;&gt;Windows C 的函数编程&lt;/h1&gt;&#xA;&lt;h2 id=&#34;函数声明与定义&#34;&gt;函数声明与定义&lt;/h2&gt;&#xA;&lt;p&gt;在使用函数前需要进行声明（或称为函数原型声明）。例如，&lt;code&gt;int add(int a, int b);&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;函数的定义包括函数的返回类型、函数名、参数列表和函数体。&lt;/p&gt;&#xA;&lt;h2 id=&#34;返回类型&#34;&gt;返回类型&lt;/h2&gt;&#xA;&lt;p&gt;每个函数必须有一个返回类型，表明该函数返回的数据类型。&lt;/p&gt;&#xA;&lt;p&gt;如果函数不返回任何值，使用 &lt;code&gt;void&lt;/code&gt; 作为返回类型。&lt;/p&gt;&#xA;&lt;h2 id=&#34;参数传递&#34;&gt;参数传递&lt;/h2&gt;&#xA;&lt;p&gt;C 语言中的函数参数通常是按值传递的，即传递的是参数的副本，函数内部的修改不会影响原参数。&lt;/p&gt;&#xA;&lt;p&gt;如果需要函数内部修改外部变量的值，可以使用指针进行参数传递。&lt;/p&gt;&#xA;&lt;h2 id=&#34;变量的作用域&#34;&gt;变量的作用域&lt;/h2&gt;&#xA;&lt;p&gt;局部变量只在离自己最近的大括号内有效。&lt;strong&gt;形式参数&lt;/strong&gt;也是局部变量。&lt;/p&gt;&#xA;&lt;p&gt;全局变量在源文件中定义，占用的内存不会因为程序结束而释放，二是在整个进程的执行过程中一直有效。&lt;/p&gt;&#xA;&lt;p&gt;变量的存储方式分为：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;静态存储方式：程序运行期间，由系统分配固定的存储空间，&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;动态存储方式：程序运行时根据需要进行动态的分配存储空间。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;外部变量&#34;&gt;外部变量&lt;/h3&gt;&#xA;&lt;p&gt;全局变量在源程序文件（一个编译单位）中，从定义位置到文件末尾一直有效。可以使用 &lt;code&gt;extern&lt;/code&gt; 扩展变量的作用域。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;extern&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; k;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//扩展全局变量k的作用域&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;print&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;k = %d&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, k);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; k &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;//全局变量k的定义与生效，向下↓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;print&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;头文件&lt;/strong&gt;是扩展名为 .h 的文件，包含了 C 函数声明和宏定义，被多个源文件中引用共享。&lt;strong&gt;全局变量不能定义在头文件中&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>哈佛幸福课笔记（一）</title>
      <link>https://touchingfish.top/notes/positive-psychology/p1/</link>
      <pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/positive-psychology/p1/</guid>
      <description>&lt;p&gt;&lt;strong&gt;第 一 周 —— Week 1&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;第一章-导论&#34;&gt;第一章 导论&lt;/h1&gt;&#xA;&lt;h2 id=&#34;一什么是积极心理学&#34;&gt;一、什么是积极心理学&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;What is positive psychology？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;一积极心理学的宗旨&#34;&gt;（一）积极心理学的宗旨&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;构建象牙塔和大众的桥梁&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bridging Ivory Tower and Main Street&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The objective of positive psychology is to unite the rigor of academic research with the accessibility of the self-help movement.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;积极心理学的目标是把严谨的科学研究成果和新时代自助运动的通俗性有机地结合起来。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Positive psychology is to &lt;strong&gt;bridge the ivory tower and Main Street&lt;/strong&gt; —— bring the rigor， the substance， the empirical foundation， the science from academia and merge it with accessiblily of the self-help or New Age movementt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>结构体与对齐原则</title>
      <link>https://touchingfish.top/notes/struct-and-alignment-rule/</link>
      <pubDate>Sun, 12 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/struct-and-alignment-rule/</guid>
      <description>&lt;h2 id=&#34;结构体&#34;&gt;结构体&lt;/h2&gt;&#xA;&lt;p&gt;结构体（struct）是一种用户自定义的数据类型，它允许我们将不同类型的数据组合在一起形成一个整体，从而更好地表示复杂的数据。&lt;/p&gt;&#xA;&lt;p&gt;结构体是 C 语言中非常重要的一种数据类型，广泛应用于各种编程场景。&lt;/p&gt;&#xA;&lt;p&gt;声明和定义结构体时，需要在语句末尾添加分号（&amp;quot;;&amp;quot;）&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; student{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; num;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; name[&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; gender;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; age;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt; socre;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; addr[&lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&lt;span style=&#34;color:#75715e&#34;&gt;//语句末尾的分号（;）必不可少&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; student s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#ae81ff&#34;&gt;9001&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;M&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;98.9&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LA&amp;#34;&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; student sarr[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(i&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; i&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;; i&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;scanf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%d%s %c%d%f%s&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sarr[i].num,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sarr[i].name,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sarr[i].gender,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sarr[i].age,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sarr[i].socre,&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sarr[i].addr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%d %s %c %d %.2f %s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;,s.num,s.name,s.gender,s.age,s.socre,s.addr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(i&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;i&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;;i&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%d %s %c %d %.2f %s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;,sarr[i].num,sarr[i].name,sarr[i].gender,sarr[i].age,sarr[i].socre,sarr[i].addr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;结构体嵌套：&lt;/strong&gt; 结构体中可以嵌套其他结构体。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; Student&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; num;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; name[&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; Date&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; year;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; month;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; day;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }birthday;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; gender;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C 语言允许定义&lt;strong&gt;无类型名的结构类型&lt;/strong&gt; ，常用于内嵌的结构类型：&lt;/p&gt;</description>
    </item>
    <item>
      <title>字符串与字符数组</title>
      <link>https://touchingfish.top/notes/character-array/</link>
      <pubDate>Thu, 09 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/character-array/</guid>
      <description>&lt;p&gt;字符串是由一系列字符组成的字符数组，并以空字符 &lt;code&gt;&#39;\0&#39;&lt;/code&gt; 结尾。&lt;/p&gt;&#xA;&lt;p&gt;字符数组与字符串的概念在 C 语言中密不可分，是计算机处理文本时的基础。&lt;/p&gt;&#xA;&lt;h2 id=&#34;字符数组与字符串数组&#34;&gt;字符数组与字符串数组&lt;/h2&gt;&#xA;&lt;h3 id=&#34;字符数组&#34;&gt;字符数组&lt;/h3&gt;&#xA;&lt;p&gt;字符数组：一个存储字符的数组 &lt;code&gt;char str[6] = &amp;quot;hello&amp;quot;;&lt;/code&gt;，通常用于表示字符串。&lt;/p&gt;&#xA;&lt;p&gt;字符数组 &lt;code&gt;str&lt;/code&gt; 包含5个字符 &lt;code&gt;&#39;h&#39;&lt;/code&gt;, &lt;code&gt;&#39;e&#39;&lt;/code&gt;, &lt;code&gt;&#39;l&#39;&lt;/code&gt;, &lt;code&gt;&#39;l&#39;&lt;/code&gt;, &lt;code&gt;&#39;o&#39;&lt;/code&gt; 和一个隐含的结尾字符 &lt;code&gt;&#39;\0&#39;&lt;/code&gt;，表示字符串的结束。&lt;/p&gt;&#xA;&lt;p&gt;因此，字符数组初始化时，大小应比存储的字符串长读至少多一个字节。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; c[&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1234567890&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, c);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//输出结果为：123456789烫烫烫&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//表示此时赋值没有结束符，使用%s输出会在&amp;#39;\0&amp;#39;处停止&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;字符串数组&#34;&gt;字符串数组&lt;/h3&gt;&#xA;&lt;p&gt;包含多个字符串的数组。例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; names[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;][&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bob&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Charlie&amp;#34;&lt;/span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个 &lt;code&gt;names&lt;/code&gt; 数组包含三个字符串，每个字符串最多可以容纳 9 个字符（最后一个字符是 &lt;code&gt;&#39;\0&#39;&lt;/code&gt;）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;字符串的打印&#34;&gt;字符串的打印&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;printf&lt;/code&gt; 函数用于格式化输出字符串和字符。此时，&lt;strong&gt;使用 &lt;code&gt;%s&lt;/code&gt; 和 &lt;code&gt;%c&lt;/code&gt; 来打印字符串和字符有明显区别&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;%s&lt;/code&gt;：用于打印字符串，即一系列字符直到遇到 &lt;code&gt;&#39;\0&#39;&lt;/code&gt; 结束。例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; str[] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt;, str); &lt;span style=&#34;color:#75715e&#34;&gt;// 输出: hello&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;%c&lt;/code&gt;：用于打印单个字符。例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; ch &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%c&amp;#34;&lt;/span&gt;, ch); &lt;span style=&#34;color:#75715e&#34;&gt;// 输出: A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果使用 &lt;code&gt;%s&lt;/code&gt; 打印一个字符数组，程序会输出从该地址开始的所有字符，直到遇到 &lt;code&gt;&#39;\0&#39;&lt;/code&gt;。而使用 &lt;code&gt;%c&lt;/code&gt; 只会打印单个字符。&lt;/p&gt;</description>
    </item>
    <item>
      <title>数组与指针</title>
      <link>https://touchingfish.top/notes/array-and-pointer/</link>
      <pubDate>Sat, 04 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/array-and-pointer/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;数组和指针的关系：在 C 语言中，数组名其实是一个指针，指向数组的第一个元素。例如，如果你有一个数组 &lt;code&gt;int arr[10];&lt;/code&gt;，那么 &lt;code&gt;arr&lt;/code&gt; 实际上是指向 &lt;code&gt;arr[0]&lt;/code&gt; 的指针。这意味着你可以用指针来遍历数组，也可以通过指针操作数组元素。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;通过指针访问数组：当你理解了数组名是一个指针后，你就能明白为什么 &lt;code&gt;*(arr + 1)&lt;/code&gt; 等价于 &lt;code&gt;arr[1]&lt;/code&gt;。这个表达式的意思是“通过指针 &lt;code&gt;arr&lt;/code&gt;，向后移动一个位置，然后取该位置的值”。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;指针的灵活性：数组在定义时大小是固定的，而指针则更为灵活，可以指向任何内存位置。这使得你在处理数据时，能够更灵活地进行操作，例如动态分配内存或处理不同类型的数据结构。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;内存理解：通过理解指针如何操作数组，你会对内存管理有更深入的认识。这在 C 语言中尤为重要，因为你需要手动管理内存，避免错误操作。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;把数组和指针放在一起学习，有助于更深入地理解两者的工作原理，可以更好地理解内存和数据访问的底层机制，让编程更加高效和可靠。&lt;/p&gt;&#xA;&lt;h2 id=&#34;数组&#34;&gt;数组&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;具有相同的数据类型&lt;/li&gt;&#xA;&lt;li&gt;使用过程中需要保留原始数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;一维数组&#34;&gt;一维数组&lt;/h3&gt;&#xA;&lt;p&gt;数组初始化中的常量表达式：&lt;strong&gt;数组名 [常量表达式]&lt;/strong&gt;（通常为常量，或宏定义的符号常量）表示数组的大小，这是因为&lt;strong&gt;一个函数的函数栈空间大小是固定的&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;数组元素的引用方式是 &lt;strong&gt;数组名 [下标]&lt;/strong&gt;（从 0 开始）访问数组中的数据&lt;/p&gt;&#xA;&lt;h4 id=&#34;数组在内存中的存放&#34;&gt;数组在内存中的存放&lt;/h4&gt;&#xA;&lt;p&gt;数组存放在一块连续的内存中，元素间的地址根据其数据类型所占字节数决定。&lt;/p&gt;&#xA;&lt;h4 id=&#34;访问越界-out-of-bounds-access&#34;&gt;访问越界 (Out-of-Bounds Access)&lt;/h4&gt;&#xA;&lt;p&gt;C 语言的内存管理：先定义的变量在高地址，后定义的变量在低地址。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// 定义一个整数变量 i，并赋值为 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;}; &lt;span style=&#34;color:#75715e&#34;&gt;// 定义一个大小为 3 的整数数组&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Before out-of-bounds access:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;i = %d&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, i);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;arr[0] = %d, arr[1] = %d, arr[2] = %d&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 访问数组的第 4 个元素（越界访问）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;After out-of-bounds access:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;i = %d&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, i); &lt;span style=&#34;color:#75715e&#34;&gt;// 查看 i 的值是否被改变&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;arr[0] = %d, arr[1] = %d, arr[2] = %d&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;], arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], arr[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当访问越界发生时，新定义的数组元素可能覆盖了先定义的变量&lt;code&gt;i&lt;/code&gt;的地址（高地址），&lt;code&gt;i&lt;/code&gt;的值（该地址中的值）发生改变。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从源代码到可执行程序</title>
      <link>https://touchingfish.top/notes/journey-to-c-language/</link>
      <pubDate>Wed, 01 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/journey-to-c-language/</guid>
      <description>&lt;p&gt;编程是和计算机对话的过程。我们按照计算机能理解的方式，用抽象的编程语言来描述算法和逻辑，给计算机下达指令，让它完成工作。&lt;/p&gt;&#xA;&lt;p&gt;在 C 语言的程序开发过程中，预处理、编译和汇编是将源代码转化为可执行程序的几个关键阶段。理解它们之间的关系有助于更好地理解C语言的编译过程。下面将详细介绍这几个阶段的作用及其相互关系。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预处理&#34;&gt;预处理&lt;/h2&gt;&#xA;&lt;p&gt;预处理（Preprocessing）是 C 语言编译过程中的第一个阶段。在这个阶段，C 编译器的预处理器（Preprocessor）处理代码中的预处理指令，如 &lt;code&gt;#include&lt;/code&gt;、&lt;code&gt;#define&lt;/code&gt;、&lt;code&gt;#ifdef&lt;/code&gt; 等。这些指令通常用来管理宏定义、文件包含、条件编译等。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;宏替换：将所有定义的宏替换为相应的代码。例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define PI 3.14&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在程序中所有出现 &lt;code&gt;PI&lt;/code&gt; 的地方，都会被替换为 &lt;code&gt;3.14&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;文件包含：将 &lt;code&gt;#include&lt;/code&gt; 指定的头文件内容插入到当前文件中。例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;会将 &lt;code&gt;stdio.h&lt;/code&gt; 文件的内容包含到当前源文件中。在一段代码中，通常会在首行引用头文件，指令告诉 &lt;code&gt;CPP&lt;/code&gt; 从系统库中获取 &lt;code&gt;stdio.h&lt;/code&gt;，并拷贝其中的文本到当前的源文件里。（&lt;strong&gt;乱用头文件会影响编译的效率&lt;/strong&gt;）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;条件编译：根据条件判断是否编译某些代码段。例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ifdef DEBUG&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Debug mode&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endif&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;只有在定义了 &lt;code&gt;DEBUG&lt;/code&gt; 宏的情况下，&lt;code&gt;printf&lt;/code&gt; 语句才会被编译。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;预处理后的输出是一个扩展的源文件，其中所有的预处理指令都已经被处理和替换。这个文件将传递给编译器的下一阶段。&lt;/p&gt;&#xA;&lt;h2 id=&#34;编译&#34;&gt;编译&lt;/h2&gt;&#xA;&lt;p&gt;编译（Compilation）是将预处理后的 C 代码转换为汇编代码的过程。编译器会检查代码的语法和结构，优化代码，并生成汇编代码。&lt;/p&gt;&#xA;&lt;p&gt;在这个阶段，编译器会执行以下操作：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;语法分析：检查代码的语法是否正确，确保符合C语言的语法规则。&lt;/li&gt;&#xA;&lt;li&gt;语义分析：检查代码的语义是否合理，例如变量类型的正确性、函数调用的合法性等。&lt;/li&gt;&#xA;&lt;li&gt;优化：编译器可能会对代码进行优化，以提高生成代码的运行效率。&lt;/li&gt;&#xA;&lt;li&gt;生成汇编代码：将C语言的代码转换为特定硬件架构的汇编语言。例如，&lt;code&gt;gcc&lt;/code&gt; 编译器将生成 &lt;code&gt;.s&lt;/code&gt; 文件（包含汇编代码）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;汇编代码是一种低级语言，更接近机器代码，但仍然是人类可读的（如 &lt;code&gt;MOV&lt;/code&gt;, &lt;code&gt;ADD&lt;/code&gt; 等指令）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;汇编&#34;&gt;汇编&lt;/h2&gt;&#xA;&lt;p&gt;汇编（Assembly）是将汇编代码转换为机器代码的过程。在这个阶段，汇编器（Assembler）会将汇编代码翻译成目标机器的二进制指令，这些指令可以直接在处理器上执行。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;生成目标文件：汇编器将生成一个目标文件（通常是 &lt;code&gt;.o&lt;/code&gt; 或 &lt;code&gt;.obj&lt;/code&gt; 文件），它包含了机器代码以及一些调试和链接信息。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;目标文件最终会被打包成可执行文件（例如 &lt;code&gt;.exe&lt;/code&gt; 文件），可以直接在计算机上运行。&lt;/p&gt;&#xA;&lt;h2 id=&#34;关系与流程&#34;&gt;关系与流程&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;预处理是编译的第一步，处理宏、头文件等预处理指令，生成一个纯C语言的源代码文件。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;编译阶段将预处理后的源代码翻译为汇编代码，这个过程中包括了语法检查、优化等重要步骤。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;汇编阶段将汇编代码转换为机器代码，生成目标文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C语言程序设计基础</title>
      <link>https://touchingfish.top/notes/c-programming-fundamental/</link>
      <pubDate>Sun, 29 Mar 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/c-programming-fundamental/</guid>
      <description>&lt;p&gt;在程序设计中，&lt;strong&gt;基本数据类型&lt;/strong&gt;决定了变量可以存储的值和可执行的操作。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;运算符与表达式&lt;/strong&gt;用于执行各种计算和逻辑操作，如加减乘除、比较和逻辑运算，是编写有效程序的核心。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;选择和循环结构&lt;/strong&gt;控制程序流程，通过条件判断和重复执行代码块，实现复杂的逻辑和功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本数据类型&#34;&gt;基本数据类型&lt;/h2&gt;&#xA;&lt;p&gt;C 语言的数据类型包括：基本类型（整型、浮点型、字符型等）、构造类型（数组、结构体）、指针类型、空类型。&lt;/p&gt;&#xA;&lt;h3 id=&#34;整型&#34;&gt;整型&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;int&lt;/code&gt; 4 字节&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;short&lt;/code&gt; 2 字节&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;long&lt;/code&gt; 4 字节（Windows 32位/64位）、8 字节（Linux 64位）&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;-&lt;/th&gt;&#xA;          &lt;th&gt;ILP32&lt;/th&gt;&#xA;          &lt;th&gt;LP64&lt;/th&gt;&#xA;          &lt;th&gt;LLP64&lt;/th&gt;&#xA;          &lt;th&gt;ILP64&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;char&lt;/td&gt;&#xA;          &lt;td&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;8&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;short&lt;/td&gt;&#xA;          &lt;td&gt;16&lt;/td&gt;&#xA;          &lt;td&gt;16&lt;/td&gt;&#xA;          &lt;td&gt;16&lt;/td&gt;&#xA;          &lt;td&gt;16&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;int&lt;/td&gt;&#xA;          &lt;td&gt;32&lt;/td&gt;&#xA;          &lt;td&gt;32&lt;/td&gt;&#xA;          &lt;td&gt;32&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;long&lt;/td&gt;&#xA;          &lt;td&gt;32&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;          &lt;td&gt;32&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;long long&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;void *&lt;/td&gt;&#xA;          &lt;td&gt;32&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;          &lt;td&gt;64&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;数据模型命名规则&lt;/strong&gt;：&lt;code&gt;I&lt;/code&gt;=int，&lt;code&gt;L&lt;/code&gt;=long，&lt;code&gt;P&lt;/code&gt;=pointer，数字表示位数。ILP32 表示 int/long/pointer 均为 32 位；LP64 表示 long/pointer 为 64 位；LLP64 表示 long long/pointer 为 64 位；ILP64 表示 int/long/pointer 均为 64 位。&lt;/p&gt;</description>
    </item>
    <item>
      <title>生物序列数据的机器学习预处理</title>
      <link>https://touchingfish.top/notes/preprocess-bioseq/</link>
      <pubDate>Fri, 24 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/preprocess-bioseq/</guid>
      <description>&lt;p&gt;随着生物信息学的快速发展，DNA 序列数据呈爆炸式增长。这些序列蕴含着丰富的生物学信息。然而，对一些处理数值数据的机器学习模型来说，原始的 DNA 序列是一串字符，无法直接作为输入。因此，将 DNA 序列转化为机器学习模型能够理解的数值矩阵形式成为一个关键步骤。&lt;/p&gt;&#xA;&lt;p&gt;本案例以识别 &lt;em&gt;E.Coli&lt;/em&gt; 启动子序列的二分类器来介绍转换序列数据的一种简单方式。&lt;/p&gt;&#xA;&lt;h2 id=&#34;数据预览&#34;&gt;数据预览&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; pandas &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; pd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://archive.ics.uci.edu/ml/machine-learning-databases/molecular-biology/promoter-gene-sequences/promoters.data&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;names &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Class&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Sequence&amp;#39;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_csv(url, names &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; names)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;iloc[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;head)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Class                                                       +&#xA;id                                                        S10&#xA;Sequence    \t\ttactagcaatacgcttgcgttcggtggttaagtatgtataat...&#xA;Name: 0, dtype: object&#xA;&#xA; &amp;lt;bound method NDFrame.head of     Class         id                                           Sequence&#xA;0       +        S10  \t\ttactagcaatacgcttgcgttcggtggttaagtatgtataat...&#xA;1       +       AMPC  \t\ttgctatcctgacagttgtcacgctgattggtgtcgttacaat...&#xA;2       +       AROH  \t\tgtactagagaactagtgcattagcttatttttttgttatcat...&#xA;3       +      DEOP2  \taattgtgatgtgtatcgaagtgtgttgcggagtagatgttagaa...&#xA;4       +  LEU1_TRNA  \ttcgataattaactattgacgaaaagctgaaaaccactagaatgc...&#xA;..    ...        ...                                                ...&#xA;101     -        799  \t\tcctcaatggcctctaaacgggtcttgaggggttttttgctga...&#xA;102     -        987  \t\tgtattctcaacaagattaaccgacagattcaatctcgtggat...&#xA;103     -       1226  \t\tcgcgactacgatgagatgcctgagtgcttccgttactggatt...&#xA;104     -        794  \t\tctcgtcctcaatggcctctaaacgggtcttgaggggtttttt...&#xA;105     -       1442  \t\ttaacattaataaataaggaggctctaatggcactcattagcc...&#xA;&#xA;[106 rows x 3 columns]&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;序列的提取与分割&#34;&gt;序列的提取与分割&lt;/h2&gt;&#xA;&lt;p&gt;DataFrame 是由多个 Series 组成的，每个 Series 代表 DataFrame 的一列。&lt;/p&gt;</description>
    </item>
    <item>
      <title>sklearn 机器学习检测乳腺癌肿瘤性质</title>
      <link>https://touchingfish.top/notes/brca-detection-with-sklearn/</link>
      <pubDate>Tue, 21 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/brca-detection-with-sklearn/</guid>
      <description>&lt;p&gt;本文记录 sklearn 入门练习：使用机器学习算法处理乳腺癌检测问题。根据患者的细胞特征数据，建立模型来判断肿瘤性质（良性或恶性）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;数据的载入与预处理&#34;&gt;数据的载入与预处理&lt;/h2&gt;&#xA;&lt;p&gt;使用经典的威斯康星州乳腺癌数据集，包含结块厚度、细胞大小、形状均匀性、边缘黏附力等特征。&lt;/p&gt;&#xA;&lt;p&gt;对数据进行预处理后，输入到机器学习模型进行训练和预测。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; pandas &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; pd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; pandas.plotting &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; scatter_matrix&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; matplotlib.pyplot &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; plt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 案例使用 Python2 和 0.19.1 的 sklearn，如今在 API 的调用上已经有许多不同之处&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# from sklearn import preprocessing, cross_validation&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 更新&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; sklearn &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; preprocessing, model_selection&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; sklearn.neighbors &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; KNeighborsClassifier&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; sklearn.svm &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; SVC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; sklearn.metrics &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; classification_report&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; sklearn.metrics &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; accuracy_score&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 载入数据集&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;names &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;clump_thickness&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;uniform_cell_size&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;uniform_cell_shape&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;marginal_adhesion&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;single_epithelial_size&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bare_nuclei&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bland_chromatin&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;normal_nucleoli&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mitoses&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_csv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;data.csv&amp;#39;&lt;/span&gt;, names&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;names)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;数据预处理不复杂，主要就是清洗和划分数据集。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 数据清洗&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## 替换缺失数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;replace(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;?&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;99999&lt;/span&gt;, inplace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## 删除无关特征&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;drop([&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;], axis&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, inplace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## 检查数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(df&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;loc[&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;## 查看维度&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(df&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;shape)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 描述性统计&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(df&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;describe())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;</description>
    </item>
    <item>
      <title>动态规划的智慧（Needleman-Wunsch）</title>
      <link>https://touchingfish.top/notes/needleman-wunsch/</link>
      <pubDate>Sat, 12 May 2018 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/needleman-wunsch/</guid>
      <description>&lt;p&gt;当我们谈论序列比对（sequence alignment）时，实际上是在解决一个经典问题：如何将两段序列尽可能“对齐”，以揭示它们之间的相似性？这其中既有科学家的生物学直觉，也离不开精妙的算法设计。今天，让我们聚焦于比对算法的基础，并用一个直观的例子，深入了解Needleman-Wunsch算法这颗动态规划中的明珠，将矩阵的分值转化为真正的比对结果.&lt;/p&gt;&#xA;&lt;h2 id=&#34;从字符到序列的最佳对齐&#34;&gt;从字符到序列的最佳对齐&lt;/h2&gt;&#xA;&lt;p&gt;在进行序列比对时，我们通常需要回答以下三个问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;序列间的相似性如何量化？（使用打分矩阵定义匹配、错配和缺口的得分）&lt;/li&gt;&#xA;&lt;li&gt;什么是最佳比对？（得分最高的对齐方式）&lt;/li&gt;&#xA;&lt;li&gt;如何有效找到最佳比对？（算法）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;比对算法就是解决第3个问题的核心工具。对短序列，可以尝试列举所有可能的对齐方式，但随着序列变长，这种暴力方法的计算量会呈指数增长，显然无法处理实际问题。Needleman-Wunsch算法的提出，完美解决了这一难题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;将大问题拆解为小问题&#34;&gt;将大问题拆解为小问题&lt;/h2&gt;&#xA;&lt;p&gt;动态规划的核心思想是“化整为零”：将一个复杂问题分解为许多小问题，通过解决这些小问题，逐步得出大问题的答案。&lt;/p&gt;&#xA;&lt;p&gt;在Needleman-Wunsch算法中，序列比对的问题被表示为一个比对表（矩阵）。我们通过“填表”的方式，逐步找出最佳比对。&lt;/p&gt;&#xA;&lt;h3 id=&#34;needleman-wunsch算法的步骤一步步填出比对表&#34;&gt;Needleman-Wunsch算法的步骤：一步步填出比对表&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Step 1: 初始化比对表&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;假设我们有两段DNA序列： Sequence1：&lt;code&gt;GATTUACA&lt;/code&gt; 和 Sequence2：&lt;code&gt;GCATTACG&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我们建立一个比对表，行对应 Sequence1（纵向排列），列对应 Sequence2（横向排列）。&lt;/p&gt;&#xA;&lt;p&gt;为了允许“缺口”（gap），第一行和第一列按缺口得分初始化。例如，假设缺口惩罚为-2，初始化如下：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th&gt;-&lt;/th&gt;&#xA;          &lt;th&gt;G&lt;/th&gt;&#xA;          &lt;th&gt;C&lt;/th&gt;&#xA;          &lt;th&gt;A&lt;/th&gt;&#xA;          &lt;th&gt;T&lt;/th&gt;&#xA;          &lt;th&gt;T&lt;/th&gt;&#xA;          &lt;th&gt;A&lt;/th&gt;&#xA;          &lt;th&gt;C&lt;/th&gt;&#xA;          &lt;th&gt;G&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;-&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;-8&lt;/td&gt;&#xA;          &lt;td&gt;-10&lt;/td&gt;&#xA;          &lt;td&gt;-12&lt;/td&gt;&#xA;          &lt;td&gt;-14&lt;/td&gt;&#xA;          &lt;td&gt;-16&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;G&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;T&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;T&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-8&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;U&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-10&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-12&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-14&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;-16&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;Step 2: 填充比对表&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>生物学相似性的追寻</title>
      <link>https://touchingfish.top/notes/sequence-similarity/</link>
      <pubDate>Tue, 24 Apr 2018 00:00:00 +0000</pubDate>
      <guid>https://touchingfish.top/notes/sequence-similarity/</guid>
      <description>&lt;p&gt;在我们身体里，存在着肉眼看不见的&amp;quot;生命代码&amp;quot;——DNA、RNA和蛋白质序列。它们由四种碱基或二十种氨基酸排列而成，看似是简单的字符串，却记录着生命的全部奥秘。&lt;/p&gt;&#xA;&lt;h2 id=&#34;生命代码的两大主角&#34;&gt;生命代码的两大主角&lt;/h2&gt;&#xA;&lt;p&gt;要比对生命序列，首先得搞清楚它们长什么样。DNA序列由A（腺嘌呤）、T（胸腺嘧啶）、C（胞嘧啶）、G（鸟嘌呤）四种碱基组成。RNA将T换成了U（尿嘧啶）。蛋白质序列更为复杂，由20种氨基酸用单字母表示，比如A是丙氨酸，L是亮氨酸。这些字符的排列顺序决定了基因的功能——就像词序决定了句子的意义。&lt;/p&gt;&#xA;&lt;h2 id=&#34;序列比对的基本概念&#34;&gt;序列比对的基本概念&lt;/h2&gt;&#xA;&lt;p&gt;拿到一段陌生的DNA序列，想知道它的作用？最直接的方法是序列比对（sequence alignment）——把它与已知序列对齐，看看两段序列&amp;quot;像不像&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;相似性背后可能藏着共同的祖先、相似的功能，或进化的痕迹。如果能在已知序列中找到&amp;quot;亲戚&amp;quot;，往往就能推断出它的功能。&lt;/p&gt;&#xA;&lt;p&gt;两段序列相似，究竟有多相似？科学家用一套打分体系来量化：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;匹配得分&lt;/strong&gt;：两个位置的字符相同，得分。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;错配惩罚&lt;/strong&gt;：字符不同，扣分。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;缺口惩罚&lt;/strong&gt;：需要插入&amp;quot;空白&amp;quot;（gap）对齐时，扣更多分。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;相似度（similarity）指的是两个序列在对应位置上，匹配字符的数目占总长度的百分比。例如两条序列经过比对后：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sequence1: &lt;code&gt;C V H K A T&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Sequence2: &lt;code&gt;C I H K - T&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;有4处一致，1处相似，1处缺口。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;identity = (4/6)*100% = 67%&lt;/li&gt;&#xA;&lt;li&gt;similarity = (4+1/6)*100% = 83%&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这套评分系统，让科学家能够快速评估比对结果的优劣。&lt;/p&gt;&#xA;&lt;h2 id=&#34;打分矩阵的必要性&#34;&gt;打分矩阵的必要性&lt;/h2&gt;&#xA;&lt;p&gt;如果说序列比对是解读生命密码的艺术，打分矩阵（scoring matrix）就是它的调色盘。比对比的不仅是字符是否&amp;quot;对得上&amp;quot;，还需要考虑生物学意义——哪些替换是自然界常见的？哪些匹配最能反映进化关系？&lt;/p&gt;&#xA;&lt;p&gt;序列比对中的&amp;quot;相似性&amp;quot;并非一概而论。以蛋白质为例，氨基酸的化学性质、功能、结构对其进化替换的频率有重要影响。比如，亮氨酸（L）替换为异亮氨酸（I）相对常见，因为都是疏水性氨基酸。而亮氨酸被替换为带正电的赖氨酸（K）就很少发生，可能破坏蛋白质功能。&lt;/p&gt;&#xA;&lt;p&gt;打分矩阵的任务，正是为这些替换赋予合适的分值，使比对结果既符合生物学事实，又有助于后续分析。&lt;/p&gt;&#xA;&lt;h2 id=&#34;常用的打分矩阵&#34;&gt;常用的打分矩阵&lt;/h2&gt;&#xA;&lt;h3 id=&#34;pam矩阵&#34;&gt;PAM矩阵&lt;/h3&gt;&#xA;&lt;p&gt;PAM（Point Accepted Mutation）矩阵是最早的蛋白质打分矩阵之一。它以&amp;quot;单位进化时间&amp;quot;为基础——1 PAM相当于每100个氨基酸中约有1个发生了可接受的突变。PAM1自乘n次可以得到PAM-n，表示发生了更多次突变。&lt;/p&gt;&#xA;&lt;p&gt;PAM矩阵的核心思想是：通过研究近亲物种的蛋白质序列，推测不同氨基酸在进化中的替换频率。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PAM1：适用于非常相似的序列。&lt;/li&gt;&#xA;&lt;li&gt;PAM250：适用于亲缘关系较远的序列。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;PAM矩阵像一台时间机器，帮我们回溯序列在进化中的替换轨迹。随着PAM数值增加，比对倾向于寻找远亲关系。&lt;/p&gt;&#xA;&lt;h3 id=&#34;blosum矩阵&#34;&gt;BLOSUM矩阵&lt;/h3&gt;&#xA;&lt;p&gt;BLOSUM（BLOcks SUbstitution Matrix）矩阵更关注当前的序列相似性，尤其适用于远亲序列的比对。它通过分析保守序列区块（blocks）中的氨基酸替换频率得出得分。&lt;/p&gt;&#xA;&lt;p&gt;与PAM不同，BLOSUM不假设进化模型，而是基于实际观测数据生成。BLOSUM编号代表该矩阵由一致度≥该数值的序列计算而来。例如BLOSUM62是由一致度≥62%的序列计算得出。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BLOSUM62：最常用，适用于大多数情况。&lt;/li&gt;&#xA;&lt;li&gt;BLOSUM80：更适合相似性较高的序列。&lt;/li&gt;&#xA;&lt;li&gt;BLOSUM45：适合亲缘关系更远的序列。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;简单说，BLOSUM后面数字越小，适合比较的序列相似度越低；数字越大，适合比较的序列相似度越高。&lt;/p&gt;&#xA;&lt;h3 id=&#34;选择矩阵的原则&#34;&gt;选择矩阵的原则&lt;/h3&gt;&#xA;&lt;p&gt;如何选择合适的矩阵？关键在于序列的&amp;quot;亲疏&amp;quot;。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;相似序列（近亲）：选择细致的矩阵，如PAM1或BLOSUM80，强调微小差异。&lt;/li&gt;&#xA;&lt;li&gt;差异较大序列（远亲）：选择更粗略的矩阵，如PAM250或BLOSUM45，允许更多替换。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这一选择直接影响比对结果的敏感性与特异性。近亲需要精确，远亲需要包容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何解读打分矩阵&#34;&gt;如何解读打分矩阵&lt;/h2&gt;&#xA;&lt;p&gt;下表为PAM-250矩阵，对角线上的数值为匹配氨基酸的得分。在其他位置上，≥0的得分代表对应的一对氨基酸为相似氨基酸，&amp;lt;0的是不相似的氨基酸。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th&gt;A&lt;/th&gt;&#xA;          &lt;th&gt;B&lt;/th&gt;&#xA;          &lt;th&gt;C&lt;/th&gt;&#xA;          &lt;th&gt;D&lt;/th&gt;&#xA;          &lt;th&gt;E&lt;/th&gt;&#xA;          &lt;th&gt;F&lt;/th&gt;&#xA;          &lt;th&gt;G&lt;/th&gt;&#xA;          &lt;th&gt;H&lt;/th&gt;&#xA;          &lt;th&gt;I&lt;/th&gt;&#xA;          &lt;th&gt;K&lt;/th&gt;&#xA;          &lt;th&gt;L&lt;/th&gt;&#xA;          &lt;th&gt;M&lt;/th&gt;&#xA;          &lt;th&gt;N&lt;/th&gt;&#xA;          &lt;th&gt;P&lt;/th&gt;&#xA;          &lt;th&gt;Q&lt;/th&gt;&#xA;          &lt;th&gt;R&lt;/th&gt;&#xA;          &lt;th&gt;S&lt;/th&gt;&#xA;          &lt;th&gt;T&lt;/th&gt;&#xA;          &lt;th&gt;U&lt;/th&gt;&#xA;          &lt;th&gt;V&lt;/th&gt;&#xA;          &lt;th&gt;W&lt;/th&gt;&#xA;          &lt;th&gt;X&lt;/th&gt;&#xA;          &lt;th&gt;Y&lt;/th&gt;&#xA;          &lt;th&gt;Z&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;A&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;B&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;12&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;D&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;E&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;F&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;9&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;G&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;H&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;I&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;K&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;L&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;M&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;N&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;P&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Q&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;R&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;S&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;T&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;U&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;V&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;W&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;-8&lt;/td&gt;&#xA;          &lt;td&gt;-7&lt;/td&gt;&#xA;          &lt;td&gt;-7&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-7&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;17&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;X&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Y&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;7&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Z&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;-6&lt;/td&gt;&#xA;          &lt;td&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;打分矩阵的表格看似复杂，但很直观：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
