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

التصميم والمتغيّرات

أساسي15 دقيقةقبل هذا الدرس: إنشاء STUDY (قريباً)اطبع البطاقة
تبدأ من: animal_mine.study (D6) · ما طُبّق عليه قبل هذا الدرس: إنشاء STUDYتنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
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;

% Convert the old .dat data files to .fdt once: resaving them in their old format damages the data in EEGLAB 2026.1
setFiles = dir(fullfile(studyDir, '*', '*.set'));
for k = 1:numel(setFiles)
    [~, base] = fileparts(setFiles(k).name);
    folder = setFiles(k).folder;
    if ~exist(fullfile(folder, [base '.fdt']), 'file')
        TMP = pop_loadset('filename', setFiles(k).name, 'filepath', folder);
        pop_saveset(TMP, 'filename', setFiles(k).name, 'filepath', folder, 'savemode', 'twofiles');
        if exist(fullfile(folder, [base '.fdt']), 'file') && exist(fullfile(folder, [base '.dat']), 'file')
            delete(fullfile(folder, [base '.dat']));
        end
    end
end

% Rebuild animal_mine.study (create-study lesson) if it is missing
if ~exist(fullfile(studyDir, 'animal_mine.study'), 'file')
    gender = containers.Map( ...
        {'cba','clm','ega','fsa','gro','hth','lmi','mba','mma','mta','pla','sce','sph','wpa'}, ...
        {'F',  'F',  'F',  'M',  'M',  'M',  'F',  'F',  'M',  'F',  'M',  'F',  'M',  'M'});
    files = dir(fullfile(studyDir, '*', '*.set'));
    commands = {};
    for k = 1:numel(files)
        hdr = pop_loadset('filename', files(k).name, 'filepath', files(k).folder, 'loadmode', 'info');
        subj = hdr.subject;
        if isempty(subj), [~, subj] = fileparts(files(k).folder); end
        cond = hdr.condition;
        if isempty(cond)
            if contains(files(k).name, 'distractor'), cond = 'distractor'; else, cond = 'animal'; end
        end
        if ~isKey(gender, lower(subj))
            error('No gender entry for subject %s (%s)', subj, files(k).name);
        end
        commands{end+1} = {'index', k, 'load', fullfile(files(k).folder, files(k).name), ...
            'subject', subj, 'condition', cond, 'group', gender(lower(subj))};
    end
    [STUDY, ALLEEG] = std_editset([], [], 'name', 'Go-nogo animal (mine)', ...
        'task', 'Go-nogo categorization', 'commands', commands, 'updatedat', 'on');
    STUDY = pop_savestudy(STUDY, ALLEEG, 'filename', 'animal_mine.study', ...
        'filepath', studyDir, 'resavedatasets', 'on');
end
[STUDY, ALLEEG] = pop_loadstudy('filename', 'animal_mine.study', 'filepath', studyDir);

CURRENTSTUDY = 1; EEG = ALLEEG; CURRENTSET = 1:length(EEG);
eeglab redraw;

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

الـ STUDYبنية في EEGLAB تجمع داتاست عدة مشاركين لتحليلها معاً. تعرف لكل ملف مشاركparticipantالشخص الذي سُجّلت بياناته في التجربة. شرطconditionحالة تجريبية نقارن بينها وبين غيرها، مثل "مألوف" و"غير مألوف". والمجموعة. لكنها لا تعرف سؤالك. تصميمdesignتحديد الشروط والمجموعات التي يقارن بينها STUDY. (design) هو السؤال مكتوباً بلغة EEGLAB: أي متغيّرات تقارن، وأي قيم منها، وأي مشاركين.

كل رسم وكل اختبار في الدروس التالية يعمل على التصميم الحالي. إذا اخترت تصميماً خاطئاً، يرسم EEGLAB ويحسب بلا خطأ، لكن لسؤال غير سؤالك.

قبل وبعد

شبكة 2×2. العمودان animal و distractor مظلّلان بلونين، وهما متغيّر داخل المشارك، وبينهما سهم مزدوج مكتوب عليه نفس المشاركين: paired. الصفان F و M متغيّر بين المجموعات، وبينهما خط فاصل مكتوب عليه مشاركون مختلفون: unpaired. في كل خلية دوائر صغيرة برموز المشاركين: سبع في كل صف، ونفس الدوائر تتكرر في العمودين.
رسم توضيحي، بلا بيانات

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

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

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

