المحطة 8 · الدرس 1

ما هو STUDY ومتى تحتاجه

أساسي10 دقائققبل هذا الدرس: ERP والمتوسطاتاطبع البطاقة
تبدأ من: animal.study (D6) · لا شيء: البيانات كما نزّلتها.تنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
MATLAB
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
% Folder for the course data (change it)
dataFolder = 'C:\Users\me\Documents\eeg-course';

% Download the ready Go-nogo STUDY once and unzip it in its own folder
zipDir = fullfile(dataFolder, 'animal_study');
studyFile = dir(fullfile(zipDir, '**', 'animal.study'));
if isempty(studyFile)
    zipFile = fullfile(dataFolder, 'animal_study.zip');
    websave(zipFile, 'https://sccn.ucsd.edu/eeglab/download/animal_study.zip');
    unzip(zipFile, zipDir);
    studyFile = dir(fullfile(zipDir, '**', 'animal.study'));
end
studyDir = studyFile(1).folder;
fprintf('Go-nogo STUDY folder: %s\n', studyDir);
eeglab redraw;

الفكرة باختصار

حتى الآن عملت على تسجيل واحد مشاركparticipantالشخص الذي سُجّلت بياناته في التجربة. واحد. لكن سؤال البحث يكون عادة عن مجموعة: هل يختلف الـ ERPمتوسط استجابة الدماغ لحدث معيّن عبر محاولات كثيرة. بين صورتين عند أغلب المشاركين، لا عند شخص واحد؟

الـ STUDYبنية في EEGLAB تجمع داتاست عدة مشاركين لتحليلها معاً. في EEGLAB ملف فهرس لهذا السؤال. يحفظ قائمةmenuمجموعة أوامر تظهر عند الضغط على اسمها في أعلى النافذة. ملفات المشاركين، ولكل ملف المشارك شرطconditionحالة تجريبية نقارن بينها وبين غيرها، مثل "مألوف" و"غير مألوف". والمجموعة والجلسة. ويحفظ التصاميم والمقاييس المحسوبة مسبقاً. لكنه لا يدمج البيانات، ولا يعيد معالجتها.

قبل وبعد

أربعة ملفات .set لأربعة مشاركين تمر على ثلاث بوابات متتالية: نفس المعدل والنافذة، ثم نفس القنوات والأحداث، ثم نفس خطوات المعالجة. ملف المشارك 2 يقف عند البوابة الأولى بعلامة حمراء لأن معدله مختلف، والثلاثة الباقية تمر وتتصل بخطوط بملف واحد اسمه STUDY.
رسم توضيحي، بلا بيانات

أسئلتك بعد هذا، كل جواب في قسمه:

لماذا أحتاج هذه الخطوة؟

السبب بالتفصيل، والمصطلحات التي تحتاجها

لذلك يثق الـ STUDY بأن ملفاتك متشابهة في كل ما يهم. إذا اختلف المعدل أو نافذة الإيبوك أو أسماء حدثeventعلامة في التسجيل تحدد لحظة شيء مهم، مثل ظهور مثير. بين مشارك وآخر، تتعطل الدوال أو تخرج نتيجة خاطئة بصمت. هذا الدرس يعلّمك الفحص قبل الإنشاء.

كيف أطبّقها في EEGLAB؟

8 خطوة من القوائم

عن البيانات (D6): تجربة Go-nogo لـ 14 مشاركاً (Delorme وآخرون). تظهر صورة لمدة 20 ms، ويرفع المشارك إصبعه عن زر بأسرع ما يمكن إذا كان فيها حيوان، ويبقيه إذا لم يكن. نسخة EEGLAB الجاهزة كـ STUDY معالجة ومقطّعة مسبقاً، وفيها لكل مشارك ملف لصور الحيوانات (animal) وملف للصور الأخرى (distractor). الخام في OpenNeuro بصيغة BIDSمعيار موحّد لتسمية ملفات البيانات العصبية وتنظيمها في مجلدات.، ونستخدمه في درس الإنشاء من BIDS.

لماذا لا نكمل على D1؟ لأن D1 تسجيل لمشارك واحد، والـ STUDY تحتاج عدة مشاركين.

أولاً: نزّل البيانات وافتح المجلد

  1. شغّل سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. “نقطة البداية”. ينزّل animal_study.zip من صفحة بيانات EEGLAB ويفك ضغطه مرة واحدة، ويطبع مكان المجلد.
  2. افتح المجلد في مستعرض الملفات. فيه ملف animal.study الجاهز، ومجلد لكل مشارك باسم رمزه، من cba إلى wpa. في كل مجلد داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته.، مثل sphanimal.set و sphdistractor.set. بيانات كل داتاست في ملف .dat بجانبه (صيغة EEGLAB الأقدم؛ و cba وحده بياناته داخل .set). وسترى أيضاً ملفات مثل sphanimal.daterp و sphanimal.icaerp: مقاييس محسوبة مسبقاً بـ EEGLAB 6 سنة 2007. لا نستعملها، ويشرح درس الحساب المسبقprecomputeحساب ERP أو الطيف لكل مشارك وشرط وحفظه قبل الرسم والإحصاء في STUDY. السبب.
  3. لا تفتح animal.study الآن. نحن نفحص الملفات قبل أي STUDY.

