2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

脳波解析:OpenNeuro「Japan EEG」データセットを用いた脳波解析

2
Last updated at Posted at 2026-06-29

TL;DR(結論)

  • 日本語音読タスク中の脳波(EEG)を解析し、発話中に脳全体の協調活動指標(GFP)が発話直前より +7.4% 増加する傾向(Wilcoxon p=0.054)を確認しました。
  • この増加は統計的に信頼できる全8つの時間窓で一貫して正方向であり、運動野・言語野・聴覚野が同時に動員されている可能性を示します。
  • 本知見は、音読を通じた MCI/認知症予防を目的とした神経フィードバック(NFB)システムの設計指標として活用できる可能性を持ちます。
  • 実装には MNE-Python を使用し、前処理から ERP 分析・統計評価まで解説します。

はじめに

認知症・MCI(軽度認知障害)の予防に向けた取り組みの一つとして、 神経フィードバック(NFB: Neurofeedback) が注目されています。NFB とは、自分の脳活動をリアルタイムで可視化・フィードバックすることで、特定の脳状態を自発的に強化・維持する技術です。

本記事では、日本語の音読タスクが引き起こす 脳電位応答(ERP: Event-Related Potential) を定量的に分析します。特に、脳全体の協調活動の指標である GFP(Global Field Power) の変化に着目し、音読が複数の皮質ネットワークを同時に活性化させるかを検証します。

使用するデータは、OpenNeuro で公開されている「Japan EEG データセット」です。自然な発話に焦点を当てるため、文章の読み上げタスクである DATASET02 のみを対象とします。