وفي التصميم يقرر EEGLAB نوع الاختبار: هل القيم من نفس المشاركين (paired) أم من مشاركين مختلفين (unpaired)؟ هذا يغيّر النتيجة الإحصائية كثيراً.

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

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

عن البيانات (D6): نفس animal_mine.study من درس الإنشاء. كل مشارك رأى الصورتين (animal و distractor)، فنوع الصورة داخل المشاركwithin-subjectمقارنة شروط سجّلها نفس المشارك.. وكل مشارك له جنس واحد (7 نساء و 7 رجال)، فالجنس بين المشاركين. معاً: تصميم مختلط 2×2.

أولاً: انظر إلى التصميم الذي أنشأه EEGLAB

  1. شغّل سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. “نقطة البداية” إذا لم تكن الـ STUDY مفتوحة.
  2. افتح Study ثم Select/Edit study design(s). تفتح نافذة Edit STUDY design — pop_studydesign().
  3. في قائمةmenuمجموعة أوامر تظهر عند الضغط على اسمها في أعلى النافذة. Design name تصميم واحد اسمه STUDY.design 1. أنشأه EEGLAB وحده عند إنشاء الـ STUDY.
  4. في الجزء Edit the independent variables for this design سطران: Categorical variable: condition - Values (animal - distractor) و Categorical variable: group - Values (F - M). EEGLAB يضع في التصميم الأول كل متغيّر قياسي له أكثر من قيمة.

ثانياً: أنشئ التصميم 2 باسم واضح

  1. اضغط New بجانب قائمة التصاميم. يظهر Design 2 بلا متغيّرات.
  2. اضغط Rename، واكتب في Study design name: الاسم image x gender، ثم Ok.
  3. في جزء المتغيّرات اضغط New. تفتح نافذة Add variable.
  4. في Select independent variable اختر condition. تتحدد القيمتان animal و distractor في Select variable values. أبقهما محددتين، ثم Ok.
  5. اضغط New مرة أخرى، واختر group، وأبقِ F و M محددتين، ثم Ok.

ثالثاً: أنشئ التصميم 3 بمتغيّر واحد

  1. اضغط New بجانب قائمة التصاميم، ثم Rename باسم image only.
  2. أضف متغيّراً واحداً فقط: condition بقيمتيه.

رابعاً: اختر التصميم الحالي واحفظ

  1. اضغط على image x gender في قائمة Design name. التصميم المحدد عند الضغط على Ok يصير التصميم الحالي.
  2. أبقِ Re-save STUDY file (if saved previously) مفعّلاً، فيُحفظ animal_mine.study بتصاميمه الثلاثة.
  3. اضغط Ok. في نافذة الأوامر: Selecting STUDY design 2 ثم Resaving STUDY.
إذا جاءت الـ STUDY من BIDS، اعرض التعريفBIDS

معيار موحّد لتسمية ملفات البيانات العصبية وتنظيمها في مجلدات. (الدرس السابق)، فالجنس في حقلfield (in a struct)جزء مسمّى داخل struct يحمل قيمة، مثل EEG.srate. اسمه gender لا في group. يظهر gender في نفس قائمة Select independent variable، ويعمل بنفس الطريقة.

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

نفس الخطوات في 25 أسطر MATLAB
MATLAB
% STUDY and ALLEEG come from the starting point script
% Design 2: image (within subjects) x gender (between subjects)
STUDY = std_makedesign(STUDY, ALLEEG, 2, 'name', 'image x gender', ...
    'variable1', 'condition', 'values1', {'animal', 'distractor'}, 'vartype1', 'categorical', ...
    'variable2', 'group', 'values2', {'F', 'M'}, 'vartype2', 'categorical');

% Design 3: image only, all participants in one group
STUDY = std_makedesign(STUDY, ALLEEG, 3, 'name', 'image only', ...
    'variable1', 'condition', 'values1', {'animal', 'distractor'}, 'vartype1', 'categorical', ...
    'variable2', 'none');