ثانياً: افحص ملفاً من مشارك

  1. افتح File ثم Load existing dataset واختر animal_study/cba/cbaanimal.set، ملف الشرط animal لأول مشارك.
  2. اقرأ النافذة الرئيسية، وسجّل هذه القيم في ورقة: Channels per frame، Frames per epoch، Epochs، Sampling rate (Hz)، Epoch start (sec)، Epoch end (sec)، Reference، Channel locations، ICA weights.

ثالثاً: افحص ملفاً من مشارك آخر وقارن

  1. افتح animal_study/wpa/wpaanimal.set، ملف الشرط animal لآخر مشارك، بنفس الطريقة.
  2. قارن القيم بالورقة. كل القيم يجب أن تتطابق إلا Epochs، لأن عدد محاولةtrialتكرار واحد للمهمة في التجربة، غالباً حول مثير واحد. الباقية بعد رفضrejectionاستبعاد epochs أو بيانات لا تصلح للتحليل. يختلف طبيعياً بين الناس. في هذه النسخة ستقرأ 32 قناة، و 750 نقطة في الإيبوك، و 250 Hz، وإيبوكاً من -1 إلى 1.996 ثانية.
  3. السكربت أدناه يقارن نفس الملفين، بنفس القيم مع أسماء القنوات وأنواع الأحداث ونتائج ICLabel وثنائيات القطب، وهي أشياء لا تظهر في النافذة الرئيسية.

رابعاً: STUDY أم ALLEEG؟

ALLEEGSTUDY
ما هوقائمة الداتاست المفتوحة في الذاكرة الآنملف .study يصف مجموعة ملفات وعلاقتها ببعض
يعرف المشارك والشرطلا، إلا ما كتبته في كل داتاستنعم، لكل ملف
يحفظ التصاميم والمقاييس المحسوبةلانعم
يبقى بعد إغلاق EEGLABلانعم، وفتحه يعيد ملء ALLEEG
متى تستخدمهمقارنة سريعة بين ملفين أو ثلاثة لمشارك واحدأي تحليل لمجموعة مشاركين
الذاكرة مع عشرات المشاركين

مع عشرات المشاركين لا تتسع الذاكرة لكل الملفات. فعّل في File ثم Preferences الخيار If set, keep at most one dataset in memory. This allows processing hundreds of datasets within studies.، فيقرأ EEGLAB الملفات من القرص عند الحاجة. مع 14 مشاركاً هنا لا يلزم غالباً. عند إنشاء STUDY أو فتحها تظهر نافذة Study warning تقترح هذا الخيار، ودرس الإنشاء التالي يشرح ما تضغط.

كيف أكتبها بالكود؟

نفس الخطوات في 25 أسطر MATLAB
MATLAB
% studyDir comes from the starting point script
files = dir(fullfile(studyDir, '*', '*.set'));
fprintf('%d dataset files under %s\n', numel(files), studyDir);

% Header only (no data) of the animal file of the first and the last participant
animalFiles = files(contains({files.name}, 'animal'));
A = pop_loadset('filename', animalFiles(1).name,   'filepath', animalFiles(1).folder,   'loadmode', 'info');
B = pop_loadset('filename', animalFiles(end).name, 'filepath', animalFiles(end).folder, 'loadmode', 'info');

% Side-by-side check of what must match before a STUDY
show = @(label, a, b) fprintf('%-20s %-14s %-14s\n', label, num2str(a), num2str(b));
fprintf('%-20s %-14s %-14s\n', 'Property', animalFiles(1).name, animalFiles(end).name);
show('Sampling rate (Hz)', A.srate,  B.srate);
show('Channels',           A.nbchan, B.nbchan);
show('Points per epoch',   A.pnts,   B.pnts);
show('Epoch start (s)',    A.xmin,   B.xmin);
show('Epoch end (s)',      A.xmax,   B.xmax);
show('Epochs',             A.trials, B.trials);
show('ICA weights',        ~isempty(A.icaweights), ~isempty(B.icaweights));
show('ICA components',     size(A.icaweights, 1), size(B.icaweights, 1));
show('ICLabel results',    isfield(A.etc, 'ic_classification'), isfield(B.etc, 'ic_classification'));
show('Dipoles',            isfield(A.dipfit, 'model'), isfield(B.dipfit, 'model'));
fprintf('Same channel labels in the same order: %d\n', ...
    isequal({A.chanlocs.labels}, {B.chanlocs.labels}));

% Event types and their counts in each file
eeg_eventtypes(A);
eeg_eventtypes(B);

أي قيمة أختار؟

القيم المناسبة حسب هدف تحليلك

