المحطة 4 · الدرس 2
شروط كمية البيانات لـ ICA
eeglab_data.set (D1) · ما طُبّق عليه قبل هذا الدرس: فلترة high-pass و low-pass، إزالة ضوضاء الكهرباء (50 أو 60 هرتز)، القنوات السيئة، الاستيفاء (interpolation)، إعادة المرجع (re-referencing)تنزيل البيانات (يفتح في نافذة جديدة)سكربت الوصول لهذه الحالة
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
eeglabRoot = fileparts(which('eeglab'));
EEG = pop_loadset('eeglab_data.set', fullfile(eeglabRoot, 'sample_data'));
fullLocs = EEG.chanlocs;
% Main dataset: high-pass at 0.1 Hz, then 60 Hz line-noise removal
EEG = pop_eegfiltnew(EEG, 'locutoff', 0.1);
EEG = pop_eegfiltnew(EEG, 'locutoff', 58, 'hicutoff', 62, 'revfilt', 1);
% Bad channels you removed earlier, e.g. {'T7'}; leave empty if none
badChans = {};
if ~isempty(badChans)
EEG = pop_select(EEG, 'rmchannel', badChans);
EEG = pop_interp(EEG, fullLocs, 'spherical');
end
% Average reference, EOG channels excluded
eogIdx = find(ismember({EEG.chanlocs.labels}, {'EOG1', 'EOG2'}));
EEG = pop_reref(EEG, [], 'exclude', eogIdx);
EEG.filename = ''; EEG.filepath = ''; EEG.datfile = ''; EEG.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'D1 main', 'gui', 'off');
eeglab redraw;زر الرجوع في متصفحك يعيدك لنفس المكان الذي كنت فيه، فافتح ما تشاء بلا قلق.
الفكرة باختصار
ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. يتعلّم مصفوفة فصل فيها وزن لكل زوج من قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. ومكوّن. مع 32 قناة هذا 32 × 32 = 1024 وزناً. كل وزن يُتعلَّم من البيانات، فيحتاج ICA عدداً كافياً من نقاط البيانات ليتعلّمها كلها.
قبل وبعد
أسئلتك بعد هذا، كل جواب في قسمه:
لماذا أحتاج هذه الخطوة؟
السبب بالتفصيل، والمصطلحات التي تحتاجها
دليل EEGLAB الرسمي يعطي هذه القاعدة: لتجد N مكوّناً ثابتاً تحتاج عادة أكثر من k × N² نقطة بيانات في كل قناة. N² هو عدد الأوزانweights (ICA)المصفوفة التي تحوّل القنوات إلى مكوّنات ICA.، و k مضاعف: كم نقطة بيانات يأخذها كل وزن.
أهم أمرين:
- عدد المكوّنات يكبر بالتربيع. مضاعفة القنوات من 32 إلى 64 تحتاج أربعة أضعاف البيانات، لا ضعفين.
- k ليس رقماً ثابتاً. الدليل الرسمي يقول إن k يزيد كلما زاد عدد القنوات. مثاله 32 قناة ونحو 30 نقطة لكل وزن، ويقول إن 30 نقطة لكل وزن لا تبدو كافية حتى لـ 256 مكوّناً.
لماذا أحتاج هذه الخطوة؟
دليل EEGLAB الرسمي يعطي هذه القاعدة: لتجد N مكوّناً ثابتاً تحتاج عادة أكثر من k × N² نقطة بيانات في كل قناة. N² هو عدد الأوزان، و k مضاعف: كم نقطة بيانات يأخذها كل وزن.
أهم أمرين:
- عدد المكوّنات يكبر بالتربيع. مضاعفة القنوات من 32 إلى 64 تحتاج أربعة أضعاف البيانات، لا ضعفين.
- k ليس رقماً ثابتاً. الدليل الرسمي يقول إن k يزيد كلما زاد عدد القنوات. مثاله 32 قناة ونحو 30 نقطة لكل وزن، ويقول إن 30 نقطة لكل وزن لا تبدو كافية حتى لـ 256 مكوّناً.
كيف أطبّقها في EEGLAB؟
5 خطوة من القوائم
لا توجد لهذا الفحص. تقرأ ثلاثة أرقام من نافذة EEGLAB الرئيسية وتحسب بنفسك. ابدأ والنسخة الرئيسية D1 main مفتوحة كما في “نقطة البداية”.
- اقرأ Channels per frame: 32 في D1.
- اقرأ Frames per epoch: 30504 في D1. في البيانات المستمرة هذا عدد نقاط البيانات في كل قناة. وفي البيانات المقطّعة اضربه في Epochs.
- اقرأ Sampling rate (Hz): 128 في D1.
- احسب عدد المكوّنات: رتبة البياناتrankعدد القنوات المستقلة فعلاً في البيانات، ويقل بعد الاستيفاء أو المرجع المتوسط.، كما في درس تشغيل ICA. في D1 هي 32 ناقص 0 مستوفاة ناقص 1 للمرجع المتوسط = 31.
- اقسم: 30504 / 31² = 30504 / 961 ≈ 31.7 نقطة لكل وزن. هذا قريب من مثال الدليل الرسمي، وهو تقريباً نفس داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. التوتوريال (30800 نقطة و32 قناة)، فبيانات D1 كافية لـ 31 مكوّناً.
كيف أطبّقها في EEGLAB؟
لا توجد قائمة لهذا الفحص. تقرأ ثلاثة أرقام من نافذة EEGLAB الرئيسية وتحسب بنفسك. ابدأ والنسخة الرئيسية D1 main مفتوحة كما في “نقطة البداية”.
- اقرأ Channels per frame: 32 في D1.
- اقرأ Frames per epoch: 30504 في D1. في البيانات المستمرة هذا عدد نقاط البيانات في كل قناة. وفي البيانات المقطّعة اضربه في Epochs.
- اقرأ Sampling rate (Hz): 128 في D1.
- احسب عدد المكوّنات: رتبة البيانات، كما في درس تشغيل ICA. في D1 هي 32 ناقص 0 مستوفاة ناقص 1 للمرجع المتوسط = 31.
- اقسم: 30504 / 31² = 30504 / 961 ≈ 31.7 نقطة لكل وزن. هذا قريب من مثال الدليل الرسمي، وهو تقريباً نفس داتاست التوتوريال (30800 نقطة و32 قناة)، فبيانات D1 كافية لـ 31 مكوّناً.
كيف أكتبها بالكود؟
نفس الخطوات في 12 أسطر MATLAB
% How much data ICA has in the current dataset
nComp = EEG.nbchan - numel(badChans) - 1; % expected rank after average reference
nPoints = EEG.pnts * EEG.trials;
fprintf('Data points per channel: %d\n', nPoints);
fprintf('Recording length: %.2f min\n', nPoints / EEG.srate / 60);
fprintf('Points per weight, %d channels: %.1f\n', EEG.nbchan, nPoints / EEG.nbchan^2);
fprintf('Points per weight, %d components: %.1f\n', nComp, nPoints / nComp^2);
% Shortest recording that gives k = 30 points per weight at this sampling rate
k = 30;
for N = [32 64 128 256]
fprintf('%3d components: at least %.1f min\n', N, k * N^2 / EEG.srate / 60);
endفي D1 يطبع سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. 30504 نقطة، و3.97 دقيقة، و29.8 نقطة لكل وزن مع 32 قناة، و31.7 مع 31 مكوّناً. ثم أقصر الأطوال عند 128 هرتز: 4.0 و16.0 و64.0 و256.0 دقيقة.
لاحظ أن D1 أقل بقليل من 4 دقائق، أي على حدthresholdقيمة إذا تجاوزتها الإشارة اعتُبرت مشكلة. تماماً لـ k = 30 مع 32 قناة. المرجع المتوسطaverage referenceمرجع يساوي متوسط كل قنوات الرأس. يخفّض المكوّنات إلى 31، فيرجعها فوق الحد.
كيف أكتبها بالكود؟
% How much data ICA has in the current dataset
nComp = EEG.nbchan - numel(badChans) - 1; % expected rank after average reference
nPoints = EEG.pnts * EEG.trials;
fprintf('Data points per channel: %d\n', nPoints);
fprintf('Recording length: %.2f min\n', nPoints / EEG.srate / 60);
fprintf('Points per weight, %d channels: %.1f\n', EEG.nbchan, nPoints / EEG.nbchan^2);
fprintf('Points per weight, %d components: %.1f\n', nComp, nPoints / nComp^2);
% Shortest recording that gives k = 30 points per weight at this sampling rate
k = 30;
for N = [32 64 128 256]
fprintf('%3d components: at least %.1f min\n', N, k * N^2 / EEG.srate / 60);
endفي D1 يطبع السكربت 30504 نقطة، و3.97 دقيقة، و29.8 نقطة لكل وزن مع 32 قناة، و31.7 مع 31 مكوّناً. ثم أقصر الأطوال عند 128 هرتز: 4.0 و16.0 و64.0 و256.0 دقيقة.
لاحظ أن D1 أقل بقليل من 4 دقائق، أي على الحد تماماً لـ k = 30 مع 32 قناة. والمرجع المتوسط يخفّض المكوّنات إلى 31، فيرجعها فوق الحد.
أي قيمة أختار؟
القيم المناسبة حسب هدف تحليلك
الجدول يعطي أقصر تسجيل عند k = 30. اعتبره حداً أدنى، لأن k يجب أن يكبر مع عدد القنوات.
| المكوّنات | الأوزان (N²) | نقاط البيانات (k = 30) | دقائق عند 250 هرتز | دقائق عند 128 هرتز |
|---|---|---|---|---|
| 32 | 1024 | 30720 | 2.0 | 4.0 |
| 64 | 4096 | 122880 | 8.2 | 16.0 |
| 128 | 16384 | 491520 | 32.8 | 64.0 |
| 256 | 65536 | 1966080 | 131.1 | 256.0 |
متى تخفّض الرتبة بـ 'pca'؟
| الحالة | ماذا تفعل | لماذا |
|---|---|---|
| مرجع متوسط أو قنوات مستوفاة | المكوّنات = القنوات ناقص المستوفاة ناقص 1 | رتبة البيانات أقل، كما في درس تشغيل ICA. |
| التسجيل أقصر من حاجة كل المكوّنات | خفّض العدد بـ 'pca'، مثلاً 'pca', 20 | مكوّنات أقل تحتاج نقاطاً أقل. |
| بيانات كافية ورتبة كاملة | لا تخفّض | التوتوريال الرسمي: PCAطريقة تختصر البيانات إلى عدد أقل من الأبعاد. يفسد البيانات قليلاً، فالبيانات برتبتها الكاملة أفضل متى أمكن. |
أي قيمة أختار؟
الجدول يعطي أقصر تسجيل عند k = 30. اعتبره حداً أدنى، لأن k يجب أن يكبر مع عدد القنوات.
| المكوّنات | الأوزان (N²) | نقاط البيانات (k = 30) | دقائق عند 250 هرتز | دقائق عند 128 هرتز |
|---|---|---|---|---|
| 32 | 1024 | 30720 | 2.0 | 4.0 |
| 64 | 4096 | 122880 | 8.2 | 16.0 |
| 128 | 16384 | 491520 | 32.8 | 64.0 |
| 256 | 65536 | 1966080 | 131.1 | 256.0 |
متى تخفّض الرتبة بـ 'pca'؟
| الحالة | ماذا تفعل | لماذا |
|---|---|---|
| مرجع متوسط أو قنوات مستوفاة | المكوّنات = القنوات ناقص المستوفاة ناقص 1 | رتبة البيانات أقل، كما في درس تشغيل ICA. |
| التسجيل أقصر من حاجة كل المكوّنات | خفّض العدد بـ 'pca'، مثلاً 'pca', 20 | مكوّنات أقل تحتاج نقاطاً أقل. |
| بيانات كافية ورتبة كاملة | لا تخفّض | التوتوريال الرسمي: PCA يفسد البيانات قليلاً، فالبيانات برتبتها الكاملة أفضل متى أمكن. |
كيف أتأكد أنها نجحت؟
3 فحوص سريعة
- تعرف أرقامك: عدد القنوات، ونقاط البيانات في كل قناة، معدل العيّناتsampling rateعدد العيّنات المسجّلة في الثانية لكل قناة.، وعدد المكوّنات المتوقّع.
- النقاط لكل وزن: في D1 نحو 31.7 مع 31 مكوّناً.
- القرار مكتوب: بيانات كافية، أو عدد مكوّنات أقل بـ
'pca'مع سببه.
كيف أتأكد أنها نجحت؟
- تعرف أرقامك: عدد القنوات، ونقاط البيانات في كل قناة، ومعدل العيّنات، وعدد المكوّنات المتوقّع.
- النقاط لكل وزن: في D1 نحو 31.7 مع 31 مكوّناً.
- القرار مكتوب: بيانات كافية، أو عدد مكوّنات أقل بـ
'pca'مع سببه.
ما الأخطاء التي يقع فيها كثيرون؟
5 أخطاء، وكيف تتجنّبها
- عدّ الدقائق ونسيان معدل عيّنةsampleقيمة واحدة للإشارة في لحظة زمنية واحدة.. القاعدة تعدّ نقاط البيانات. نفس الدقائق الأربع تعطي 30720 نقطة عند 128 هرتز، و60000 نقطة عند 250 هرتز.
- مضاعفة البيانات لمضاعفة القنوات. الحاجة تكبر مع N²، فـ 64 قناة تحتاج أربعة أضعاف بيانات 32 قناة.
- تشغيل ICA على كل epoch أو كل مقطع قصير وحده. الاستقلال يجب أن يظهر كاملاً في البيانات، وهذا يحتاج نقاطاً كثيرة، كما يشرح قسم الأسئلة الشائعة الرسمي. فكّك البيانات كلها معاً.
- خلط جلسات من أيام مختلفة. الدليل الرسمي ينصح بتشغيل ICA على كل جلسة وحدها إذا سُجّلت في أيام مختلفة، لأن مواضع الأقطاب تختلف قليلاً.
- التخفيض بـ
'pca'لتوفير الوقت فقط. PCA يفسد البيانات قليلاً. استخدمه لسبب: رتبة أقل، أو بيانات قليلة.
ما الأخطاء التي يقع فيها كثيرون؟
- عدّ الدقائق ونسيان معدل العيّنات. القاعدة تعدّ نقاط البيانات. نفس الدقائق الأربع تعطي 30720 نقطة عند 128 هرتز، و60000 نقطة عند 250 هرتز.
- مضاعفة البيانات لمضاعفة القنوات. الحاجة تكبر مع N²، فـ 64 قناة تحتاج أربعة أضعاف بيانات 32 قناة.
- تشغيل ICA على كل epoch أو كل مقطع قصير وحده. الاستقلال يجب أن يظهر كاملاً في البيانات، وهذا يحتاج نقاطاً كثيرة، كما يشرح قسم الأسئلة الشائعة الرسمي. فكّك البيانات كلها معاً.
- خلط جلسات من أيام مختلفة. الدليل الرسمي ينصح بتشغيل ICA على كل جلسة وحدها إذا سُجّلت في أيام مختلفة، لأن مواضع الأقطاب تختلف قليلاً.
- التخفيض بـ
'pca'لتوفير الوقت فقط. PCA يفسد البيانات قليلاً. استخدمه لسبب: رتبة أقل، أو بيانات قليلة.
متصفحك لا يسمح بحفظ التقدّم. كل الدروس متاحة، لكن علامات الإكمال لن تُحفظ.
تم. حُفظ تقدّمك في هذا المتصفح.تراجعكيف أكتبها في ورقتي؟
قالب Methods: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
The ICA training data comprised [30504] samples per channel ([3.97] min at 128 Hz), giving [31.7] data points per unmixing weight for [31] components.كيف أكتبها في ورقتي؟
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
The ICA training data comprised [30504] samples per channel ([3.97] min at 128 Hz), giving [31.7] data points per unmixing weight for [31] components.أين أقرأ أكثر؟
3 مراجع: التوثيق الرسمي أولاً
- EEGLAB Concepts guideتوثيقHow many data points do I need to run an ICA?
- EEGLAB TutorialتوثيقIssues with data rank deficiencies
- Makoto's preprocessing pipeline§13.1 What is the minimum length of data to perform ICA?؛ §12 Adjust data rank for ICA
مكتوب لـ EEGLAB 2026.1 · 2026-10-28
للتوسّع
- EEGLAB Concepts guide: https://eeglab.org/tutorials/ConceptsGuide/ICA_background.html (How many data points do I need to run an ICA?)
- EEGLAB Tutorial: https://eeglab.org/tutorials/06_RejectArtifacts/RunICA.html (Issues with data rank deficiencies)
- Makoto's preprocessing pipeline: https://eeglab.ucsd.edu/wiki/Makoto%27s_preprocessing_pipeline (§13.1 What is the minimum length of data to perform ICA?؛ §12 Adjust data rank for ICA)
تحتاج مساعدة؟
اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ
- بلّغ عن خطأ علمي · يحتاج حساباً على GitHub. لا تملك حساباً؟ استخدم "شاركنا رأيك".