Saltar al contenido principal

# 2.12: Un script simple de Matlab

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\avec}{\mathbf a}$$ $$\newcommand{\bvec}{\mathbf b}$$ $$\newcommand{\cvec}{\mathbf c}$$ $$\newcommand{\dvec}{\mathbf d}$$ $$\newcommand{\dtil}{\widetilde{\mathbf d}}$$ $$\newcommand{\evec}{\mathbf e}$$ $$\newcommand{\fvec}{\mathbf f}$$ $$\newcommand{\nvec}{\mathbf n}$$ $$\newcommand{\pvec}{\mathbf p}$$ $$\newcommand{\qvec}{\mathbf q}$$ $$\newcommand{\svec}{\mathbf s}$$ $$\newcommand{\tvec}{\mathbf t}$$ $$\newcommand{\uvec}{\mathbf u}$$ $$\newcommand{\vvec}{\mathbf v}$$ $$\newcommand{\wvec}{\mathbf w}$$ $$\newcommand{\xvec}{\mathbf x}$$ $$\newcommand{\yvec}{\mathbf y}$$ $$\newcommand{\zvec}{\mathbf z}$$ $$\newcommand{\rvec}{\mathbf r}$$ $$\newcommand{\mvec}{\mathbf m}$$ $$\newcommand{\zerovec}{\mathbf 0}$$ $$\newcommand{\onevec}{\mathbf 1}$$ $$\newcommand{\real}{\mathbb R}$$ $$\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}$$ $$\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}$$ $$\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}$$ $$\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}$$ $$\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}$$ $$\newcommand{\laspan}[1]{\text{Span}\{#1\}}$$ $$\newcommand{\bcal}{\cal B}$$ $$\newcommand{\ccal}{\cal C}$$ $$\newcommand{\scal}{\cal S}$$ $$\newcommand{\wcal}{\cal W}$$ $$\newcommand{\ecal}{\cal E}$$ $$\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}$$ $$\newcommand{\gray}[1]{\color{gray}{#1}}$$ $$\newcommand{\lgray}[1]{\color{lightgray}{#1}}$$ $$\newcommand{\rank}{\operatorname{rank}}$$ $$\newcommand{\row}{\text{Row}}$$ $$\newcommand{\col}{\text{Col}}$$ $$\renewcommand{\row}{\text{Row}}$$ $$\newcommand{\nul}{\text{Nul}}$$ $$\newcommand{\var}{\text{Var}}$$ $$\newcommand{\corr}{\text{corr}}$$ $$\newcommand{\len}[1]{\left|#1\right|}$$ $$\newcommand{\bbar}{\overline{\bvec}}$$ $$\newcommand{\bhat}{\widehat{\bvec}}$$ $$\newcommand{\bperp}{\bvec^\perp}$$ $$\newcommand{\xhat}{\widehat{\xvec}}$$ $$\newcommand{\vhat}{\widehat{\vvec}}$$ $$\newcommand{\uhat}{\widehat{\uvec}}$$ $$\newcommand{\what}{\widehat{\wvec}}$$ $$\newcommand{\Sighat}{\widehat{\Sigma}}$$ $$\newcommand{\lt}{<}$$ $$\newcommand{\gt}{>}$$ $$\newcommand{\amp}{&}$$ $$\definecolor{fillinmathshade}{gray}{0.9}$$

¿Cuánto tiempo tardaste en ejecutar todos los pasos de este capítulo? Bastante tiempo, sospecho. Ahora imagina que hay el doble de pasos (como suele ser el caso), y que uno de ellos tarda 20 minutos en ejecutarse (lo cual es típico para el proceso de corrección de artefactos que solemos usar). E imagina que has recopilado datos de 40 participantes y necesitas repetir la secuencia de pasos para cada uno de ellos. Ahora imagina que un revisor insiste en que cambies uno de los pasos, así que ahora necesitas ejecutarlos todos de nuevo. ¿Esto suena divertido? Yo no lo creía. Además, cuando haces cada paso “a mano” usando la GUI de EEGLAB/ERPLAB, es probable que cometas errores ocasionales.

Para facilitarle la vida y reducir los errores, puede automatizar los pasos de procesamiento de EEGLAB y ERPLAB utilizando un script de Matlab. Un script es básicamente un conjunto de comandos que podrías escribir en la ventana de comandos de Matlab pero que dentro guardas como un archivo de texto con una extensión .m (a veces llamado archivo.m). Para hacer las cosas más eficientes, un script puede incluir elementos de programación más sofisticados como loops, sentencias sif/then y variables. Si ya sabes cómo programar en un lenguaje de programación típico, encontrarás que estos aspectos del scripting de Matlab son bastante sencillos. Si aún no tienes mucho fondo de programación, este libro te enseñará lo básico.

Afortunadamente, EEGLAB y ERPLAB tienen una característica de historial que facilita mucho el scripting. Cada vez que haces algo en la GUI de EEGLAB/ERPLAB, el comando de script equivalente se guarda en el historial. Por ejemplo, cuando ejecutó el paso de detección de artefactos, se guardó lo siguiente en el historial de EEGLAB:

pop_artextval (EEG, 'Canal', 1:30, 'Bander',1, 'Umbral', [-100 100], 'Twindow', [-200 795]);

Esto hace que sea realmente fácil ver cómo crear una línea de script que corresponda a un paso que llevaste a cabo en la GUI. De hecho, cuando escribo scripts EEGLAB/ERPLAB, a menudo hago los pasos primero en la GUI, miro el historial y luego copio los comandos relevantes del historial en mi archivo.m. En un capítulo posterior, discutiremos cómo acceder a la historia y construir sus propios guiones. Por ahora, vamos a ejecutar un script de ejemplo solo para que veas la idea básica.

En la carpeta para este capítulo, hay un archivo llamado Preprocess_eeg.m. Debería poder verlo en el panel Carpeta actual de la GUI de Matlab. Haga doble clic en el nombre del archivo para abrirlo en el editor de texto de Matlab. Este editor de texto reconoce ciertos aspectos de la sintaxis de scripting de Matlab y utiliza diferentes colores para diferentes partes del archivo (aunque el archivo real es solo texto plano sin ningún color especificado, como se puede verificar abriéndolo en algún otro editor de texto). Las líneas que comienzan con un símbolo de porcentaje son comentarios, y por defecto están coloreadas en verde. Agregué algunos comentarios en la parte superior del script que explican cómo ejecutarlo, y también puse un comentario encima de cada línea de código para explicar qué hace esa línea. Por ejemplo, cerca de la parte inferior verás el comando pop_artextval para hacer detección de artefactos, y hay un comentario encima de esa línea que explica lo que hace.

Este script realiza todos los pasos básicos de preprocesamiento de EEG que cubrimos en este capítulo. Lee los comentarios en el archivo script para ver los pasos. El último paso antes del promedio fue la detección de artefactos, y el conjunto de datos creado por este paso se guarda en un archivo. El nombre de archivo tiene _from_script agregado a él.

Para ejecutar el script, primero salga de EEGLAB para asegurarse de que no tenemos ningún conflicto. Después, ejecuta el guión. Hay varias formas de hacerlo, incluido un botón Ejecutar en la barra de herramientas en la parte superior de la ventana del editor de texto de Matlab para el archivo Preprocess_eeg.m. Con algo de suerte, verás aparecer un montón de texto en la ventana de comandos de Matlab, con información sobre cada paso que se esté ejecutando. Cuando todo esté hecho, verá un prompt en la ventana de comandos.

Si ves un mensaje de error o tienes algún otro tipo de problema, ¡entonces estás a punto de aprender algo útil! Comienza leyendo el mensaje de error y tratando de averiguar cómo resolver el problema. Si eso no funciona, ve si hay alguien alrededor que tenga experiencia en la ejecución de scripts de Matlab y pueda darte algo de ayuda. Y si no encuentras a alguien que te ayude, es el momento de consultar los consejos de solución de problemas en el Apéndice A2. También es posible que desee leer la primera mitad del Capítulo 11 para aprender algunos de los conceptos básicos del scripting EEGLAB/ERPLAB.

Una vez que hayas conseguido que se ejecute el script, deberías ver que ha creado un nuevo archivo de conjunto de datos llamado 6_N400_preprocessed_filt_elist_bins_be_ar_from_script en la misma carpeta con todos los demás archivos de este capítulo. Inicie EEGLAB y abra este archivo usando EEGLAB > Archivo > Cargar dataset existente. Eche un vistazo al EEG usando EEGLAB > Trazar > Datos de canal (scroll). Debería parecerse a los datos EEG que vio después de pasar por todos los pasos de preprocesamiento con la GUI.

Espero que ahora puedan ver lo rápido que es procesar los datos de un participante con un script que hacerlo con la GUI. Sin embargo, esto no significa que no necesitará la GUI una vez que haya aprendido el scripting EEGLAB/ERPLAB. Debes usar la GUI la primera vez que revises los datos de un participante para que puedas verificar si hay problemas y errores. También necesitarás usar la GUI para determinar los parámetros de detección de artefactos apropiados (y los parámetros de corrección de artefactos una vez que aprendas sobre eso). Pero una vez que hayas procesado los datos del participante manualmente y determinado los parámetros correctos, puedes ejecutar un script usando esos parámetros para reprocesar los datos del participante. De esa manera podrás evitar cualquier error que puedas cometer al procesar los datos manualmente. Y cuando Reviewer 2 te pida que cambies tu canalización de preprocesamiento, podrás reprocesar todos los datos con bastante facilidad y no estarás tan gruñón acerca de hacer el cambio.

This page titled 2.12: Un script simple de Matlab is shared under a CC BY 4.0 license and was authored, remixed, and/or curated by Steven J Luck directly on the LibreTexts platform.