本ページでは、 分散分析 (ANOVA)を統合的に解説します。 一元配置・二元配置・反復測定・post-hoc 検定・効果量を一気通貫で扱います。
ANOVA は「3 群以上の平均が等しいか」を検定する手法。 名前は「分散」ですが、 検定対象は平均値です。 群内変動と群間変動を比較することから「分散」と呼ばれます。
論文記事から各用語のリンクをクリックすると、 該当箇所が開きます:
ANOVA(分散分析)の核心は名前のとおり 「分散の分解」。 SSDSE-B-2026 で 47 都道府県を 北日本・東日本・西日本 の 3 ブロックに分けて出生率を比較するとき、 「全体のバラつき」を 群間のバラつき(地域差) と 群内のバラつき(地域内の差) に切り分け、 その比率(F値)で「地域差は本物か」を検定します。
比喩で言うと、 ある楽団の演奏のばらつきを「楽器セクション間のばらつき」と「同じセクション内のばらつき」に切り分けて、 もしセクション間のバラつきが圧倒的に大きければ「セクションごとに本当に差がある」と判断するイメージ。 ANOVAは t検定の自然な拡張で、 群が 3 つ以上のときに 多重比較の罠 を避けながら一発で検定できる点が魅力です。
| 記号 | 意味 | SSDSE-B-2026 例 |
|---|---|---|
| $k$ | 群数 | 3 地域ブロック |
| $N$ | 総サンプル数 | 47 都道府県 |
| $\text{SS}_{\text{between}}$ | 群間平方和(地域差) | 地域ブロックの平均出生率のバラつき |
| $\text{SS}_{\text{within}}$ | 群内平方和(誤差) | 同じブロック内の県間バラつき |
| $F$ | 「シグナル/ノイズ」比 | 1 を大幅に超えれば群差あり |
有意になったら post-hoc 検定(Tukey HSDなど) で「どの群間に差があるか」を特定し、 効果量 $\eta^2 = \text{SS}_{\text{between}}/\text{SS}_{\text{total}}$ を必ず併記します。
| 章 | 内容 |
|---|---|
| 1. なぜANOVA | t検定との関係 |
| 2. F分布 | 2 つの自由度 |
| 3. 一元配置ANOVA | 1要因モデル |
| 4. 二元配置ANOVA | 2要因・交互作用 |
| 5. 反復測定ANOVA | 対応のあるANOVA |
| 6. Post-hoc検定 | どの群間に差? |
| 7. 効果量 | η² / ω² / Cohen's f |
| 8. ノンパラ代替 | Kruskal–Wallis 等 |
3 群以上を比較するときに、 t検定を全ペア(A-B、 A-C、 B-C)に対して繰り返すと、 family-wise 第一種過誤率が膨らむ。
ANOVA は「すべての群の平均が等しい」という一つの帰無仮説を 1 回の検定で評価する。
独立な $\chi^2$ 確率変数の比:
$$F = \frac{U_1/d_1}{U_2/d_2}, \quad U_1\sim\chi^2_{d_1},\ U_2\sim\chi^2_{d_2}$$
記号読み:$F$ は「エフ統計量」、 $d_1, d_2$ は分子・分母自由度。 ANOVA では分子=群間自由度、 分母=群内自由度。
1 2 3 4 5 6 7 8 | import numpy as np import matplotlib.pyplot as plt from scipy import stats x = np.linspace(0, 5, 500) for df1, df2 in [(2, 30), (5, 30), (10, 30)]: plt.plot(x, stats.f.pdf(x, df1, df2), label=f'F({df1},{df2})') plt.title('F分布') plt.legend(); plt.show() |
$$y_{ij} = \mu + \tau_i + \varepsilon_{ij}, \quad \varepsilon_{ij}\sim N(0, \sigma^2)$$
記号読み:$y_{ij}$ は「ワイ・サブ・アイ・ジェイ」、 群 $i$ の $j$ 番目の観測。 $\tau_i$ は群 $i$ の効果(「タウ・サブ・アイ」)。
$$\underbrace{\sum_{i,j}(y_{ij} - \bar{y}_{..})^2}_{SS_{total}} = \underbrace{\sum_{i}n_i(\bar{y}_{i.} - \bar{y}_{..})^2}_{SS_{between}} + \underbrace{\sum_{i,j}(y_{ij} - \bar{y}_{i.})^2}_{SS_{within}}$$
$$F = \frac{SS_{between}/(K-1)}{SS_{within}/(N-K)} = \frac{MS_{between}}{MS_{within}}$$
$F$ は群内変動に対する群間変動の比。 大きいほど群差あり。
3 群、 各群 3 サンプル:A=[2,3,4]、 B=[5,6,7]、 C=[8,9,10]
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd import numpy as np from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1) # 都道府県を「都市規模」3群に分割(人口密度の3分位) df['都市規模'] = pd.qcut(df['人口密度'], q=3, labels=['農村', '中規模', '都市']) groups = [g['一人当たり県民所得'].values for _, g in df.groupby('都市規模')] f_stat, p_value = stats.f_oneway(*groups) print(f'F = {f_stat:.3f}, p = {p_value:.4f}') |
2 つの要因 A, B(と交互作用)の影響を同時に評価。
$$y_{ijk} = \mu + \alpha_i + \beta_j + (\alpha\beta)_{ij} + \varepsilon_{ijk}$$
記号読み:$\alpha_i$ は要因A・水準 $i$ の主効果、 $\beta_j$ は要因B・水準 $j$ の主効果、 $(\alpha\beta)_{ij}$ は交互作用効果。
要因A の効果が要因B の水準で異なる現象。 「都市規模」と「地域(東日本/西日本)」を要因にしたとき、 都市規模の効果が地域で違うなら交互作用あり。
1 2 3 4 5 6 7 8 9 10 11 12 | import statsmodels.api as sm from statsmodels.formula.api import ols # 都市規模 × 地域の2元配置 df['地域'] = (df['都道府県'].isin(['北海道', '青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県', '新潟県', '富山県', '石川県', '福井県', '山梨県', '長野県', '岐阜県', '静岡県', '愛知県'])).map({True:'東日本', False:'西日本'}) model = ols('一人当たり県民所得 ~ C(都市規模) + C(地域) + C(都市規模):C(地域)', data=df).fit() anova_table = sm.stats.anova_lm(model, typ=2) print(anova_table) |
同じ個体に対して複数条件・複数時点で測定。 個人差をモデル外に出すことで検出力が上がる。
1 2 3 4 5 6 7 8 9 10 | from statsmodels.stats.anova import AnovaRM # 仮想的に「都道府県 × 時点(3年)」の long format long = pd.DataFrame({ 'subject': np.repeat(df['都道府県'], 3), 'time': list(range(3)) * len(df), 'value': np.concatenate([df['持ち家比率'].values + i*0.5 for i in range(3)]), }) res = AnovaRM(data=long, depvar='value', subject='subject', within=['time']).fit() print(res) |
ANOVA で有意になっても「どの群間に差があるか」は分からない。 Post-hoc 検定で特定する。
全ペア比較を行い、 family-wise α を制御。
1 2 3 4 5 | from statsmodels.stats.multicomp import pairwise_tukeyhsd result = pairwise_tukeyhsd(endog=df['一人当たり県民所得'], groups=df['都市規模'], alpha=0.05) print(result) |
全ペアの p値 × ペア数。 シンプルだが保守的。
1 群を「対照」とし、 他群をすべて対照と比較する。 K-1 個の比較のみ。
ANOVA の効果量:
1 2 3 4 5 6 7 | import numpy as np def eta_squared(groups): grand = np.mean(np.concatenate(groups)) ss_b = sum(len(g)*(np.mean(g)-grand)**2 for g in groups) ss_t = sum(((np.concatenate(groups)-grand)**2)) return ss_b / ss_t print('η² =', eta_squared(groups)) |
| 前提 | 確認方法 | 違反したら |
|---|---|---|
| 残差の正規性 | QQプロット・Shapiro | Kruskal–Wallis |
| 等分散性 | Levene 検定 | Welch's ANOVA |
| 独立性 | サンプリング設計 | 混合効果モデル |
| 球面性 (反復測定) | Mauchly検定 | Greenhouse–Geisser補正 |
1 2 3 | from scipy import stats H, p = stats.kruskal(*groups) print(f'Kruskal-Wallis H = {H:.3f}, p = {p:.4f}') |
| 落とし穴 | 対処 |
|---|---|
| ペアワイズ t検定の連発 | 必ず ANOVA + post-hoc を使う。 |
| 有意で終わる | どの群間に差があるかを post-hoc で示す。 η² と CI を併記。 |
| 交互作用を見ない | 二元配置では交互作用プロットを必ず描く。 |
| 不均衡データに Type I SS | 不均衡なら Type II/III SS を使う。 |
| 反復測定を独立ANOVAで処理 | 必ず subject を within-subject 因子に。 |
| 前提条件をスキップ | 残差プロット・Levene検定を行う。 |
| 名義尺度を量的に扱う | C() で明示的にカテゴリ化。 |
1 2 3 4 5 6 7 8 9 10 11 | import pandas as pd from scipy import stats from statsmodels.stats.multicomp import pairwise_tukeyhsd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1) df['都市規模'] = pd.qcut(df['人口密度'], q=3, labels=['農村', '中規模', '都市']) groups = [g['一人当たり県民所得'].values for _, g in df.groupby('都市規模')] F, p = stats.f_oneway(*groups) print(f'ANOVA: F={F:.2f}, p={p:.4f}') print(pairwise_tukeyhsd(df['一人当たり県民所得'], df['都市規模'])) |
1 2 3 4 5 | import seaborn as sns df['高齢度'] = (df['高齢化率'] >= df['高齢化率'].median()).map({True:'高', False:'低'}) sns.pointplot(data=df, x='都市規模', y='一人当たり県民所得', hue='高齢度', dodge=True) plt.title('交互作用プロット') plt.show() |
1 2 3 | print(stats.shapiro(df['一人当たり県民所得'])) print(stats.levene(*groups)) print(stats.kruskal(*groups)) |
「ANOVA の結果、 有意でした。」
「都市規模 3 群(農村・中規模・都市、 各 n=15〜16)の一人当たり県民所得を一元配置 ANOVA で比較した結果、 主効果が有意であった (F(2, 44) = 12.34, p < .001, η² = .36 大効果)。 Tukey HSD による post-hoc では、 都市群が農村群より有意に高く (Mdiff = 52 万円, 95% CI [28, 76], p < .001)、 中規模群との差は有意ではなかった (p = .12)。 残差の正規性と等分散性も併せて確認した(Shapiro p=.21、 Levene p=.34)。」
| 用途 | 関数 |
|---|---|
| 一元配置ANOVA | scipy.stats.f_oneway |
| 二元配置ANOVA | statsmodels.formula.api.ols + anova_lm |
| 反復測定ANOVA | statsmodels.stats.anova.AnovaRM |
| Welch's ANOVA | pingouin.welch_anova |
| Tukey HSD | statsmodels.stats.multicomp.pairwise_tukeyhsd |
| Bonferroni | statsmodels.stats.multitest.multipletests(method='bonferroni') |
| Kruskal–Wallis | scipy.stats.kruskal |
| Friedman | scipy.stats.friedmanchisquare |
statsmodels の anova_lm が出力する表の各列:
| 列 | 意味 |
|---|---|
| sum_sq | 平方和 SS。 各要因の説明する変動 |
| df | 自由度。 K-1(要因)、 N-K(残差) |
| F | F統計量 = MS要因 / MS残差 |
| PR(>F) | F値以上の値が出る確率(p値) |
ANOVA は実は「カテゴリ変数(ダミー変数)だけの線形回帰」と数学的に等価。 statsmodels では同じ ols で記述できる。
1 2 3 4 5 6 7 8 9 | import statsmodels.formula.api as smf import statsmodels.api as sm # ANOVA としての記述 m_anova = smf.ols('一人当たり県民所得 ~ C(都市規模)', data=df).fit() print(sm.stats.anova_lm(m_anova, typ=2)) # 同じモデルを「ダミー回帰」として見る print(m_anova.summary()) |
p値・F値は完全に一致する。 ANOVA の「カテゴリの主効果」が、 回帰の「ダミー係数の合同検定」に対応している。
A. はい。 2 群 ANOVA は 2 標本 t検定(等分散仮定)と完全に等価です(F = t²、 df の関係も対応)。 ただし慣例的に 2 群なら t検定を使います。
A. あります。 ANOVA は「全体的な差」、 post-hoc は「ペアごとの差」を見るため、 補正の保守性で起こり得ます。 効果量と CI で全体像を補完しましょう。
A. ANCOVA(共分散分析)を使います。 statsmodels では ols('y ~ C(group) + covariate', data=df) のように共変量を加えるだけです。
A. Mauchly 検定で確認、 違反していたら Greenhouse–Geisser や Huynh–Feldt 補正を使います。 または混合効果モデルに切り替える選択肢もあります。
論文・記事に登場する用語のリンクで該当箇所へジャンプ:
SSDSE-B-2026(47都道府県、 2023年)で、 都道府県を北海道・東北・関東・中部・近畿・中国・四国・九州沖縄の8地域に分け、 一世帯あたり魚介類消費額(L322101)に地域差があるかを一元配置 ANOVA で確認します。
| 地域 | 県数 | 魚介消費平均(円) | 標準偏差 |
|---|---|---|---|
| 北海道 | 1 | 87,200 | — |
| 東北 | 6 | 85,400 | 6,800 |
| 関東 | 7 | 79,100 | 5,200 |
| 中部 | 9 | 82,600 | 7,400 |
| 近畿 | 7 | 76,800 | 4,900 |
| 中国 | 5 | 74,300 | 3,600 |
| 四国 | 4 | 71,200 | 4,100 |
| 九州沖縄 | 8 | 68,500 | 5,800 |
※実値は SSDSE 2023年データから集計したおおよその値。 ANOVA の主結果は F ≈ 6.2、 p < 0.001、 η² ≈ 0.51(仮想例)。 「地域は魚介消費に強い影響」を示唆。
有意な ANOVA が出ても、 どの地域ペアが違うかは分かりません。 Tukey HSD で全ペアを比較すると、 「東北 vs 九州沖縄」「東北 vs 四国」「北海道 vs 九州沖縄」が有意(p < 0.05)など、 「東日本の漁業県と西日本の内陸寄り県で差が大きい」構造が浮かびます。
η² = 0.51 は「魚介消費の総変動のうち、 51% が地域差で説明できる」と読みます。 Cohen 基準では η² > 0.14 が「大きい効果」なので、 統計的にも実質的にも大きな地域差と結論できます。
古典的 ANOVA は「各群の分散が等しい」と仮定しています。 群間でばらつきが大きく違うと、 F検定が歪んで p値が信用できなくなります。 必ず Levene検定 か Bartlett検定 で確認。 違反していたら Welch ANOVA(scipy.stats.f_oneway ではなく scipy.stats.alexandergovern や Welch 版)か Kruskal-Wallis(ノンパラ版)を使う。 違反を無視すると Type I エラー率が名目 5% から 10-20% まで膨れることがあります。
F検定は「どこかの群が違う」とだけ言うので、 どのペアが違うかは別途調べる必要があります。 必ず Tukey HSD、 Dunnett、 Bonferroni などの事後検定を実行し、 さらに 効果量(η², ω²)と95% 信頼区間も併記。 「F(2,57)=4.2, p=0.02」だけで終わらせず、 「群A対B:差=12.3、 95%CI [3.1, 21.5]、 d=0.65」のような完全報告が査読基準。
3群比較で全ペアを比べると 3 回検定するので、 Type I エラーが累積。 「3つ全部が独立に α=0.05」ならいずれか1つで偽陽性となる確率は約 14%。 Bonferroni(α/k で割る)か Tukey HSD(同時信頼区間)か FDR(Benjamini-Hochberg)で補正。 ANOVA の F検定が「家族別 α を守る」と思い込んで、 事後で補正しないのが一番危険なパターン。
サンプル数が大きいと Shapiro-Wilk 等の正規性検定はほぼ必ず棄却される(ささいな偏りも検出)。 一方サンプルが小さいと検出力が低くてどんな分布も「正規」と判定。 つまり正規性検定はサンプル数に振り回されるので使い物にならない場面が多い。 代わりに Q-Q プロット、 ヒストグラム、 歪度・尖度を目視で確認。 また各群 n > 30 なら中心極限定理で F検定はかなり頑健なので、 過度な心配は不要。
同じ被験者を複数回測る(被験者内要因がある)場合、 「すべての時点ペアの差の分散が等しい」という球面性(sphericity)の仮定が必要。 違反すると F検定の自由度が間違って大きくなり、 p値が過小評価される。 Mauchly 検定で確認、 違反ならGreenhouse-GeisserかHuynh-Feldtで自由度補正、 または混合効果モデル(lmer)に移行。
「軽症・中等症・重症」のように順序のあるカテゴリ間で y を比べる時、 普通の ANOVA だと「順序情報」を捨ててしまう。 順序付き群間の単調傾向を検出するならJonckheere-Terpstra 検定か線形傾向検定(直交対比)を使う。 「平均が単調に増えるか」という具体的仮説を検証できる。 順序を無視した普通のANOVA より検出力が高くなる。
1 2 3 4 5 | from scipy import stats # 3群を直接渡す F, p = stats.f_oneway(group_a, group_b, group_c) print(f"F={F:.3f}, p={p:.4f}") # Welch 版(等分散仮定なし)は alexandergovern を使う |
1 2 3 4 5 6 | import statsmodels.api as sm from statsmodels.formula.api import ols from statsmodels.stats.multicomp import pairwise_tukeyhsd model = ols('y ~ C(region)', data=df).fit() print(sm.stats.anova_lm(model, typ=2)) print(pairwise_tukeyhsd(df['y'], df['region'], alpha=0.05)) |
1 2 3 4 5 | import pingouin as pg # ANOVA + η² + 等分散検定が一発 print(pg.anova(data=df, dv='y', between='region', detailed=True)) print(pg.welch_anova(data=df, dv='y', between='region')) print(pg.pairwise_tukey(data=df, dv='y', between='region')) |
scikit-learn の SelectKBest(score_func=f_classif) は内部でカテゴリ y に対する ANOVA F検定を行い、 F値が大きい特徴量を選びます。 分類問題の前処理で頻出。
1 2 3 4 | from sklearn.feature_selection import SelectKBest, f_classif selector = SelectKBest(score_func=f_classif, k=10) X_new = selector.fit_transform(X, y) print(selector.scores_) # 各特徴量の F値 |
1 2 3 | from scipy import stats H, p = stats.kruskal(a, b, c) # 正規性を仮定しない # 事後検定は Dunn or Mann-Whitney + Bonferroni |
A1101 → 総人口(千人)。 分析の分母になる基本量です。A1301 → 65 歳以上人口。 高齢化率を産む分子。A1201 → 15 〜 64 歳人口(生産年齢人口)。 経済活動の主体。μ → 全国平均。 比較基準として用います。α → 有意水準。 第一種の誤り許容率(分散分析 (ANOVA) に関する判断で重要)。p → p 値。 H₀ の下でデータがどれだけ稀かを示す。基本量の関係を、 記号 → 意味で整理します。 任意の比率は
$$\text{比率} = \frac{\text{分子}}{\text{分母}} \times 100\quad\text{単位: }\%$$
記号 → 意味:
平均と分散は
$$\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i,\quad s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2$$
t 統計量・効果量は
$$t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{s_1^2/n_1 + s_2^2/n_2}},\quad d = \frac{\bar{x}_1 - \bar{x}_2}{s_{\text{pooled}}}$$
SSDSE-B-2026 の都道府県データから 分散分析 (ANOVA) の文脈で代表値を読み取ります。 各列の記号 → 意味を確認し、 平均・中央値・四分位を併記する習慣を身につけましょう。
| 都道府県 | 総人口(千) | 65歳以上人口(千) | 高齢化率(%) | 記号 → 意味 |
|---|---|---|---|---|
| 秋田県 | 945 | 370 | 39.1 | A1101 → 総人口 / A1301 → 高齢者 / 比率 → 高齢化率 |
| 東京都 | 14,047 | 3,193 | 22.7 | 巨大分母 → 平均を引き上げる外れ値の典型 |
| 沖縄県 | 1,467 | 323 | 22.0 | 若い人口構造 → 全国最低の高齢化率 |
| 大阪府 | 8,838 | 2,420 | 27.4 | 大都市圏の中位 → 比較基準として有用 |
| 島根県 | 658 | 231 | 35.1 | 人口減少地域 → 分母縮小型の高齢化 |
import pandas as pd
from scipy import stats
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
df['aging'] = df['A1301']/df['A1101']*100
okinawa = df[df['Prefecture']=='沖縄県']['aging']
west = df[df['Prefecture'].isin(['大阪府','京都府','兵庫県','広島県','福岡県'])]['aging']
east = df[df['Prefecture'].isin(['東京都','神奈川県','千葉県','埼玉県','北海道'])]['aging']
F, p = stats.f_oneway(okinawa, west, east)
print(f'F={F:.3f}, p={p:.4f}')data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。from statsmodels.stats.multicomp import pairwise_tukeyhsd
import numpy as np
vals = np.concatenate([okinawa, west, east])
grp = ['沖縄']*len(okinawa) + ['西日本']*len(west) + ['東日本']*len(east)
print(pairwise_tukeyhsd(vals, grp))data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。import statsmodels.formula.api as smf
import statsmodels.api as sm
df['region'] = df['Prefecture'].apply(lambda p: '沖縄' if p=='沖縄県' else ('西' if p in ['大阪府','京都府','兵庫県','広島県','福岡県'] else '東'))
df['size'] = (df['A1101']>2000000).map({True:'大',False:'小'})
model = smf.ols('aging ~ C(region) + C(size) + C(region):C(size)', data=df).fit()
print(sm.stats.anova_lm(model, typ=2))data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。import numpy as np
ss_between = sum(len(g)*(g.mean()-df['aging'].mean())**2 for g in [okinawa, west, east])
ss_total = ((df['aging']-df['aging'].mean())**2).sum()
print(f'η²={ss_between/ss_total:.3f}')data/raw/SSDSE-B-2026.csv(47 都道府県 × 主要統計列)。 出力例は数値・p 値・統計量で、 解釈には「実値で計算してみる → 仮説検定 → 効果量 → 結論」の流れを推奨します。分散分析 (ANOVA) を中心に、 前提概念・並列分野・発展手法へリンクします。
グループ教材から 分散分析 (ANOVA) の文脈に直結する論文・ハンズオンを辿れます。
分散分析 (ANOVA) は古典統計と社会データの交差点で発達してきました。 19 世紀末から 20 世紀初頭にかけて Pearson, Fisher, Neyman などが基礎を整え、 戦後の公的統計整備により実務応用が広がりました。
2010 年代以降は、 「再現性危機」「ビッグデータ」「AI 倫理」の三つの波が 分散分析 (ANOVA) に新しい意味を与えました。 単に p<0.05 を出すのではなく、 効果量・信頼区間・事前登録・データシートが必須となっています。
日本では総務省統計局・国立社会保障人口問題研究所・経済産業省 RESAS などが公的統計を整備し、 教育用に SSDSE が無償公開されました。 本ページもこの枠組みで 分散分析 (ANOVA) を扱います。
https://www.e-stat.go.jp/https://www.nstac.go.jp/use/literacy/ssdse/https://docs.scipy.org/doc/scipy/reference/stats.htmlhttps://www.statsmodels.org/同じカテゴリの手法、 上位概念、 派生分野へのリンクを補強します。