% Make design 2 the current design and save
STUDY = std_selectdesign(STUDY, ALLEEG, 2);
STUDY = pop_savestudy(STUDY, ALLEEG, 'savemode', 'resave');

% Every design with its variables, values and pairing
for k = 1:numel(STUDY.design)
    d = STUDY.design(k);
    fprintf('Design %d: %s\n', k, d.name);
    for v = 1:numel(d.variable)
        if ~isempty(d.variable(v).label)
            fprintf('   %-10s paired: %-4s values: %s\n', d.variable(v).label, ...
                d.variable(v).pairing, strjoin(d.variable(v).value, ' '));
        end
    end
end
fprintf('Current design: %d\n', STUDY.currentdesign);
eeglab redraw;

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

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

داخل المشارك أم بين المشاركين؟

داخل المشارك (within)بين المشاركين (between)
المعنىكل مشارك له كل القيمكل مشارك له قيمة واحدة
في D6نوع الصورة: animal و distractorالجنس: F و M
يُكتب عادة فيconditiongroup
الاختبارpaired: يقارن كل مشارك بنفسه، فيزيل الفروق بين الأشخاصunpaired: يقارن مجموعتين من أشخاص مختلفين
القوة الإحصائيةأعلى مع نفس العددأقل، وتحتاج مشاركين أكثر

EEGLAB يقرر paired أو unpaired وحده من البيانات: إذا كان كل المشاركين في كل القيم فهو paired. السكربت يطبع القرار في السطر paired: on أو paired: off.

أي تصميم لأي سؤال؟

سؤالكالتصميملماذا
هل يختلف الـ ERPمتوسط استجابة الدماغ لحدث معيّن عبر محاولات كثيرة. بين صورة الحيوان وغيرها؟3، image onlyاختبار paired مباشر على 14 مشاركاً، ورسم بمنحنيين بدل أربعة. التصميم 2×2 يحسب أثر الصورة الرئيسي أيضاً، لكن قراءته أصعب.
هل يختلف أثر الصورة بين النساء والرجال؟2، image x genderالتفاعل بين المتغيّرين يحتاج الاثنين في تصميم واحد.
هل يختلف الـ ERP بين النساء والرجال؟تصميم بمتغيّر group فقطunpaired، 7 مقابل 7.

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

4 فحوص سريعة
  • قائمة Design name فيها ثلاثة تصاميم: STUDY.design 1 و image x gender و image only.
  • السكربت يطبع للتصميم 2 السطرين condition paired: on و group paired: off.
  • السكربت يطبع Current design: 2.
  • بعد File ثم Clear study / Clear all ثم فتح animal_mine.study من جديد، تبقى التصاميم الثلاثة في النافذة.
مصدر البيانات

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

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

5 أخطاء، وكيف تتجنّبها
  • نسيان اختيار التصميم الحالي. الرسم والإحصاء يعملان على التصميم المحدد في القائمة عند آخر Ok. السكربت يطبع Current design.
  • وضع متغيّر بين المشاركين في condition. إذا كتبت الجنس كشرط، يظن EEGLAB أنه داخل المشارك. السطر paired يكشف ذلك: الجنس يجب أن يكون off.
  • تصميم واحد لكل الأسئلة. التصميم 2×2 يجيب عن التفاعل، لكن أثر الصورة وحده أبسط في القراءة في تصميم بمتغيّر واحد: منحنيان بدل أربعة، واختبار paired مباشر.
  • اختيار قيم ناقصة. إذا حددت animal فقط في Select variable values، لا توجد مقارنة. تأكد من القيمتين.
  • الظن أن تغيير التصميم يحتاج حساباً جديداً. منذ EEGLAB 2019 تُحفظ محاولةtrialتكرار واحد للمهمة في التجربة، غالباً حول مثير واحد. منفردة، والتصميم يختارها وقت الرسم. لا تعيد الحساب المسبق بسبب تصميم جديد.

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

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

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

A 2 × 2 mixed design was defined in the STUDY, with image category (animal, distractor) as a within-subject factor and gender ([7] female, [7] male) as a between-subject factor (std_makedesign, EEGLAB 2026.1).

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

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

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

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

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