المحطة 8 · الدرس 4
التصميم والمتغيّرات
animal_mine.study (D6) · ما طُبّق عليه قبل هذا الدرس: إنشاء STUDYتنزيل البيانات (يفتح في نافذة جديدة)سكربت الوصول لهذه الحالة
[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 ويحسب بلا خطأ، لكن لسؤال غير سؤالك.
قبل وبعد
أسئلتك بعد هذا، كل جواب في قسمه:
لماذا أحتاج هذه الخطوة؟
السبب بالتفصيل، والمصطلحات التي تحتاجها
وفي التصميم يقرر EEGLAB نوع الاختبار: هل القيم من نفس المشاركين (paired) أم من مشاركين مختلفين (unpaired)؟ هذا يغيّر النتيجة الإحصائية كثيراً.
لماذا أحتاج هذه الخطوة؟
وفي التصميم يقرر EEGLAB نوع الاختبار: هل القيم من نفس المشاركين (paired) أم من مشاركين مختلفين (unpaired)؟ هذا يغيّر النتيجة الإحصائية كثيراً.
كيف أطبّقها في EEGLAB؟
14 خطوة من القوائم
عن البيانات (D6): نفس animal_mine.study من درس الإنشاء. كل مشارك رأى الصورتين (animal و distractor)، فنوع الصورة داخل المشاركwithin-subjectمقارنة شروط سجّلها نفس المشارك.. وكل مشارك له جنس واحد (7 نساء و 7 رجال)، فالجنس بين المشاركين. معاً: تصميم مختلط 2×2.
أولاً: انظر إلى التصميم الذي أنشأه EEGLAB
- شغّل سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. “نقطة البداية” إذا لم تكن الـ STUDY مفتوحة.
- افتح Study ثم Select/Edit study design(s). تفتح نافذة Edit STUDY design — pop_studydesign().
- في Design name تصميم واحد اسمه
STUDY.design 1. أنشأه EEGLAB وحده عند إنشاء الـ STUDY. - في الجزء Edit the independent variables for this design سطران:
Categorical variable: condition - Values (animal - distractor)وCategorical variable: group - Values (F - M). EEGLAB يضع في التصميم الأول كل متغيّر قياسي له أكثر من قيمة.
ثانياً: أنشئ التصميم 2 باسم واضح
- اضغط New بجانب قائمة التصاميم. يظهر
Design 2بلا متغيّرات. - اضغط Rename، واكتب في Study design name: الاسم
image x gender، ثم Ok. - في جزء المتغيّرات اضغط New. تفتح نافذة Add variable.
- في Select independent variable اختر
condition. تتحدد القيمتانanimalوdistractorفي Select variable values. أبقهما محددتين، ثم Ok. - اضغط New مرة أخرى، واختر
group، وأبقِFوMمحددتين، ثم Ok.
ثالثاً: أنشئ التصميم 3 بمتغيّر واحد
- اضغط New بجانب قائمة التصاميم، ثم Rename باسم
image only. - أضف متغيّراً واحداً فقط:
conditionبقيمتيه.
رابعاً: اختر التصميم الحالي واحفظ
- اضغط على
image x genderفي قائمة Design name. التصميم المحدد عند الضغط على Ok يصير التصميم الحالي. - أبقِ Re-save STUDY file (if saved previously) مفعّلاً، فيُحفظ
animal_mine.studyبتصاميمه الثلاثة. - اضغط Ok. في نافذة الأوامر:
Selecting STUDY design 2ثمResaving STUDY.
إذا جاءت الـ STUDY من BIDS، اعرض التعريفBIDS
معيار موحّد لتسمية ملفات البيانات العصبية وتنظيمها في مجلدات. (الدرس السابق)، فالجنس في حقلfield (in a struct)جزء مسمّى داخل struct يحمل قيمة، مثل EEG.srate. اسمه gender لا في group. يظهر gender في نفس قائمة Select independent variable، ويعمل بنفس الطريقة.
إذا جاءت الـ STUDY من BIDS، اعرض التعريفBIDS
معيار موحّد لتسمية ملفات البيانات العصبية وتنظيمها في مجلدات. (الدرس السابق)، فالجنس في حقلfield (in a struct)جزء مسمّى داخل struct يحمل قيمة، مثل EEG.srate. اسمه gender لا في group. يظهر gender في نفس قائمة Select independent variable، ويعمل بنفس الطريقة.
كيف أطبّقها في EEGLAB؟
عن البيانات (D6): نفس animal_mine.study من درس الإنشاء. كل مشارك رأى الصورتين (animal و distractor)، فنوع الصورة داخل المشارك. وكل مشارك له جنس واحد (7 نساء و 7 رجال)، فالجنس بين المشاركين. معاً: تصميم مختلط 2×2.
أولاً: انظر إلى التصميم الذي أنشأه EEGLAB
- شغّل سكربت “نقطة البداية” إذا لم تكن الـ STUDY مفتوحة.
- افتح Study ثم Select/Edit study design(s). تفتح نافذة Edit STUDY design — pop_studydesign().
- في قائمة Design name تصميم واحد اسمه
STUDY.design 1. أنشأه EEGLAB وحده عند إنشاء الـ STUDY. - في الجزء Edit the independent variables for this design سطران:
Categorical variable: condition - Values (animal - distractor)وCategorical variable: group - Values (F - M). EEGLAB يضع في التصميم الأول كل متغيّر قياسي له أكثر من قيمة.
ثانياً: أنشئ التصميم 2 باسم واضح
- اضغط New بجانب قائمة التصاميم. يظهر
Design 2بلا متغيّرات. - اضغط Rename، واكتب في Study design name: الاسم
image x gender، ثم Ok. - في جزء المتغيّرات اضغط New. تفتح نافذة Add variable.
- في Select independent variable اختر
condition. تتحدد القيمتانanimalوdistractorفي Select variable values. أبقهما محددتين، ثم Ok. - اضغط New مرة أخرى، واختر
group، وأبقِFوMمحددتين، ثم Ok.
ثالثاً: أنشئ التصميم 3 بمتغيّر واحد
- اضغط New بجانب قائمة التصاميم، ثم Rename باسم
image only. - أضف متغيّراً واحداً فقط:
conditionبقيمتيه.
رابعاً: اختر التصميم الحالي واحفظ
- اضغط على
image x genderفي قائمة Design name. التصميم المحدد عند الضغط على Ok يصير التصميم الحالي. - أبقِ Re-save STUDY file (if saved previously) مفعّلاً، فيُحفظ
animal_mine.studyبتصاميمه الثلاثة. - اضغط Ok. في نافذة الأوامر:
Selecting STUDY design 2ثمResaving STUDY.
إذا جاءت الـ STUDY من BIDS
(الدرس السابق)، فالجنس في حقل اسمه gender لا في group. يظهر gender في نفس قائمة Select independent variable، ويعمل بنفس الطريقة.
إذا جاءت الـ STUDY من BIDS
(الدرس السابق)، فالجنس في حقل اسمه gender لا في group. يظهر gender في نفس قائمة Select independent variable، ويعمل بنفس الطريقة.
كيف أكتبها بالكود؟
نفس الخطوات في 25 أسطر 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;كيف أكتبها بالكود؟
% 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 |
| يُكتب عادة في | condition | group |
| الاختبار | 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. |
أي قيمة أختار؟
داخل المشارك أم بين المشاركين؟
| داخل المشارك (within) | بين المشاركين (between) | |
|---|---|---|
| المعنى | كل مشارك له كل القيم | كل مشارك له قيمة واحدة |
| في D6 | نوع الصورة: animal و distractor | الجنس: F و M |
| يُكتب عادة في | condition | group |
| الاختبار | 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).
مصدر البيانات
البيانات: نسخة STUDY من SCCN/Delorme. البيانات الأصلية: OpenNeuro ds002680 (CC0).
كيف أتأكد أنها نجحت؟
- قائمة 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).
مصدر البيانات
البيانات: نسخة STUDY من SCCN/Delorme. البيانات الأصلية: OpenNeuro ds002680 (CC0).
ما الأخطاء التي يقع فيها كثيرون؟
5 أخطاء، وكيف تتجنّبها
- نسيان اختيار التصميم الحالي. الرسم والإحصاء يعملان على التصميم المحدد في القائمة عند آخر Ok. السكربت يطبع
Current design. - وضع متغيّر بين المشاركين في condition. إذا كتبت الجنس كشرط، يظن EEGLAB أنه داخل المشارك. السطر
pairedيكشف ذلك: الجنس يجب أن يكونoff. - تصميم واحد لكل الأسئلة. التصميم 2×2 يجيب عن التفاعل، لكن أثر الصورة وحده أبسط في القراءة في تصميم بمتغيّر واحد: منحنيان بدل أربعة، واختبار paired مباشر.
- اختيار قيم ناقصة. إذا حددت
animalفقط في Select variable values، لا توجد مقارنة. تأكد من القيمتين. - الظن أن تغيير التصميم يحتاج حساباً جديداً. منذ EEGLAB 2019 تُحفظ محاولةtrialتكرار واحد للمهمة في التجربة، غالباً حول مثير واحد. منفردة، والتصميم يختارها وقت الرسم. لا تعيد الحساب المسبق بسبب تصميم جديد.
ما الأخطاء التي يقع فيها كثيرون؟
- نسيان اختيار التصميم الحالي. الرسم والإحصاء يعملان على التصميم المحدد في القائمة عند آخر Ok. السكربت يطبع
Current design. - وضع متغيّر بين المشاركين في condition. إذا كتبت الجنس كشرط، يظن EEGLAB أنه داخل المشارك. السطر
pairedيكشف ذلك: الجنس يجب أن يكونoff. - تصميم واحد لكل الأسئلة. التصميم 2×2 يجيب عن التفاعل، لكن أثر الصورة وحده أبسط في القراءة في تصميم بمتغيّر واحد: منحنيان بدل أربعة، واختبار paired مباشر.
- اختيار قيم ناقصة. إذا حددت
animalفقط في Select variable values، لا توجد مقارنة. تأكد من القيمتين. - الظن أن تغيير التصميم يحتاج حساباً جديداً. منذ EEGLAB 2019 تُحفظ المحاولات منفردة، والتصميم يختارها وقت الرسم. لا تعيد الحساب المسبق بسبب تصميم جديد.
متصفحك لا يسمح بحفظ التقدّم. كل الدروس متاحة، لكن علامات الإكمال لن تُحفظ.
تم. حُفظ تقدّمك في هذا المتصفح.تراجعكيف أكتبها في ورقتي؟
قالب 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).كيف أكتبها في ورقتي؟
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
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 Tutorialتوثيق10. Group analysis > c. STUDY designs
- EEGLAB Tutorialتوثيق11. Scripting > Creating a STUDY
- Introduction to the EEGLAB STUDY and Study Design by Arnaud Delormeفيديوالفيديو كاملاً · 39:05
- Go-nogo categorization and detection task (OpenNeuro ds002680)participants.tsv
مكتوب لـ EEGLAB 2026.1 · 2026-10-28
للتوسّع
- EEGLAB Tutorial: https://eeglab.org/tutorials/10_Group_analysis/working_with_study_designs.html (10. Group analysis > c. STUDY designs)
- EEGLAB Tutorial: https://eeglab.org/tutorials/11_Scripting/command_line_study_functions.html (11. Scripting > Creating a STUDY)
- Introduction to the EEGLAB STUDY and Study Design by Arnaud Delorme: https://www.youtube.com/watch?v=HAGrNeh-kgA (الفيديو كاملاً)
- Go-nogo categorization and detection task (OpenNeuro ds002680): https://openneuro.org/datasets/ds002680 (participants.tsv)
تحتاج مساعدة؟
اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ
- بلّغ عن خطأ علمي · يحتاج حساباً على GitHub. لا تملك حساباً؟ استخدم "شاركنا رأيك".