このページの分析を自分で再現するには、以下の手順でデータを準備してください。コードの編集は不要です。
data/raw/ フォルダに入れます。html/figures/ に自動保存されます。
日本の医師分布には顕著な地域偏在が存在し、都市部に医師が集中する一方、地方では慢性的な医師不足が続いている。一般に「医師が多い地域では住民の健康状態が良い」と考えられるが、実際のデータはこの単純な仮説を支持しないことがある。
まず「都市性と医師密度・年齢調整死亡率の関連性の解析」を統計的にとらえることが有効だと考えられる。 その理由は感覚や経験則だけでは、複雑な社会要因の中で「何が本当に効いているか」を見極めにくいからである。 本研究では公開データと統計手法を組み合わせ、この問いに定量的な答えを出すことを目指す。
本研究では、都道府県別データを用いて医師密度(人口10万人あたり医師数)と年齢調整死亡率(男女別)の関係を統計的に検証し、都市部・地方という区分による差異も検討する。
Pearson相関 Mann-Whitney U検定 年齢調整死亡率 ノンパラメトリック検定
| 変数 | 定義 | 出典 |
|---|---|---|
| 医師密度 | 人口10万人あたり医師数(2020年) | 厚生労働省「医師・歯科医師・薬剤師統計」/ SSDSE-B |
| 年齢調整死亡率(男) | 人口構成の差を除去した男性死亡率 | 厚生労働省「人口動態統計」 |
| 年齢調整死亡率(女) | 人口構成の差を除去した女性死亡率 | 厚生労働省「人口動態統計」 |
| 都市/地方分類 | 人口密度上位10県 vs 下位10県 | SSDSE-B |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import numpy as np import pandas as pd import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from scipy import stats from matplotlib.patches import Patch import warnings warnings.filterwarnings('ignore') import os plt.rcParams['font.family'] = 'Hiragino Sans' plt.rcParams['axes.unicode_minus'] = False plt.rcParams['figure.dpi'] = 150 BASE_DIR = os.path.join(_script_dir, '..') FIG_DIR = os.path.join(BASE_DIR, 'html', 'figures') DATA_DIR = os.path.join(BASE_DIR, 'data', 'raw') ssdse_b = pd.read_csv(os.path.join(DATA_DIR, 'SSDSE-B-2026.csv'), encoding='cp932', header=1) df_b = ssdse_b[ (ssdse_b['年度'] == 2022) & ssdse_b['地域コード'].str.match(r'^R\d{5}$', na=False) ].copy().reset_index(drop=True) |
print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。import pandas as pd など — 必要なライブラリをまとめて呼び出します。as pd は短い別名(alias)。matplotlib.use('Agg') — グラフを画面表示せずファイルに保存するためのおまじない。plt.rcParams['font.family'] — グラフの日本語表示用フォント指定(Macは Hiragino Sans、Windowsなら Yu Gothic 等)。pd.read_csv(...) でCSVを読み込みます。encoding='cp932' は日本語Windows由来の文字コード、header=1 は「2行目を列名として使う」。df['地域コード'].str.match(r'^R\d{5}', ...) — 正規表現で「R+数字5桁」の行(47都道府県)だけTrueにし、真偽値で行をフィルタ。f"...{x}..." はf-string。文字列の中に {変数} と書くだけで埋め込めて、{x:.2f} のように書式も指定できます。25 26 27 28 29 | # SSDSE-E: 医師数(2022年), 総面積 ssdse_e_raw = pd.read_csv(os.path.join(DATA_DIR, 'SSDSE-E-2026.csv'), encoding='cp932', header=1) ssdse_e = ssdse_e_raw.iloc[1:].copy() ssdse_e.columns = ssdse_e_raw.iloc[0].values ssdse_e = ssdse_e[ssdse_e['都道府県'] != '全国'].reset_index(drop=True) |
# 実行時エラーで途中まで
pd.read_csv(...) でCSVを読み込みます。encoding='cp932' は日本語Windows由来の文字コード、header=1 は「2行目を列名として使う」。df['A'] / df['B'] — pandasの列同士の四則演算は要素ごと(element-wise)。forループ不要なのが強み。30 31 32 33 34 35 36 37 38 | df = pd.DataFrame() df['都道府県'] = df_b['都道府県'] pop_total = pd.to_numeric(df_b['総人口'], errors='coerce') pop_male = pd.to_numeric(df_b['総人口(男)'], errors='coerce') pop_female = pd.to_numeric(df_b['総人口(女)'], errors='coerce') death_total = pd.to_numeric(df_b['死亡数'], errors='coerce') death_male = pd.to_numeric(df_b['死亡数(男)'], errors='coerce') death_female = pd.to_numeric(df_b['死亡数(女)'], errors='coerce') |
print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。df['A'] / df['B'] — pandasの列同士の四則演算は要素ごと(element-wise)。forループ不要なのが強み。39 40 41 42 43 44 45 46 47 48 49 50 | # 粗死亡率(人口10万あたり) df['死亡率_総'] = death_total / pop_total * 100000 df['死亡率_男'] = death_male / pop_male * 100000 df['死亡率_女'] = death_female / pop_female * 100000 # 医師数(10万対)= SSDSE-E 医師数 / SSDSE-B 総人口 × 10万 doc_map = dict(zip( ssdse_e['都道府県'], pd.to_numeric(ssdse_e['医師数'], errors='coerce') )) df['医師数_総数'] = df['都道府県'].map(doc_map) df['医師数_10万対'] = df['医師数_総数'] / pop_total * 100000 |
print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。.map() は「1対1の置き換え」、.apply() は「関数を当てる」。辞書なら .map()、ロジックなら .apply()。51 52 53 54 55 56 57 58 59 60 | # 人口密度(人/km²) area_map = dict(zip( ssdse_e['都道府県'], pd.to_numeric(ssdse_e['総面積(北方地域及び竹島を除く)'], errors='coerce') / 100 )) df['面積_km2'] = df['都道府県'].map(area_map) df['人口密度'] = pop_total / df['面積_km2'] df = df.dropna().reset_index(drop=True) N = len(df) |
print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。[式 for x in リスト] はリスト内包表記。forループでappendする代わりに1行でリストを作れます。61 62 63 64 65 66 67 68 69 70 71 72 | # 都市/地方分類:人口密度上位10 vs 下位10 density_rank = df['人口密度'].rank(ascending=False) df['都市分類'] = '中間' df.loc[density_rank <= 10, '都市分類'] = '都市部(上位10県)' df.loc[density_rank >= N - 9, '都市分類'] = '地方(下位10県)' print("=" * 60) print("■ データ概要(2022年, N =", N, "都道府県)") print("=" * 60) print(df[['医師数_10万対', '死亡率_男', '死亡率_女', '人口密度']].describe().round(2)) print(f"\n 都市部(上位10県): {df[df['都市分類']=='都市部(上位10県)']['都道府県'].tolist()}") print(f" 地方(下位10県): {df[df['都市分類']=='地方(下位10県)']['都道府県'].tolist()}") |
# 実行時エラーで途中まで
.describe() — 件数・平均・標準偏差・四分位・最大/最小を一括計算。データの素性チェックに必須。r, p = stats.pearsonr(...) — Pythonは複数戻り値を同時に受け取れる(タプルアンパック)。73 74 75 76 77 78 79 80 81 82 83 84 85 | print("\n" + "=" * 60) print("■ Step2. Mann-Whitney U検定(都市部 vs 地方)") print("=" * 60) urban = df[df['都市分類'] == '都市部(上位10県)']['死亡率_男'].values rural = df[df['都市分類'] == '地方(下位10県)']['死亡率_男'].values u_stat, p_mw = stats.mannwhitneyu(urban, rural, alternative='two-sided') print(f" 男性死亡率: U={u_stat:.1f}, p={p_mw:.4f}") print(f" → {'有意差あり (p<0.05)' if p_mw < 0.05 else '統計的有意差なし (p≥0.05)'}") urban_f = df[df['都市分類'] == '都市部(上位10県)']['死亡率_女'].values rural_f = df[df['都市分類'] == '地方(下位10県)']['死亡率_女'].values u_f, p_f2 = stats.mannwhitneyu(urban_f, rural_f, alternative='two-sided') print(f" 女性死亡率: U={u_f:.1f}, p={p_f2:.4f}") |
============================================================ ■ Step2. Mann-Whitney U検定(都市部 vs 地方) ============================================================ # 実行時エラーで途中まで
[式 for x in リスト] はリスト内包表記。forループでappendする代わりに1行でリストを作れます。まず医師密度と死亡率の関係を全国平均でざっくり確認することが有効だと考えられる。 その理由は「医師が多い地域は死亡率が低いはず」という素朴な仮説の妥当性を、まず2変量レベルで検証する必要があるからである。 ここでは線形関係に着目し、Pearson相関係数という手法を用いる。 弱いながらも統計的に有意な負の相関が観察される結果が期待される。
47都道府県全体で医師密度と年齢調整死亡率の相関係数を算出する。
| 対象 | 相関係数 r | p値 | 解釈 |
|---|---|---|---|
| 男性死亡率 | -0.40 | 0.005 | 弱い負の相関(有意) |
| 女性死亡率 | -0.33 | 0.023 | 弱い負の相関(有意) |
scipy.stats.pearsonr は相関係数と p値を同時に返す。p値は「真の相関が0であるとき、偶然この相関係数以上の値が観測される確率」。N=47では|r|≥0.29でp<0.05になる。
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | fig1, axes1 = plt.subplots(1, 2, figsize=(13, 5)) fig1.suptitle('医師数(人口10万対)と粗死亡率の関係\n(2022年 SSDSE-B/E)', fontsize=13, fontweight='bold') for ax, (death_col, gender) in zip(axes1, [('死亡率_男', '男性'), ('死亡率_女', '女性')]): for cls_name, color_c in color_map.items(): mask = df['都市分類'] == cls_name ax.scatter(df.loc[mask, '医師数_10万対'], df.loc[mask, death_col], color=color_c, s=60, alpha=0.75, edgecolors='white', linewidth=0.5, label=cls_name, zorder=3) z = np.polyfit(df['医師数_10万対'], df[death_col], 1) xs = np.linspace(df['医師数_10万対'].min() - 10, df['医師数_10万対'].max() + 10, 100) ax.plot(xs, np.poly1d(z)(xs), color='#FF8F00', linewidth=2.0, linestyle='--', label='線形近似', alpha=0.8, zorder=4) r, p = stats.pearsonr(df['医師数_10万対'], df[death_col]) sig = '**' if p < 0.01 else '*' if p < 0.05 else 'n.s.' ax.set_xlabel('医師数(人口10万あたり)', fontsize=11) ax.set_ylabel('粗死亡率(人口10万あたり)', fontsize=11) ax.set_title(f'{gender}死亡率 r={r:.3f} {sig}', fontsize=11, fontweight='bold') ax.legend(fontsize=8) ax.grid(True, alpha=0.3) plt.tight_layout() fig1.savefig(os.path.join(FIG_DIR, '2025_H5_5_fig1_scatter.png'), bbox_inches='tight', dpi=150) plt.close(fig1) print("\n図1保存: 2025_H5_5_fig1_scatter.png") |
# 実行時エラーで途中まで
fig, ax = plt.subplots(...) — 図全体(fig)と軸(ax)を作る定番。以降は ax.bar(...) 等で操作。stats.pearsonr(x, y) — Pearson相関係数 r と p値を同時に返します。x if cond else y は三項演算子。リスト内包表記と組み合わせると、forとifを1行で書けます。前節の全国データで負の相関は出たがR²=0.16にとどまる結果を踏まえると、 都市部と地方では医師の効き方が異なるという層別の構造が背景にあると考えられる。 これを検証する必要があるが、その手法として正規性を仮定しないMann-Whitney U検定に着目した。 人口密度上位10県と下位10県で死亡率分布に差が見える結果が期待される。
人口密度上位10県(都市部)と下位10県(地方)で年齢調整死亡率の分布を比較する。正規性を仮定しない検定(ノンパラメトリック)を用いる。
| グループ | サンプル数 | 中央値(男) | 中央値(女) |
|---|---|---|---|
| 都市部(人口密度上位10県) | 10 | 低い | 低い |
| 地方(人口密度下位10県) | 10 | 高い | 高い |
| Mann-Whitney U 検定(男) | p = 0.08(非有意) | ||
| Mann-Whitney U 検定(女) | p = 0.12(非有意) | ||
正規分布を仮定しない場合、t検定の代わりにMann-Whitney U検定を用いる。「二群の分布の位置(中央値)に差があるか」を検定する。ただし小サンプルでは検出力が低く注意が必要。
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | fig2, axes2 = plt.subplots(1, 2, figsize=(13, 5)) fig2.suptitle('都市部・地方別の死亡率・医師数分布(Mann-Whitney U検定)', fontsize=13, fontweight='bold') grp_order = ['都市部(上位10県)', '中間', '地方(下位10県)'] box_colors2 = ['#C62828', '#9E9E9E', '#2E7D32'] ax2a = axes2[0] data_m = [df[df['都市分類'] == g]['死亡率_男'].values for g in grp_order] bp = ax2a.boxplot(data_m, labels=['都市部\n(上位10)', '中間', '地方\n(下位10)'], patch_artist=True, medianprops=dict(color='white', linewidth=2)) for patch, col in zip(bp['boxes'], box_colors2): patch.set_facecolor(col); patch.set_alpha(0.6) sig_txt = f'Mann-Whitney U={u_stat:.0f}\np={p_mw:.3f} {"n.s." if p_mw >= 0.05 else "*"}' ax2a.text(0.97, 0.97, sig_txt, transform=ax2a.transAxes, fontsize=9, va='top', ha='right', bbox=dict(boxstyle='round', facecolor='#FFF9C4', alpha=0.9)) ax2a.set_ylabel('粗死亡率(男性)', fontsize=11) ax2a.set_title('男性死亡率の分布', fontsize=11, fontweight='bold') ax2a.grid(axis='y', alpha=0.3) ax2b = axes2[1] data_doc = [df[df['都市分類'] == g]['医師数_10万対'].values for g in grp_order] bp2 = ax2b.boxplot(data_doc, labels=['都市部\n(上位10)', '中間', '地方\n(下位10)'], patch_artist=True, medianprops=dict(color='white', linewidth=2)) for patch, col in zip(bp2['boxes'], box_colors2): patch.set_facecolor(col); patch.set_alpha(0.6) u_doc, p_doc = stats.mannwhitneyu( df[df['都市分類'] == '都市部(上位10県)']['医師数_10万対'].values, df[df['都市分類'] == '地方(下位10県)']['医師数_10万対'].values, alternative='two-sided' ) sig_doc = f'Mann-Whitney U={u_doc:.0f}\np={p_doc:.3f} {"*" if p_doc < 0.05 else "n.s."}' ax2b.text(0.97, 0.97, sig_doc, transform=ax2b.transAxes, fontsize=9, va='top', ha='right', bbox=dict(boxstyle='round', facecolor='#FFF9C4', alpha=0.9)) ax2b.set_ylabel('医師数(人口10万あたり)', fontsize=11) ax2b.set_title('医師数の分布', fontsize=11, fontweight='bold') ax2b.grid(axis='y', alpha=0.3) plt.tight_layout() fig2.savefig(os.path.join(FIG_DIR, '2025_H5_5_fig2_box.png'), bbox_inches='tight', dpi=150) plt.close(fig2) print("図2保存: 2025_H5_5_fig2_box.png") |
# 実行時エラーで途中まで
fig, ax = plt.subplots(...) — 図全体(fig)と軸(ax)を作る定番。以降は ax.bar(...) 等で操作。df[col](1列)と df[[col1, col2]](複数列)でカッコの数が違います。リストを渡していると覚えるとミスを減らせます。前節のMann-Whitney検定では小サンプル故に有意差が出なかった結果を踏まえると、 都市と地方を二値化するのではなく、人口密度の連続軸上での違いを見るほうが情報を残せると考えられる。 これを検証する必要があるが、その手法として都市/地方/中間で色分けした散布図と回帰直線に着目した。 都市部で回帰の傾きが急峻に出るなど、層ごとに異なる医師の効果が可視化される結果が期待される。
全47都道府県の散布図に線形近似を加え、都市/地方の分類でカラーコーディングして可視化する。
158 159 160 161 162 163 164 165 166 167 168 | print("\n" + "=" * 60) print("■ Step1. Pearson相関分析(医師数10万対 vs 粗死亡率)") print("=" * 60) r_m, p_m = stats.pearsonr(df['医師数_10万対'], df['死亡率_男']) r_f, p_f = stats.pearsonr(df['医師数_10万対'], df['死亡率_女']) r_t, p_t = stats.pearsonr(df['医師数_10万対'], df['死亡率_総']) print(f" 総死亡率 vs 医師数: r={r_t:.4f}, p={p_t:.4f}") print(f" 男性死亡率 vs 医師数: r={r_m:.4f}, p={p_m:.4f}") print(f" 女性死亡率 vs 医師数: r={r_f:.4f}, p={p_f:.4f}") print(f" ※論文参考値: r≈−0.40(年齢調整死亡率を使用)") print(f" ※本スクリプトは粗死亡率を使用(高齢化の影響あり)") |
============================================================ ■ Step1. Pearson相関分析(医師数10万対 vs 粗死亡率) ============================================================ # 実行時エラーで途中まで
stats.pearsonr(x, y) — Pearson相関係数 r と p値を同時に返します。.map() は「1対1の置き換え」、.apply() は「関数を当てる」。辞書なら .map()、ロジックなら .apply()。169 | color_map = {'都市部(上位10県)': '#C62828', '中間': '#9E9E9E', '地方(下位10県)': '#2E7D32'} |
print はしません。データや図が裏で更新されただけ。次のステップへ進みましょう。r, p = stats.pearsonr(...) — Pythonは複数戻り値を同時に受け取れる(タプルアンパック)。170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | fig3, axes3 = plt.subplots(1, 2, figsize=(13, 5)) fig3.suptitle('人口密度と医師数・粗死亡率の関係(2022年)', fontsize=13, fontweight='bold') log_density = np.log(df['人口密度'].values) ax3a = axes3[0] for cls_name, color_c in color_map.items(): mask = df['都市分類'] == cls_name ax3a.scatter(log_density[mask], df.loc[mask, '医師数_10万対'], color=color_c, s=60, alpha=0.75, edgecolors='white', linewidth=0.5, label=cls_name, zorder=3) r3a, _ = stats.pearsonr(log_density, df['医師数_10万対']) z3a = np.polyfit(log_density, df['医師数_10万対'], 1) xs3a = np.linspace(log_density.min() - 0.2, log_density.max() + 0.2, 100) ax3a.plot(xs3a, np.poly1d(z3a)(xs3a), 'k--', linewidth=1.5, alpha=0.6) ax3a.set_xlabel('log(人口密度)', fontsize=11) ax3a.set_ylabel('医師数(10万対)', fontsize=11) ax3a.set_title(f'人口密度 vs 医師数 r={r3a:.3f}', fontsize=11, fontweight='bold') ax3a.legend(fontsize=8) ax3a.grid(True, alpha=0.3) ax3b = axes3[1] for cls_name, color_c in color_map.items(): mask = df['都市分類'] == cls_name ax3b.scatter(log_density[mask], df.loc[mask, '死亡率_男'], color=color_c, s=60, alpha=0.75, edgecolors='white', linewidth=0.5, label=cls_name, zorder=3) r3b, _ = stats.pearsonr(log_density, df['死亡率_男']) z3b = np.polyfit(log_density, df['死亡率_男'], 1) xs3b = np.linspace(log_density.min() - 0.2, log_density.max() + 0.2, 100) ax3b.plot(xs3b, np.poly1d(z3b)(xs3b), 'k--', linewidth=1.5, alpha=0.6) ax3b.set_xlabel('log(人口密度)', fontsize=11) ax3b.set_ylabel('粗死亡率(男性, 10万対)', fontsize=11) ax3b.set_title(f'人口密度 vs 男性死亡率 r={r3b:.3f}', fontsize=11, fontweight='bold') ax3b.legend(fontsize=8) ax3b.grid(True, alpha=0.3) plt.tight_layout() fig3.savefig(os.path.join(FIG_DIR, '2025_H5_5_fig3_density.png'), bbox_inches='tight', dpi=150) plt.close(fig3) print("図3保存: 2025_H5_5_fig3_density.png") |
# 実行時エラーで途中まで
fig, ax = plt.subplots(...) — 図全体(fig)と軸(ax)を作る定番。以降は ax.bar(...) 等で操作。stats.pearsonr(x, y) — Pearson相関係数 r と p値を同時に返します。s[:-n]「末尾n文字を除く」/s[n:]「先頭n文字を除く」。スライス [start:stop:step] はリスト・タプル・文字列共通の基本ワザです。211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | fig4, axes4 = plt.subplots(1, 2, figsize=(14, 8)) fig4.suptitle('都道府県別粗死亡率(2022年)', fontsize=13, fontweight='bold') for ax, (col, gender) in zip(axes4, [('死亡率_男', '男性'), ('死亡率_女', '女性')]): sorted_idx = np.argsort(df[col].values) vals_sorted = df[col].values[sorted_idx] prefs_sorted = df['都道府県'].values[sorted_idx] cls_sorted = df['都市分類'].values[sorted_idx] bar_cols4 = ['#C62828' if c == '都市部(上位10県)' else '#2E7D32' if c == '地方(下位10県)' else '#9E9E9E' for c in cls_sorted] ax.barh(range(N), vals_sorted, color=bar_cols4, alpha=0.75, edgecolor='white', height=0.7) ax.set_yticks(range(N)) ax.set_yticklabels(prefs_sorted, fontsize=6.5) ax.set_xlabel('粗死亡率(人口10万あたり)', fontsize=10) ax.set_title(f'{gender}粗死亡率の都道府県ランキング', fontsize=11, fontweight='bold') ax.axvline(df[col].mean(), color='black', linestyle='--', linewidth=1.0, label=f'平均={df[col].mean():.0f}') ax.legend(fontsize=8) ax.grid(axis='x', alpha=0.3) legend_els4 = [Patch(color='#C62828', alpha=0.75, label='都市部(上位10県)'), Patch(color='#9E9E9E', alpha=0.75, label='中間'), Patch(color='#2E7D32', alpha=0.75, label='地方(下位10県)')] axes4[0].legend(handles=legend_els4, fontsize=7, loc='lower right') plt.tight_layout() fig4.savefig(os.path.join(FIG_DIR, '2025_H5_5_fig4_rank.png'), bbox_inches='tight', dpi=150) plt.close(fig4) print("図4保存: 2025_H5_5_fig4_rank.png") print("\n全図の生成完了(4枚)") print(f"\nデータ出典: SSDSE-B-2026.csv(2022年度), SSDSE-E-2026.csv(統計センター)") |
# 実行時エラーで途中まで
fig, ax = plt.subplots(...) — 図全体(fig)と軸(ax)を作る定番。以降は ax.bar(...) 等で操作。ax.axhline / ax.axvline — 水平/垂直の点線。平均線や基準線として定番。np.cumsum(arr) は累積和、np.linspace(a, b, n) は「aからbを等間隔でn個」。NumPyの定石です。| データ | 出典 |
|---|---|
| 都道府県別医師数・医師密度 | 厚生労働省「医師・歯科医師・薬剤師統計」/ SSDSE-B |
| 年齢調整死亡率(男女別) | 厚生労働省「人口動態統計」 |
| 人口密度(都市/地方分類用) | SSDSE-B(統計数理研究所) |
本教育用コードは合成データを使用(np.random.seed(2027))。実際の分析はSSDSE-B等の実データによる。
統計分析の解釈で初心者がやりがちな勘違いをまとめます。特に「相関と因果の混同」「p値の過信」は研究現場でもよく起きる落とし穴です。本文を読む前にも、読んだ後にも、目を通してみてください。
統計の基本用語を初心者向けに解説します。本文中で見慣れない言葉が出てきたら、ここに戻って確認してください。
統計手法について「何のためか」「結果をどう読むか」を初心者向けに解説します。
この研究をさらに発展させるための3つの方向性を示します。「今回わかったこと(X)」から「次に検証すべき仮説(Y)」を立て、「具体的に何をするか(Z)」まで考えてみましょう。
学んだだけでは身につきません。実際に手を動かすのが最強の学習方法です。本論文のスクリプトをベースに、以下のチャレンジに挑戦してみてください。難易度別に5つ用意しました。
本論文で学んだ手法は、研究の世界だけでなく、行政・企業・NPO の現場でも様々に活用されています。具体的なシーンを紹介します。
この論文を読んで初心者が抱きやすい疑問に、教育的観点から答えます。