E-value 與未測量干擾的敏感度分析
E-value 回答一個很窄的問題:一個沒被測量到的干擾因子,要同時跟暴露與結果關聯到多強,才足以把觀察到的關聯完全解釋掉。這一頁講它的公式與等高線幾何、為什麼點估計與信賴區間要各報一個、HR 與 OR 為什麼一定要先換成 RR,以及一個大的 E-value 為什麼不等於「沒有未測量干擾」。
這一頁在解決什麼問題
你會撞到 E-value 的時機通常有兩個。
第一個是讀論文。一篇資料庫研究報了某個關聯,Discussion 最後一段寫著「we calculated an E-value of 1.9」,然後就沒有下文了。這個數字是大是小?它到底在保證什麼?不知道的話, 那句話就只是一個看起來很專業的裝飾。
第二個是被審。台灣的健保資料庫(NHIRD)論文投出去,最高頻的 reviewer comment 之一就是 「請補未測量干擾的敏感度分析」。這時候要的東西幾乎一定是 E-value——因為它便宜: 不需要額外資料、不需要驗證子樣本、三行程式就算得出來。
E-value 之所以存在,是因為觀察性研究有一個永遠關不掉的漏洞。 傾向分數配對與加權都只能處理 你有測量到的共變項;DAG 幫你想清楚該擋哪些後門路徑, 但擋不住一條你根本沒有變項可以擋的路。這件事不能靠更好的模型解決,只能誠實地量化。
E-value 的做法是把問題倒過來問:與其問「有沒有未測量干擾」,不如問「要多強的未測量干擾, 才足以把我看到的這個關聯整個解釋掉」。 前者無法回答,後者是一個算得出來的數字。
定義:偏誤因子與 E-value
假設有一個沒被測量到的干擾因子 。它有兩個關聯強度:
- :暴露組與非暴露組之間, 的盛行率比值(干擾因子與暴露的關聯)
- :在暴露固定的情況下, 對結果的相對風險(干擾因子與結果的關聯)
VanderWeele 與 Ding 證明了一件很漂亮的事:這兩個關聯能把觀察到的相對風險誇大的上限, 是一個只跟它們有關的閉合式,叫做偏誤因子(bias factor):
觀察到的相對風險 被完全解釋掉,意思就是 。把「兩個關聯一樣強」 這個條件代進去解,就得到 E-value:
小於 1(保護性關聯)時先取倒數再代入。這就是全部的數學了—— 所以這一頁不安裝任何套件,公式本身比套件的說明文件短。
等高線的幾何,比公式更值得記
把 這條式子解出 :
這是一條雙曲線,它有兩條漸近線:一條垂直的在 , 一條水平的在 。這兩條漸近線講的是同一件事,而且是整個方法最該記住的一句:
要解釋掉一個觀察到的關聯,那個未測量干擾因子與暴露的關聯、與結果的關聯, 兩者都必須大於觀察到的關聯本身。 只有其中一邊強是不夠的—— 不管另一邊拉到多大,曲線都只會無限逼近那條漸近線而永遠碰不到。
E-value 只是這條曲線上的一個特定點:兩個關聯相等的那一點,也就是曲線與對角線的交點。 選這一點不是因為它有什麼特殊的因果意義,而是因為它是曲線上「最省力」的組合—— 沿著曲線往任何一邊走,另一邊都得付出更多。所以 E-value 是一個下限: 任何能解釋掉這個關聯的干擾因子,至少有一邊要達到這個強度。
兩個 E-value,兩個不同的問題
點估計的 E-value 與信賴區間的 E-value 是兩個數字,兩個都要報。 它們問的不是同一件事:
- 點估計的 E-value 問:要多強的干擾,才能把效應量推回虛無值?
- 信賴區間那一端的 E-value 問:要多強的干擾,才能讓這個結果變得無法排除虛無值?
第二個才是「這個結果能不能被干擾推翻」的答案。理由跟 效應量那一頁講的是同一件事:一個點估計本身不承載不確定性, 要推翻一個結論,你不需要把點估計推到 1,只需要把區間推到碰得到 1。
算法:取信賴區間靠近虛無值那一端的界限,代進同一條公式。 區間本來就跨過虛無值時,答案是 1——不需要任何干擾,這批資料本來就與「沒有效果」相容。
只報點估計 E-value 是論文裡很常見的做法,而它一律讓結果看起來比實際更難推翻。 下面兩個例子分別示範這兩種情況。
第一步永遠是把效應量換成 RR
E-value 的公式吃的是相對風險。HR、OR 都不是 RR,直接丟進去會得到錯的答案, 而且錯的方向是固定的:偏大,也就是讓結果看起來更難被解釋掉。這是最常被跳過的一步。
風險比(hazard ratio, HR)有兩條路,選哪一條看結果罕不罕見。 結果罕見時,
直接用就好。結果不罕見時,要用 VanderWeele 的平方根式:
慣用的分界是事件比例 15%。
本頁例二的 blood_storage 有 47 件事件、287 個完整個案,
事件比例 16.4%,高於那條線,所以平方根式才是對的那一條。
勝算比(OR)是第三條公式,而且它需要一個 HR 那條路不需要的東西:
是未暴露組的基線風險。 時 RR 趨近 OR,這就是罕見結果近似; 而 OR 大於 1 時,任何 都會讓 RR 小於 OR。這個性質等一下在例一會變成一個關鍵的判斷。
例一:一個 case-control 的勝算比,兩個 E-value 差很多
例一沿用病例對照研究那一章的
datasets::infert:1 case : 2 controls, matched on age, parity and education,248 筆,
其中案例 83、對照 165。
暴露是人工流產史,結果是續發性不孕。該頁的條件邏輯迴歸(再校正自然流產次數)給出
| 來源 | 模型 | OR | 95% CI | p |
|---|---|---|---|---|
| D2-case-control-infert | conditional logistic regression + spontaneous abortions | 4.150 | 1.779–9.678 | < 0.001 |
為什麼這裡只能用罕見結果近似
要把這個 OR 換成 RR,公式需要基線風險 。而病例對照研究給不出這個數字—— 這件事本身就是這一頁的一個教學點。
樣本裡案例佔 33.5%,這個數字看起來很像一個風險,
但它是設計選出來的:案例對對照的比例是研究者訂的(這裡是 1 比 2),
換一個抽樣比例它就換一個值。拿它當 等於把設計參數當成母體風險,是憑空捏造資料。
stats 檔把這件事寫成兩個旗標——baselineRiskEstimable 是
false,
caseProportionIsNotP0 是 true,
就是為了讓後來重跑的人不會把那個比例撿起來用。
所以這裡採罕見結果近似,也就是 RR = OR。
選它不是因為方便,而是因為它最寬鬆:前面說過 OR 大於 1 時任何 都讓 RR 更小,
而 RR 更小 E-value 就更小。用 的極限,等於給出這批資料最大可辯護的 E-value。
如果連這個最大值都不足以說服人,換任何 都只會更糟。
要看這個假設值多少錢,把幾個假設性的 代進去就知道:
| 假設的 p0 | 換算出的 RR | 點估計的 E-value | 區間下界的 E-value |
|---|---|---|---|
| 1% | 4.02 | 7.51 | 2.93 |
| 5% | 3.59 | 6.63 | 2.82 |
| 10% | 3.16 | 5.76 | 2.69 |
| 20% | 2.55 | 4.53 | 2.45 |
兩個 E-value
罕見結果近似之下 RR 等於 OR,於是
- 點估計 4.150 的 E-value 是 7.77
- 區間下界 1.779 的 E-value 是 2.96
兩個都遠大於 1,而且彼此差很多。這正是為什麼兩個都要報: 要把點估計推回虛無值,需要一個與暴露、與結果的關聯都達到 7.77 的未測量干擾因子, 那是很強的東西;但要讓這個結果變得無法排除虛無值,只需要 2.96—— 不到一半。只報前面那個數字,讀者會對這個結果的穩固程度得到過度樂觀的印象。
figures/scripts/B6-07-e-value.R這張圖是 E-value 唯一真正說得清楚的呈現方式,因為它把「一個數字」還原成「一整條曲線」。 沿著紅線往右走, 越大所需要的 就越小,但永遠掉不到 4.150 以下——那條水平漸近線就是觀察到的 RR 本身。 往上走同理。所以讀者要判斷的其實不是「7.77 算不算大」, 而是「在這個臨床脈絡裡,有沒有哪一個沒被測量的變項,能在這條曲線上找得到位置」。
例二:同一份資料的每一個估計,區間 E-value 全部落在最低值
例二沿用 傾向分數配對與 IPTW
那兩頁的同一個世代(medicaldata::blood_storage,287 個完整個案、
47 件生化復發),把兩頁一共 7 個估計全部拿來算一次 E-value。
效應量是 HR,事件比例 16.4% 不算罕見,所以走平方根式。
| 估計 | 來源 | HR(95% CI) | 換算後 RR | 點估計 E-value | 區間 E-value |
|---|---|---|---|---|---|
| 未校正 Cox | B6-02 | 1.021(0.563–1.852) | 1.015 | 1.14 | 1.00 |
| 多變項校正 Cox | B6-02 | 1.270(0.672–2.399) | 1.180 | 1.64 | 1.00 |
| PSM 1:1(caliper、穩健變異數) | B6-02 | 1.020(0.514–2.027) | 1.014 | 1.13 | 1.00 |
| PSM 1:2(caliper 0.2 SD) | B6-02 | 0.835(0.400–1.741) | 0.882 | 1.52 | 1.00 |
| IPTW,ATE | B6-03 | 1.070(0.589–1.945) | 1.048 | 1.27 | 1.00 |
| IPTW,ATT | B6-03 | 1.203(0.656–2.206) | 1.136 | 1.53 | 1.00 |
| Overlap 權重,ATO | B6-03 | 1.133(0.622–2.065) | 1.090 | 1.40 | 1.00 |
最後一欄整欄都是 1.00。
figures/scripts/B6-07-e-value.R這張圖把兩個例子放在同一條曲線上,於是「大或小」變成看得到的位置關係。 它也順便解釋了 E-value 的一個性質:曲線在虛無值附近很陡。 觀察到的 RR 從 1 動一點點,E-value 就已經明顯大於 1—— 所以一個看起來「大於 1 蠻多」的 E-value,對應的觀察關聯其實可能很弱。 3.41 這個 E-value 對應的觀察 RR 只有 2; E-value 要到 5.45,觀察 RR 才是 3。
跳過轉換會膨脹 E-value,而且是量化得出來的
把 HR 直接當成 RR 丟進公式,會得到什麼:
| 估計 | 先換成 RR(正確) | 直接把 HR 當 RR | 膨脹 |
|---|---|---|---|
| IPTW,ATE(B6-03 的主要估計) | 1.27 | 1.34 | +0.07 |
| IPTW,ATT(離虛無值最遠的那個) | 1.53 | 1.70 | +0.17 |
差距的方向是固定的:跳過轉換一律讓 E-value 變大,也就是讓結果看起來更難被推翻。 在這個例子裡幅度不大,因為 HR 本來就離 1 不遠;HR 離虛無值越遠、結果越常見,這個誤差越大。
審稿或讀論文時可以直接問的一句話是:「這個 E-value 是從什麼效應量算的, 中間有沒有換成 RR?」 論文只報 HR 與一個 E-value、Methods 完全沒提轉換的, 多半就是跳過了。
怎麼算
# --- E-value 本體 -----------------------------------------------------------
evalue_rr <- function(rr) {
r <- if (rr < 1) 1 / rr else rr # 保護性關聯先取倒數
r + sqrt(r * (r - 1))
}
# 信賴區間裡「靠近虛無值」的那一端。區間跨過 1 時答案就是 1:
# 不需要任何干擾,資料本來就與虛無值相容。
evalue_ci <- function(lo, hi) {
if (lo <= 1 && hi >= 1) return(1)
if (lo > 1) evalue_rr(lo) else evalue_rr(hi)
}
# --- 先把效應量換成 RR ------------------------------------------------------
hr_to_rr_rare <- function(hr) hr # 結果罕見
hr_to_rr_common <- function(hr) (1 - 0.5^sqrt(hr)) / (1 - 0.5^sqrt(1 / hr))
or_to_rr <- function(or, p0) or / (1 - p0 + p0 * or) # p0 = 未暴露組基線風險
# --- 等高線:解釋掉 rr 所需要的 (RR_EU, RR_UD) 組合 -------------------------
bias_factor <- function(x, y) x * y / (x + y - 1)
contour_y <- function(x, rr) rr * (x - 1) / (x - rr) # 漸近線在 x = rr 與 y = rr
# --- 套用在 IPTW 的 ATE 上 --------------------------------------------------
# 這三個數字沿用 B6-03 的輸出(本頁 stats 檔的 primary.hr / hrLcl / hrUcl),
# 直接打在這裡是為了讓這段能單獨跑;頁面上顯示的值由建置時插入,
# 所以 B6-03 一重跑,你在這裡看到的數字會跟著換。
hr <- 1.070253; lo <- 0.589014; hi <- 1.944676
rr <- hr_to_rr_common(hr) # 事件比例 > 0.15,走平方根式
c(point = evalue_rr(rr),
ci = evalue_ci(hr_to_rr_common(lo), hr_to_rr_common(hi)))驗證環境:R 4.6.0 + jsonlite 2.0.0。E-value 是閉合公式,本頁刻意手寫而不裝套件(VanderWeele 的 EValue 套件提供同樣的計算與 bias plot,用它沒有問題,但手算一次才看得見公式在做什麼)。
import math
def evalue_rr(rr: float) -> float:
r = 1 / rr if rr < 1 else rr # 保護性關聯先取倒數
return r + math.sqrt(r * (r - 1))
def evalue_ci(lo: float, hi: float) -> float:
if lo <= 1 <= hi: # 區間跨過虛無值
return 1.0
return evalue_rr(lo) if lo > 1 else evalue_rr(hi)
def hr_to_rr_common(hr: float) -> float:
return (1 - 0.5 ** math.sqrt(hr)) / (1 - 0.5 ** math.sqrt(1 / hr))
def or_to_rr(odds_ratio: float, p0: float) -> float:
return odds_ratio / (1 - p0 + p0 * odds_ratio)
# 與上面 R 版本相同的三個數字(本頁 stats 檔的 primary.hr / hrLcl / hrUcl)。
hr, lo, hi = 1.070253, 0.589014, 1.944676
rr = hr_to_rr_common(hr)
print(evalue_rr(rr), evalue_ci(hr_to_rr_common(lo), hr_to_rr_common(hi)))純標準函式庫就夠,不需要 numpy 或 statsmodels。Python 生態沒有對應 R EValue 套件的通行實作,不過整個東西一共只有四個函式。本頁報的數字全部來自 R。
怎麼判斷一個報出來的 E-value 是大是小
論文裡那句「we calculated an E-value of 1.9」要能被評價,讀者得問四個問題:
- 它是從哪個效應量算的,有沒有換成 RR? 沒交代就當它沒換,數字要往下打折。
- 點估計與區間各報了沒? 只報一個,而且那個是點估計,就是把結論說得比資料硬。
- 拿什麼當比較基準? E-value 本身沒有大小的刻度。有意義的做法是拿這個研究已經測量到的 共變項當尺——如果模型裡最強的那個已知風險因子,關聯強度都還沒到 E-value, 那麼要相信有一個沒被測到的東西比它更強,就需要理由。反過來, 一個 E-value 低於好幾個已知共變項強度的研究,等於自己承認很脆弱。
- 這個關聯本來就多強? E-value 是 RR 的函數,不是額外的證據。 看到 3.41,觀察 RR 就是 2;看到 5.45,觀察 RR 是 3。 E-value 沒有給出任何 RR 以外的資訊,它只是換一個尺度把同一件事說得比較好懂。
第 4 點值得多說一句:既然 E-value 是 RR 的單調函數,那它在數學上不含新資訊。 它的價值全部在溝通——它把「殘餘干擾」這個抽象的擔憂,翻譯成一個可以跟臨床知識對照的數字。 把它當成新證據來用,就是誤用。
常見誤用
| 誤用 | 為什麼錯 |
|---|---|
| 把 HR 或 OR 直接丟進 E-value 公式 | 公式吃 RR。跳過轉換一律讓 E-value 偏大,也就是讓結果看起來更難推翻 |
| 用平方根式處理罕見結果、或用 RR = HR 處理常見結果 | 兩條路的適用條件相反,選錯一條就是選錯方向 |
| 拿病例對照研究的案例比例當基線風險 | 那個比例是抽樣設計訂的,不是任何母體的風險 |
| 只報點估計的 E-value | 推翻一個結論不需要把點估計推到虛無值,只需要把區間推到碰得到 |
| 區間 E-value 等於 1 卻寫成「結果不易被干擾推翻」 | 方向相反。那代表零強度的干擾就足夠,因為區間本來就涵蓋虛無值 |
| 說「E-value 很大,所以沒有未測量干擾」 | E-value 是門檻不是檢定。它說要多強才夠,不說有沒有那麼強的東西 |
| 用 E-value 回應選擇偏誤或測量誤差的質疑 | 公式只涵蓋未測量干擾,其他偏誤要別的量化偏誤分析工具 |
| 把 E-value 拿來比較兩個不同研究的可信度 | 它是各自 RR 的函數,RR 大的研究天生 E-value 就大,與設計品質無關 |
| 只想到一個未測量干擾因子 | 公式假設單一 U。多個各自不強的變項合力可以低空越過門檻 |
| 事後才挑一個看起來最好的效應量來算 E-value | 跟挑 τ、挑 cut-off 一樣是選擇性呈現。要在 Methods 事先講定 |
這一頁與其他頁的關係
- 它在補的洞——傾向分數配對與 IPTW 都只處理有測量到的共變項,E-value 量化的是它們處理不到的那一塊。 例二的估計就是直接取自這兩頁。
- 哪些後門路徑該擋——DAG 與後門準則。 DAG 幫你辨識出「有一條路我沒有變項可以擋」,E-value 把那條路的代價算出來。
- 另一條路是換設計——工具變數與 自我對照設計不靠測量干擾因子, 而是靠設計把它排除掉。E-value 是留在原設計裡誠實標價,兩者是互補的。
- 目標試驗模擬——目標試驗模擬。 找不到合理主動對照時,適應症干擾跑不掉,那一頁指過來的就是這一頁。
- 量化偏誤分析的其他部分——測量誤差與錯分、 選擇偏誤。E-value 只管未測量干擾,這兩種偏誤要另外量化。
- 例一的來源——病例對照研究那一章的條件邏輯迴歸, 背後的模型在條件邏輯迴歸。
- 例二的臨床脈絡——世代研究與 資料庫研究。後者是 E-value 最常被要求補上的場景。
重跑本頁的所有數字
這支腳本依賴 B6-02、B6-03 與 D2 的 stats 檔,
所以那三支要先跑(字母順序本來就會做到這件事):
/opt/homebrew/bin/Rscript figures/scripts/B6-02-psm.R
/opt/homebrew/bin/Rscript figures/scripts/B6-03-iptw.R
/opt/homebrew/bin/Rscript figures/scripts/D2-case-control-infert.R
/opt/homebrew/bin/Rscript figures/scripts/B6-07-e-value.R讀讀看這張圖
答案取自產生本頁圖表的同一份統計輸出,不是另外打上去的。
例一的勝算比是 4.150,95% CI 從 1.779 到 9.678。論文只寫了「E-value 為 7.77」。讀者少知道了什麼?
看答案與解析
正確答案: 少了區間那一端的 E-value 2.96:要讓這個結果變得無法排除虛無值,需要的干擾強度不到點估計那個數字的一半
兩個 E-value 問的不是同一件事。點估計的 7.77 問「要多強的干擾才能把效應量推回虛無值」;區間那一端的 2.96 問「要多強的干擾才能讓這個結果變得無法排除虛無值」,而後者才是「這個結論會不會被推翻」的答案——推翻一個結論不需要把點估計推到虛無值,只需要把區間推到碰得到它。1.78 是區間下界本身,論文的表格裡本來就有它,而且 E-value 不是用來判斷統計顯著性的工具。只報點估計那個數字是論文裡很常見的做法,而它一律讓結果看起來比實際更難推翻。
例二那張表最後一欄的七個區間 E-value 全部相同,而且都落在這個尺度的最小值。那個最小值說的是什麼?
看答案與解析
正確答案: 1.00 是這個尺度的最小值:七個區間每一個都涵蓋虛無值,所以不需要任何未測量干擾
方向很容易讀反。1.00 不是「要非常強的干擾才推得翻」,而是「零強度的干擾就夠了」——因為每一個信賴區間本來就涵蓋虛無值,這批資料與「沒有效果」相容,不必請任何干擾因子幫忙。1.27 是點估計那一欄,它回答的是另一個問題,不是四捨五入的關係。1.94 是風險比的區間上界,它離虛無值遠不代表結果穩固,重點在區間有沒有蓋住虛無值。正確的寫法是:這份資料在各種配對與加權設定下都未偵測到儲存時間與生化復發的關聯,因此敏感度分析在這裡沒有東西可以保護。
例二的世代有 287 個完整個案、47 件事件。這一頁把風險比換成相對風險時走的是平方根式,而不是直接令兩者相等。為什麼?
看答案與解析
正確答案: 因為事件比例 0.164 高於慣用的罕見門檻,把風險比直接當成相對風險會高估效應量
選哪一條公式由結果罕不罕見決定,不由效應量離虛無值多遠決定。47 件事件配 287 個完整個案,事件比例 0.164 高於慣用的罕見門檻,所以平方根式才是對的那一條。1.070 是風險比本身,它離虛無值多近與該用哪一條公式無關。1.048 是換算的結果而不是理由,用它來解釋為什麼選這條公式是倒果為因;而且「唯一會讓數值變小的公式」也不對,勝算比那條公式在關聯往上的時候同樣會讓數值變小。
IPTW 的 ATE 估計,先換成相對風險再算,點估計的 E-value 是 1.27。直接把風險比丟進公式會得到什麼?
看答案與解析
正確答案: 會得到 1.34,比正確值大:跳過轉換一律讓 E-value 變大,也就是讓結果看起來更難被推翻
1.27 是先換算後的正確值,1.34 是跳過轉換的值,而差距的方向是固定的:平方根式換出來的相對風險一定比風險比更靠近虛無值,所以跳過轉換算出來的 E-value 一定更大,結果看起來更難被推翻。這裡幅度不大,是因為風險比本來就離虛無值不遠;風險比越遠、結果越常見,這個誤差越大。1.53 是另一個估計目標的 E-value,不是同一個估計的兩種算法。1.07 是風險比本身,而 E-value 從來不等於效應量。審稿時可以直接問的一句話是:這個 E-value 是從什麼效應量算的,中間有沒有換成相對風險。
例一的樣本裡案例佔 33.5%。可以把它當成勝算比換相對風險那條公式裡的基線風險嗎?
看答案與解析
正確答案: 不行。案例對對照的比例是研究者訂的設計參數,換個抽樣比例就換一個值;這裡令相對風險等於勝算比 4.150
病例對照研究把案例對對照的比例訂死在設計裡,所以資料裡沒有任何一個比例是母體的風險。0.335 就是那個設計參數,拿它當基線風險等於憑空捏造。2.546 來自一張假設性的敏感度表,它回答的是「如果基線風險其實有那麼高,E-value 會掉多少」,不能被引用成這份資料的相對風險。採罕見結果近似、令相對風險等於 4.150 不是因為方便,而是因為它最寬鬆:關聯往上時,任何大於零的基線風險都讓相對風險更小、E-value 更小,所以這是最大可辯護的值——連它都說服不了人,換任何一個假設都只會更糟。
本頁的對照表列了兩個觀察相對風險與它們的 E-value:觀察值 2 倍配 3.41,觀察值 3 倍配 5.45。某篇論文只報了一個 1.27 的 E-value,該怎麼理解這個數字?
看答案與解析
正確答案: 放回對應關係上讀:觀察值要到 2 倍,E-value 才有 3.41,所以 1.27 背後的觀察關聯幾乎貼在虛無值上
E-value 是觀察到的相對風險的一個函數,而且不是比例關係:觀察值 2 倍對應 3.41,觀察值 3 倍就跳到 5.45,這條曲線在虛無值附近上升得特別快。所以一個讀起來「明顯大於 1」的 E-value,背後的觀察關聯可能相當弱——1.27 落在最靠近虛無值的那一段,它對應的觀察關聯幾乎貼著虛無值。按比例換算因此是錯的:觀察關聯從 2 倍到 3 倍只多了一半,E-value 卻從 3.41 跳到 5.45,用比例讀會系統性地高估背後的關聯。把 1.27 直接當成效應量是另一個常見的誤讀——E-value 回答的是「要多強的未測量干擾才推得翻這個結果」,它不是這個研究測到的關聯強度。判斷一個 E-value 大不大,要問的是在這個臨床脈絡裡有沒有哪一個沒被測量的變項,能同時跟暴露與結果關聯到這個程度。
用到這個方法的章節
素材來源與授權
本頁為原創內容