هذه قائمة الفحص قبل أي STUDY. “يجب” تعني أن الدوال تتعطل أو تخطئ إذا اختلفت.

ما تفحصهالقاعدةلماذا
معدل العيّناتيجب أن يتطابقEEGLAB يطبع عند الإنشاء تحذيراً على عدة أسطر يبدأ بـ IMPORTANT WARNING: SOME DATASETS DO NOT HAVE THE SAME SAMPLING، ثم تتعطل أغلب دوال STUDY.
نافذة الإيبوك وعدد النقاطيجب أن تتطابقالحساب المسبق يقارن نقطة زمنية بنقطة زمنية بين المشاركين.
أسماء القنواتيجب أن تكون بنفس نظام التسميةالـ STUDY تطابق القنوات بأسمائها (بلا فرق بين الحروف الكبيرة والصغيرة). T7 في ملف و T3 (الاسم القديم لنفس المكان) في آخر قناتان مختلفتان عندها.
القنوات المحذوفةالأفضل استيفاؤها لكل مشارك قبل STUDYيوجد خيار استيفاء في الحساب المسبق، لكن الاستيفاء في الملف نفسه أوضح ويُفحص بعينك.
أسماء الأحداث والشروطيجب أن تُكتب بنفس الطريقةكل كتابة مختلفة تصير شرطاً جديداً.
خطوات المعالجة (الفلتر، المرجع، الرفض)يجب أن تكون نفسهاالـ STUDY لا تتحقق منها أبداً. لهذا يأتي سكربت المعالجة الموحّد في المحطة 9.
أوزان ICA ونتائج ICLabelلازمة إذا أردت حذف مكوّنات معلّمة عند الحساب المسبقبدونها لا يوجد ما يُحذف.
ثنائيات القطبلازمة إذا أردت تجميع المكوّنات بمواقعهاهي أساس درس تجميع مكوّنات ICA.
عدد الإيبوكاتيختلف طبيعياًلكن مشاركاً بقي له عدد قليل جداً يضعف متوسطه. سجّل العدد لكل مشارك.

كيف أتأكد أنها نجحت؟

4 فحوص سريعة
  • السكربت يطبع عدد الملفات في المجلد، وهو 28 إذا كان لكل مشارك من الـ 14 ملفان.
  • كل الأسطر متطابقة بين الملفين إلا Epochs و ICA components، وسطر أسماء القنوات يطبع 1. عند cba 29 مكوّناً وعند wpa 31: عدد المكوّنات قد يختلف بين المشاركين، والتجميع لا يحتاج أن يتطابق.
  • eeg_eventtypes يطبع نفس أنواع الأحداث في ملفي animal، وهي Animal و rt، ولو اختلفت أعدادها. ملف distractor فيه Distractor فقط، لأن محاولات no-go بلا استجابة.
  • تعرف الجواب عن سؤال: هل في الملفات أوزان ICA وثنائيات قطب؟ هنا أوزان ICA وثنائيات القطب من المؤلفين موجودة (1 في السطرين)، ونتائج ICLabel غير موجودة (0). درس التجميع يُبقي ICA وثنائيات القطب، ويشغّل ICLabel.
مصدر البيانات

البيانات: نسخة STUDY من SCCN/Delorme. البيانات الأصلية: OpenNeuro ds002680 (CC0).

ما الأخطاء التي يقع فيها كثيرون؟

5 أخطاء، وكيف تتجنّبها
  • إنشاء STUDY قبل الفحص. الـ STUDY تُنشأ بلا خطأ حتى لو اختلفت الملفات، والمشكلة تظهر بعد ساعة عند الحساب المسبق.
  • الاعتماد على الاسم فقط. ملفان اسمهما clean قد يكونان بفلترين مختلفين. افتح EEG.history أو سجل الأوامر إذا شككت.
  • خلط بيانات مرشّحة بغير مرشّحة. مشارك عولج قبل سنة بإعدادات قديمة يبقى مختلفاً حتى لو تطابق كل ما في النافذة الرئيسية.
  • نسيان أن ICLabel يعمل لكل ملف. إذا شغّلته لبعض المشاركين فقط، يحذف الحساب المسبق مكوّنات من بعضهم ويترك الباقي.
  • بيانات بتردد كهرباء مختلف. D6 سُجّلت في فرنسا، فالكهرباء هناك 50 Hz. بياناتك في السعودية 60 Hz. هذا لا يهم داخل STUDY واحدة إذا عولجت كل ملفاتها بنفس الخطوات، لكنه يهم إذا دمجت بيانات من مختبرين.

كيف أكتبها في ورقتي؟

قالب Methods: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته

قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.

Before group analysis, the datasets of all [14] participants were checked for identical sampling rate, epoch limits, channel labels and event types (EEGLAB 2026.1).

أين أقرأ أكثر؟

4 مراجع: التوثيق الرسمي أولاً

مكتوب لـ EEGLAB 2026.1 · 2026-10-28

تحتاج مساعدة؟

اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