データセット タスク概要
DATASET01 参加者が3つの発話方法で同じ単語を5回連続して発話
DATASET02 小説・ゲームテキスト・JSUTコーパスからの文章を読み上げ(本記事の対象
DATASET03 TBD(2026年6月現在)

想定読者

  • 生体データ(EEG 等)解析や脳科学に興味があるエンジニア・研究者
  • NFB や認知症予防テクノロジーの実装に関心がある方
  • MNE-Python を使った EEG の前処理・ERP 分析を学びたい方

読後に得られるもの

  • ERP・GFP の定義と神経科学的意味の理解
  • MNE-Python を用いた EEG 前処理から ERP 統計解析までの実装力
  • NFB システム設計のための脳活動指標の定量評価手法

背景・課題

認知症・MCI と NFB

日本では65歳以上の約15〜20%が MCI(軽度認知障害)にあると推定されており、適切な介入がなければ一部は認知症へと進行します。薬物療法の限界から、非薬物的介入としての認知トレーニングや神経フィードバックへの期待が高まっています。

音読のような複合的な言語タスクは、構音(運動野)・語彙・統語処理(言語野)・自己モニタリング(聴覚野・前頭前野)を同時に動員します。この複数ネットワークの協調活動が脳のシナプス可塑性を促し、認知予備力(Cognitive Reserve) の維持に寄与すると考えられています。

NFB ではこの脳活動をリアルタイムで検出し、望ましい活動パターンが出現したときにフィードバックを与えることで、ユーザー自身が能動的に脳状態を強化できます。

日本語 EEG データの希少性と本データセットの価値

従来、脳波解析のオープンデータは英語圏のものが主流でした。日本語特有の発話プロセス(モーラ構造・アクセント等)が引き起こす皮質応答を解明するには、日本語刺激と同期した高品質な EEG データが不可欠です。

Japan EEG Dataset(DATASET02)は、単一被験者で最大 175 時間という圧倒的なデータ規模を誇り、スケーリング則の実証や自己教師あり学習への応用も報告されています(Sato et al., 2024)。

"Additionally, as the amount of training data increased, the EEG latent representation progressively exhibited clearer temporal structures of spoken phrases."
(意訳:学習データ量が増加するにつれて、脳波の潜在表現は発話フレーズのより明確な時間構造を段階的に示すようになった。)

本記事ではその一部(1 run, 50 試行)を使い、ERP 解析パイプラインの構築と NFB 指標の探索を行います。

脳波・脳波検査(EEG)とは

脳波とは、大脳皮質における神経細胞の活動に伴って発生する電位のことです。頭皮上に電極を設置し脳内の微弱な電位変化を測定・記録することで、身体への負担が少ない非侵襲的な脳波検査(EEG: Electroencephalography)を行います。

基礎波と異常波、アーチファクトを含む脳波の違い

脳波データ(EEG)を正しく解析・処理する上で最も重要なのは、脳由来の信号とそれ以外のノイズを正確に見分けることです。

基礎波と異常波
脳波には、正常な脳活動を示す「基礎波(β波、α波、θ波、δ波)」と、疾患や突発的な神経活動を示す「異常波(鋭波、棘波など)」があります。脳波検査やデータ解析においては、これらの周波数帯域の変動を捉えることが主な目的となります。

基礎波と異常波の違いの画像

代表的なアーチファクト:眼球運動(EOG)による影響
しかし、実際の生体データには、脳由来ではない電気信号である「アーチファクト」が頻繁に混入します。その代表例が眼球運動や瞬きによる影響です。
特に発話中や覚醒時のデータでは、眼球運動(EOG)によるアーチファクトが前頭部付近の電極(Fp1, Fp2など)に大きく現れます。眼球の動きに伴う電位変化のパターンを理解し、前処理の段階で眼電位を分離・除去することが、精度の高いモデル構築には不可欠です。

眼球運動によるアーチファクトの画像

その他のアーチファクト(ノイズ)の混入
眼球運動以外にも、データには様々なノイズが混入します。交流雑音(電源由来)や、発汗、筋肉の緊張(筋電図:EMG)、心臓の動き(心電図:ECG)、電極の接触不良など、その原因は多岐にわたります。これらは時に異常波と似た波形を示すこともあるため、解析の妨げとなります。

代表的なアーチファクトの画像

本記事での前処理アプローチ
上記を踏まえ、本記事の解析パイプラインでは、特に影響が大きく、かつ発話タスクにおいて頻発する眼球運動(EOG)および筋肉の緊張(EMG)によるアーチファクトの除去を試みます。

※本セクションの波形画像および解説は、九州大学大学院の飛松先生による資料『脳波判読のポイント』を参考にしています。詳細な判読基準は末尾の参考リンクを参照してください。

実行環境

  • Python 3.13
  • MNE-Python 1.x
  • NumPy, Matplotlib

実装

前処理は「不良チャンネル除去→大振幅ノイズ検出→ICAによるアーチファクト除去→エポック単位の最終クリーニング」という4段階で構成されます。また、前処理済みデータを用いて周波数帯域別のパワーをアニメーション表示する方法も紹介します。

1. データのロードとチャンネル整理

BIDS形式では、.edf ファイルに対応する _channels.tsv が同じディレクトリに存在します。チャンネル名・型の正解は .edf 内部ではなく .tsv 側にあるため、以下の関数で自動的に補正します。

import mne
import pandas as pd
from pathlib import Path

def rename_channels_from_tsv(raw, edf_file_path):
    edf_file_path = Path(edf_file_path)
    tsv_path = edf_file_path.parent / edf_file_path.name.replace(
        "_eeg.edf", "_channels.tsv"
    )
    channel_df = pd.read_csv(tsv_path, sep="\t")
    rename_mapping, type_mapping, seen_names = {}, {}, {}

    for _, row in channel_df.iterrows():
        if pd.isna(row["description"]):
            continue
        raw_new_name = row["description"]
        if raw_new_name in seen_names:
            seen_names[raw_new_name] += 1
            new_name = f"{raw_new_name}_{seen_names[raw_new_name]}"
        else:
            seen_names[raw_new_name] = 0
            new_name = raw_new_name

        rename_mapping[str(row["name"])] = new_name
        ch_type = str(row["type"]).lower()
        type_mapping[new_name] = "stim" if ch_type == "trig" else ch_type

    raw.rename_channels(rename_mapping)
    raw.set_channel_types(type_mapping)
    return raw

file_path = Path("sub-01_ses-20230829_task-speechopen_acq-pangolin_run-01_eeg.edf")
raw = mne.io.read_raw_edf(file_path, preload=True, verbose=False)
raw = rename_channels_from_tsv(raw, file_path)
raw.pick(["eeg", "eog", "emg"], verbose=False)

2. 前処理(4段階パイプライン)

第1段階:初期不良チャンネルの検出と補間

データ収録不良(電極外れ・常時ノイズ)のチャンネルをICA実行前に除去します。対数分散空間でのロバストz-スコア(MAD基準)を使うことで、機器の増幅率や単位に依存しない汎用的な判定が可能です。

import numpy as np

def mark_bad_channels(raw):
    eeg_ch_names = raw.copy().pick("eeg").ch_names
    data = raw.get_data(picks="eeg")
    variances = np.var(data, axis=1)

    flat_threshold = np.median(variances) * 1e-6  # 電極外れ検出

    log_vars = np.log10(np.maximum(variances, 1e-40))
    median_lv = np.median(log_vars)
    mad_lv = np.median(np.abs(log_vars - median_lv))
    z_scores = (log_vars - median_lv) / (mad_lv * 1.4826 + 1e-10)

    bad_channels = [
        ch for i, ch in enumerate(eeg_ch_names)
        if variances[i] < flat_threshold or z_scores[i] > 3.5
    ]
    if bad_channels:
        raw.info["bads"].extend(bad_channels)
    return raw

検出された不良チャンネルは、electrodes.tsv の3次元座標を使って球面スプライン補間で復元します。

def interpolate_bads_with_tsv(raw, file_path):
    if not raw.info["bads"]:
        return raw
    elec_candidates = list(Path(file_path).parent.glob("*_electrodes.tsv"))
    if not elec_candidates:
        return raw
    elec_df = pd.read_csv(elec_candidates[0], sep="\t")
    channel_df = pd.read_csv(
        Path(file_path).parent / Path(file_path).name.replace("_eeg.edf", "_channels.tsv"),
        sep="\t"
    )
    ch_positions = {}
    for _, row in channel_df.iterrows():
        elec_row = elec_df[elec_df["name"] == row["name"]]
        if not elec_row.empty and not pd.isna(row.get("description")):
            ch_positions[str(row["description"])] = [
                float(elec_row["x"].iloc[0]),
                float(elec_row["y"].iloc[0]),
                float(elec_row["z"].iloc[0]),
            ]
    if not ch_positions:
        return raw
    montage = mne.channels.make_dig_montage(ch_pos=ch_positions)
    raw.set_montage(montage, on_missing="ignore", verbose=False)
    raw.interpolate_bads(reset_bads=True, verbose=False)
    return raw

raw = mark_bad_channels(raw)
raw = interpolate_bads_with_tsv(raw, file_path)

第2段階:大振幅ノイズ区間のアノテーション

咳や体動などの突発的な大振幅ノイズを BAD としてマークします。後のICAは reject_by_annotation=True によってこの区間を自動的に除外して学習します。

def annotate_extreme_artifacts(raw):
    annots, _ = mne.preprocessing.annotate_amplitude(
        raw,
        peak=300e-6,     # ±300μV:咳・体動などの明らかな異常
        picks="eeg",
        bad_percent=5.0,
        verbose=False,
    )
    if len(annots) > 0:
        annots.description = np.array(["BAD_extreme_artifact"] * len(annots))
        raw.set_annotations(raw.annotations + annots)
    return raw

raw = annotate_extreme_artifacts(raw)

第3段階:ICAによる持続的アーチファクトの除去

ICA(独立成分分析)を使い、眼球運動(EOG)と筋電ノイズ(EMG)を分離・除去します。

ICA学習前に1Hzのハイパスフィルタをかけることで、低周波ドリフトによる学習の歪みを防ぎます。EMG成分の検出には find_bads_muscle() を使います(高周波70-150Hz帯のパワー比から検出)。

除外成分がゼロの場合は ica.apply() をスキップします。apply() は内部でPCAのホワイトニング往復を行うため、除外成分なしに実行すると数値誤差が蓄積してデータがゼロになるケースがあります。

def apply_ica_cleaning(raw):
    raw_for_ica = raw.copy().filter(l_freq=1.0, h_freq=None, verbose=False)

    ica = mne.preprocessing.ICA(n_components=15, random_state=97, max_iter="auto")
    ica.fit(raw_for_ica, reject_by_annotation=True, verbose=False)

    eog_ch_names = [ch for ch in raw.ch_names if "EOG" in ch.upper()]
    eog_indices, _ = ica.find_bads_eog(
        raw_for_ica, ch_name=eog_ch_names, threshold=2.0, verbose=False
    )
    emg_indices, _ = ica.find_bads_muscle(raw_for_ica, threshold=0.5, verbose=False)

    all_bad_components = list(set(eog_indices + emg_indices))

    # 除外成分なしにapply()するとPCAホワイトニングの数値誤差でデータがゼロになる
    if not all_bad_components:
        return raw

    ica.exclude = all_bad_components
    raw_cleaned = raw.copy()
    ica.apply(raw_cleaned, verbose=False)
    return raw_cleaned

raw = apply_ica_cleaning(raw)

ICA適用後、残存するスパイク状ノイズを持つチャンネルを再検出して補間します。

def mark_peak_bad_channels(raw):
    eeg_names = raw.copy().pick("eeg").ch_names
    peaks = np.max(np.abs(raw.get_data(picks="eeg")), axis=1)
    log_peaks = np.log10(np.maximum(peaks, 1e-40))
    median_lp = np.median(log_peaks)
    mad_lp = np.median(np.abs(log_peaks - median_lp))
    z_scores = (log_peaks - median_lp) / (mad_lp * 1.4826 + 1e-10)
    post_bads = [eeg_names[i] for i, z in enumerate(z_scores) if z > 3.5]
    if post_bads:
        raw.info["bads"].extend(post_bads)
    return raw

raw = mark_peak_bad_channels(raw)
raw = interpolate_bads_with_tsv(raw, file_path)

第4段階:AutoRejectによるエポック単位の最終クリーニング(任意)

イベントに基づいてエポック(試行)を切り出した後、AutoReject を使って残存するノイズエポックを機械学習で自動除去します。交差検証によりデータ駆動で最適な振幅閾値を推定し、ノイズが激しいエポックは除外、少数チャンネルのみ問題があれば補間して保持します。

from autoreject import AutoReject

def clean_epochs_with_autoreject(epochs):
    ar = AutoReject(n_interpolate=[1, 2, 3, 4], random_state=42, verbose=False)
    epochs_cleaned = ar.fit_transform(epochs)
    return epochs_cleaned

データの軽量化と保存

EEGチャンネルのみを残し、1-40Hzのバンドパスフィルタをかけて200Hzにダウンサンプリングします。上限40Hzにより真のガンマ波(40Hz超)は除去されます。40Hz以上を解析したい場合はこの上限を変更してください。

def reduce_data_size(raw, target_freq=200.0, target_picks="eeg"):
    raw_reduced = raw.copy().pick(target_picks, verbose=False)
    raw_reduced.filter(l_freq=1.0, h_freq=40.0, n_jobs=1, verbose=False)  # γ波(>40Hz)は除去される
    raw_reduced.resample(target_freq, n_jobs=1, verbose=False)
    return raw_reduced

raw_final = reduce_data_size(raw)
raw_final.save("sub-01_..._raw.fif.gz", overwrite=True, verbose=False)

3. 脳波の時間変化の可視化

前処理済みデータを使って、各周波数帯域(θ・α・β・γ)のパワーを頭皮上の2Dマップとしてアニメーション化します。

電極座標の取得とチャンネルの対応付け

def load_electrode_coords(tsv_path):
    electrodes_df = pd.read_csv(tsv_path, sep='\t')
    return {
        row['name']: np.array([float(row['x']), float(row['y']), float(row['z'])])
        for _, row in electrodes_df.iterrows()
    }

def align_channels_and_coords(raw, ch_pos):
    valid_chs, y_coords, z_coords = [], [], []
    for ch_name in raw.ch_names:
        if ch_name in ch_pos:
            pos = ch_pos[ch_name]
            valid_chs.append(ch_name)
            y_coords.append(pos[1])
            z_coords.append(pos[2])
    return valid_chs, np.array(y_coords), np.array(z_coords)

エポック単位のバンドパワー計算

FREQ_BANDS = {
    "Theta": (4, 8),
    "Alpha": (8, 13),
    "Beta":  (13, 30),
    "Gamma": (30, 80),  # 前処理の40Hz LPFにより30-40Hzまでが実質的な上限
}
VIDEO_FPS      = 4
PLAYBACK_SPEED = 1.0
STEP_SIZE      = PLAYBACK_SPEED / VIDEO_FPS

def compute_band_powers(raw, valid_chs, fmin, fmax,
                        window_size=0.5, step_size=STEP_SIZE):
    events = mne.make_fixed_length_events(raw, id=1, duration=step_size)
    epochs = mne.Epochs(
        raw, events, tmin=0, tmax=window_size,
        baseline=None, picks=valid_chs,
        preload=True, reject_by_annotation=True, verbose=False
    )
    psds = epochs.compute_psd(fmin=fmin, fmax=fmax, n_jobs=-1, verbose=False)
    valid_powers = psds.get_data().mean(axis=-1)

    # BAD区間除外後も時間軸を揃えるためNaN埋め
    all_powers = np.full((len(events), len(valid_chs)), np.nan)
    good_indices = [i for i, log in enumerate(epochs.drop_log) if not log]
    if good_indices:
        all_powers[good_indices] = valid_powers
    return all_powers

アニメーション動画の生成

imageioimageio_ffmpeg を使ってフレームを直接 MP4 に書き出します。

import matplotlib.pyplot as plt
import imageio
import imageio_ffmpeg
from tqdm.auto import tqdm

_FFMPEG_EXE = imageio_ffmpeg.get_ffmpeg_exe()

def create_eeg_animation(band_powers, y_coords, z_coords,
                         band_name, output_mp4="eeg_video.mp4",
                         fps=VIDEO_FPS):
    vmin_val = np.nanpercentile(band_powers, 5)
    vmax_val = np.nanpercentile(band_powers, 95)

    fig, ax = plt.subplots(figsize=(6, 6))
    ax.axis('off')
    ax.set_title(f"{band_name} band power")

    ry, rz = 95.0, 85.0
    theta = np.linspace(0, 2 * np.pi, 100)
    ax.plot(ry * np.cos(theta), rz * np.sin(theta), color='lightgray')
    ax.text(ry + 30, 0, "Nose", va='center', ha='center', fontweight='bold')
    ax.text(-15, -15, "L", va='center', ha='center', color='blue')

    scat = ax.scatter(
        y_coords, z_coords,
        c=band_powers[0], cmap='Reds',
        s=80, edgecolors='white',
        vmin=vmin_val, vmax=vmax_val
    )
    ax.invert_xaxis()
    plt.colorbar(scat, ax=ax, fraction=0.046, pad=0.04).set_label("Power (a.u.)")

    writer = imageio.get_writer(output_mp4, fps=fps, ffmpeg_exe=_FFMPEG_EXE)
    for frame_idx in tqdm(range(len(band_powers)), desc=f"Rendering {band_name}"):
        scat.set_array(band_powers[frame_idx])
        fig.canvas.draw()
        buf = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
        buf = buf.reshape(fig.canvas.get_width_height()[::-1] + (3,))
        writer.append_data(buf)
    writer.close()
    plt.close(fig)

実行例

preprocessed_raw = mne.io.read_raw_fif(
    "data/preprocessed/mne_cleaned/sub-01_ses-20230829_..._raw.fif.gz",
    preload=True
)

tsv_path = Path("data/raw/ds007808/sub-01/ses-20230829/eeg/sub-01_ses-20230829_electrodes.tsv")
ch_pos = load_electrode_coords(tsv_path)
valid_chs, y_coords, z_coords = align_channels_and_coords(preprocessed_raw, ch_pos)

raw_cropped = preprocessed_raw.copy().crop(tmax=600.0)

for band_name, (fmin, fmax) in FREQ_BANDS.items():
    powers = compute_band_powers(raw_cropped, valid_chs, fmin, fmax)
    create_eeg_animation(
        powers, y_coords, z_coords, band_name,
        output_mp4=f"data/interim/eeg_audio/{band_name}_power.mp4"
    )

まとめ(前処理)

段階 処理 特徴
第1段階 不良チャンネル検出 対数分散z-スコア(MAD基準)でスケール非依存な判定
第2段階 ノイズ区間アノテーション ±300μV単一閾値でシンプルかつ高速に検出
第3段階 ICA EOGはチャンネル相関、EMGはfind_bads_muscle()で周波数特性から検出
第4段階 エポッククリーニング AutoRejectがデータ駆動で最適な閾値を自動決定
動画生成 アニメーション imageioでフレームを直接MP4に書き出し、tqdmで進捗確認

この設計により、被験者ごとのノイズレベル差や機器のゲイン設定の違いに依存しない、汎用的な前処理パイプラインが実現できます。

eeg_sync.gif

評価

目的

音読タスク中の ERP を定量化し、発話に伴う皮質ネットワークの協調活動を検証します。

その背景として、MCI・認知症の進行に伴い、脳内の複数ネットワーク間の協調活動が低下することが知られています。音読のような複合的な認知タスクは運動野・言語野・聴覚野を同時に動員することから、認知予備力(Cognitive Reserve)を賦活・維持する介入として期待されています。

得られた脳活動指標は将来的に NFB システムに組み込み、音読タスクを通じた MCI 予防への応用を見据えています。

仮説

日本語音読タスクの遂行中は、発話直前と比べて GFP(Global Field Power)が増加する。

GFP は全電極の空間的電位ばらつき(標準偏差)であり、脳全体の皮質ネットワーク間の協調活動の強さを反映します。音読タスクでは、運動野(構音)・言語野(統語・意味処理)・聴覚野(フィードバック監視)が同時に活動するため、発話直前と比べて GFP が増加すると予測します。

評価方法

データ

項目 内容
データセット Japan EEG Dataset (ds007808, DATASET02)
被験者 sub-01(健常成人、1名)
セッション ses-20230829, run-01
タスク 日本語文章の音読(speechopen task)
EEG システム g.Pangolin 128ch(左半球配置)
サンプリング周波数 200 Hz(1〜40 Hz バンドパス処理済み)
有効試行数 50 試行(発話時間: 2.3〜14.5s, 中央値 4.6s)

前処理・エポック設定

- エポック長: -3.0〜+13.0s(t=0 = 発話開始)
- ベースライン補正: -2.5〜-0.5s(発話開始前の安定区間)
- 発話後 NaN マスク: 各試行で t ≥ duration_i をNaNで除外
- グランドアベレージ: nanmean(NaN除外後の有効試行のみ平均)

評価指標

GFP(Global Field Power) を主指標として用います。

GFP_trial(t) = std_ch(epoch_data[trial, :, t])   # 128ch の空間的標準偏差(μV)

比較ウィンドウ

ウィンドウ 時間範囲 説明
pre 窓 -0.5〜-0.05s 発話直前(ベースライン補正窓外)
safe 窓 0.05〜4.25s 発話中かつ n≥30 試行が確保できる信頼範囲

発話後のデータは試行によって欠損が増えるため、全50試行中 n≥30(60%以上)が確保できる 4.25s までを信頼範囲として採用しました。

統計検定

Wilcoxon signed-rank test(対応あり): 正規分布を仮定せず、50試行の pre vs safe を対応付けて比較します。また、0.5s幅の時間窓(計8窓)それぞれでも同様の検定を実施し、効果の方向の一貫性を確認します。


結果

プロット① Butterfly + GFP エンベロープ

発話開始(t=0, 白破線)を境に、全128チャンネルの電位が一斉に変動し始めます。GFP エンベロープ(白帯)で示される全体の協調活動が、発話直後から変化する様子が確認できます。

プロット①: Butterfly + GFP エンベロープ

  • 白帯: GFP エンベロープ(grand average の全ch標準偏差 = 空間的協調活動の指標)
  • 橙線: 全チャンネル平均 ERP
  • 右軸: 各時刻での有効試行数(発話後 NaN 除外により徐々に減少)

プロット② ch×time ヒートマップ

左半球128チャンネルを前頭(上)→後頭(下)の解剖学的順にソートし、発話前後の電位パターンを可視化しました。

プロット②: ch×time ヒートマップ

  • 縦軸: チャンネル(前頭→側頭→後頭の順)
  • : 電位(赤=正, 青=負, 単位μV)
  • 前頭・側頭・後頭がそれぞれ異なるタイミング・極性で応答しており、前頭-側頭-後頭にわたる広域ネットワーク全体の動員が確認できます

プロット③ GFP 増加傾向(統計的サポート)

プロット③: GFP 増加傾向 3パネル

指標
全 safe 期間 GFP 変化率 +7.4%
Wilcoxon p 値 p = 0.054
0.5s 窓ごとの方向 8/8 窓が正方向
  • 左パネル: per-trial GFP の時系列。発話直前(灰シェード)より発話中(青シェード)で平均的に高い
  • 中パネル: 各試行の pre vs safe の対応比較。青線(増加)が多数を占める
  • 右パネル: 全8つの 0.5s 窓すべてで GFP が正方向に変化している

考察

音読タスク中の GFP は、発話直前と比べて 全 safe 期間で +7.4%(Wilcoxon p=0.054)の増加傾向を示しました。この傾向は 0.05〜4.25s の全 8/8 の時間窓にわたって一貫して正方向であり、持続的な協調活動の増加を示唆します。

この結果は、日本語音読タスクが複数の皮質ネットワーク(運動野・言語野・聴覚野)を同時に動員し、左半球全体での空間的協調活動を高めることと整合します。MCI・認知症予防の文脈では、このような広域ネットワークの同時活性がシナプス可塑性を促進し、認知予備力の維持につながると考えられています。

NFB システムへの応用として、この GFP 増加をリアルタイムで検出・フィードバックする指標として活用することで、日常的な音読セッション中にユーザーの神経活動を認知症予防に有効な方向へ誘導できる可能性があります。

本分析の限界

限界 内容 対策案
統計力の不足 1 run(50試行)では検出力が約30%(p<0.05 達成には約150〜200試行が必要) 6 run 以上を統合(約300試行)すれば有意性が確認できる見込み
単一被験者 sub-01 のみのデータでは個人差・一般化可能性が不明 複数被験者への展開と group-level 解析が必要
単一指標評価 GFP のみの評価であり、特定周波数帯(α抑制, γ増加等)は未検証 6 run 統合後に TFR 解析(TF-ERP)を追加実施
単一タスク 特定のタスクのみで検証したため、タスク間で差異があるかが確認できていない タスク横断的に実行し、タスク間での違いを分析する

まとめ

Japan EEGデータセットは、日本語話者の脳活動を研究する上で強力なデータセットとなります。ぜひお手元の環境で可視化を試してみてください。

参考

IGSAについて

IGSAは、社会を温かく柔らかく持続的に支えるAIシステムにより、持続可能な幸せを目指す、東京大学松尾・岩澤研究室発のAIカンパニーです。
脳の健康管理アプリ「はなしてね」や、中古品の画像解析SaaS「スグトリ」などのAIプロダクト提供に加え、潜在的な課題に対し柔軟な開発支援を行うパートナー事業を展開。センシングAI技術を活用した状態の定量化と分析により、人の意思決定をサポートしています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?