Saltar al contenido principal
LibreTexts Español

11.17: Ejercicio: promedio con una ventana de tiempo ASMe personalizada

  • Page ID
    151419
  • \( \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}\)

    La serie de scripts del ejercicio anterior produce un conjunto de datos para cada participante que está listo para promediar. En el presente ejercicio, calcularemos los ERPs promediados, incluido el cálculo de ASMe para una ventana de tiempo personalizada de 110-150 ms (la ventana de medición para el N170). Luego crearemos un gran promedio entre los participantes y lo trazaremos. Finalmente, imprimiremos un resumen de los valores de ASMe en la Ventana de Comandos.

    Adelante, abre el guión (Step6_Averaging_and_sme.m) y échale un vistazo. Como es habitual, el script comienza definiendo un conjunto de variables que serán utilizadas posteriormente en el script. También abre un archivo llamado ERPset_files.txt. Este archivo se utilizará cuando hagamos el gran promedio. Cuando hicimos grandes promedios en capítulos anteriores, cargamos todos los ERPSets de un solo participante en ALLERP y luego le dijimos a la rutina de grandes promedios cuál de estos ERPSets incluiría el gran promedio. Sin embargo, a veces es más conveniente trabajar con un ERPSet a la vez, guardar los ERPSets como archivos en el disco duro y no mantener todos los ERPSets cargados en la memoria. En este caso, podemos enviar a la rutina de promedios generales una lista de los nombres de archivo de los ERPSets, que a su vez se almacenan en un archivo de texto. Esto es para lo que se utiliza ERPset_files.txt en el presente script. Podría haber cargado todos los ERPSets en ALLERP, pero quería demostrar este enfoque alternativo y mostrarte cómo abrir un archivo de texto y escribir en él.

    El bucle principal en el script comienza cargando el conjunto de datos que fue creado por el script anterior, que está todo listo para promediar. Las siguientes líneas definen la ventana de tiempo ASMe personalizada. Esta información se almacena en una estructura de datos llamada DQ_spec (especificación de calidad de datos). Esta estructura define las ventanas de tiempo previas a la obtención de las medidas de calidad de los datos y almacena las medidas de calidad de los datos una vez que se han calculado. Es un poco complicado, por lo que ERPLAB proporciona una rutina llamada Make_DQ_SPEC para crearlo.

    Utilizamos esta rutina para crear una variable llamada Custom_asme_spec. Hay potencialmente muchos tipos diferentes de métricas de calidad de datos que se pueden almacenar en una variable DQ_spec. La primera métrica almacenada en una estructura DQ_spec es una medida del ruido de línea base. El segundo es el error estándar de la media en cada punto temporal individual. El tercero es el ASMe. Es posible que definas tipos adicionales, el más común de los cuales es el BSMe (pyme bootstrapped). Aquí, vamos a usar ASMe, pero vamos a especificar una ventana de tiempo personalizada para el cálculo de ASMe para que obtengamos un valor de ASMe que corresponda a nuestra ventana de medición N170 (110—150 ms). Esto lo hacemos averiguando cuántas ventanas de tiempo ya se han definido por defecto y luego agregando una nueva.

    El siguiente paso es llamar a la rutina de promediación (pop_averager), enviándole la variable Custom_asme_spec que acabamos de crear para que calcule el ASMe para nuestra ventana de tiempo personalizada (junto con las ventanas de tiempo predeterminadas). Esta rutina devuelve un ERPSet que almacenamos en la variable ERP. Luego creamos un nombre para el ERPSet y guardamos el ERPSet en un archivo en el disco duro. También guardamos el nombre de este archivo (incluyendo la ruta) en el archivo ERPset_files.txt para que lo tengamos cuando hagamos el gran promedio más adelante.

    La variable ERP incluye un campo llamado ERP.DataAquality que almacena las métricas de calidad de datos que se calcularon durante el proceso de promediado. El guión muestra cómo puedes tomar los valores de ASMe de ERP.DataQuality para el canal que finalmente usaremos para anotar la amplitud N170 (PO8, Canal 27). Para cada tema, obtenemos una matriz de cuatro valores de ASMe para este canal, uno para cada uno de los cuatro bins. Almacenamos esto en una matriz bidimensional llamada ASME_Custom_Values, que tiene una dimensión para sujetos y otra dimensión para bins. Los datos ASMe dentro de ERP.DataQuality se almacenan en una matriz 3D con dimensiones de canales, rangos de tiempo y bins, y usamos una función de Matlab llamada squeeze para convertir esta matriz 3D en la matriz 1D de valores para cada bin para el sujeto actual:

    ASME_Custom_values (subject,:) = squeeze (erp.DataQuality (Where_ASME) .data (measurement channel, custom_entry_index,:));

    Cuando aprendas a escribir scripts por primera vez en Matlab, probablemente encontrarás que con frecuencia te confundes sobre cómo funcionan las matrices y cuándo necesitas usar una función como squeeze para obtener los resultados deseados. Todavía a veces me confundo, y a menudo cometo errores al escribir código que opera en arreglos complicados. Pero he aprendido a interpretar los mensajes de error de Matlab, y a menudo busco soluciones en Internet. También recomiendo obtener un buen libro de Matlab y dedicar algún tiempo a aprender la lógica detrás de cómo funciona Matlab en arreglos de discos. Como mencioné anteriormente, mi laboratorio utiliza un libro llamado Matlab for Behavioral Scientists (Rosenbaum et al., 2014).

    Después de que termina el bucle principal, el script hace un gran promedio usando los nombres de archivo almacenados en ERPset_files.txt. Luego traza el gran promedio para que puedas ver cómo escribir la rutina de trazado (pop_ploterps).

    Finalmente, el script imprime los valores ASMe personalizados que guardamos en la variable denominada ASME_Custom_Values para cada participante. También imprime la media entre los participantes para cada bin, junto con el RMS (raíz cuadrática media). El RMS es como la media, pero hace un mejor trabajo al capturar cómo el nivel de ruido de los participantes individuales impactará la variabilidad en las puntuaciones de amplitud N170 entre los participantes, el tamaño del efecto y la potencia estadística (ver Luck et al., 2021). Te recomiendo echar un vistazo a los valores de ASMe para cada participante y luego mirar sus EEG y ERPs para ver si puedes entender por qué algunos participantes tienen valores ASMe peores (mayores) que otros.

    El ASMe cuantifica la calidad de los datos para el voltaje medio dentro de una ventana de tiempo determinada, por lo que es más directamente útil cuando se está puntuando la amplitud usando el voltaje medio (que es como puntuamos la amplitud N170 en el papel ERP CORE). Si estás usando algún otro método de puntuación (por ejemplo, amplitud pico, latencia pico fraccional), necesitas usar un método más complicado llamado bootstrapping para obtener los valores de SME. También necesitarás usar bootstrapping si vas a obtener puntuaciones de ondas de diferencia o si aplicas cualquier otro tipo de procesamiento a los datos ERP después de promediar pero antes de puntuar (por ejemplo, filtrado o operaciones de canal). ERPLAB actualmente requiere scripting para computar valores de SME bootstrapped, y de los scripts de ejemplo al final del Capítulo 10 demuestran cómo hacerlo. El capítulo 10 también contiene un script que demuestra cómo obtener datos de comportamiento.


    This page titled 11.17: Ejercicio: promedio con una ventana de tiempo ASMe personalizada 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.