jsPych:一个用于在网页浏览器中创建行为实验的javascript库外文翻译资料

 2021-11-18 09:11

英语原文共 12 页

jsPych:一个用于在网页浏览器中创建行为实验的javascript库

Joshua R. de Leeuw

摘要:网络线上实验正变得愈发普及,并且日益成熟的网络技术使得利用浏览器在线进行复杂的行为实验成为可能。然而,与离线实验室实验不同的是,很少有工具可以帮助开发基于浏览器的实验。这使得创建一个实验的过程缓慢而富有挑战性,尤其是对于缺乏网页发展背景的研究人员来说。本文介绍了一个用于开发基于网页的实验的JavaScript库jsPsych。JsPsych将一种描述实验的方法形式化,这种方法比从零开始编写整个实验要简单得多。然后由jsPsych自动执行这些描述,处理从一个任务到另一个任务的流程。这个jsPsych库是开源的,由搜索社区进行扩展。该项目可在www.jsPych.org网站上获得。

关键词:网络线上实验,JavaScript,Amazon Mechanical Turk

在网上进行实验,特别是当它有和Amazon Mechanical Turk一样的市场营销时,能够以比实验室环境中的同类实验低得多的成本实现极快的数据收集。虽然在线实验不适用于所有实验,但一些研究在一系列行为测试中为实验室和在线实验产生了类似的结果(Buhrmester,Kwang,&Gosling,2011; Crump,McDonnell,&Gureckis,2013; Goodman,Cryder,&Cheema, 2013; Paolacci,Chandler,&Ipeirotis,2010; Zwaan&Pecher,2012)。虽然某些行为实验仍然存在一些问题,例如认知学习和启动范式(Crump等,2013),普遍的共识似乎是在线实验产生的结果与许多任务的实验室实验相似。考虑到在线实验的成本和时间节省,加上与本科生相比,更容易获得不同学科群体的其他好处(Ross、Irani、Silberman、Zaldivar和Tomlinson,2010年),未来几年内,网络线上实验的普及程度很有可能会增长。

为了进行网络线上实验,研究人员必须设计一个可以下载到主题本地计算机或可以在网页浏览器上运行的实验,然后才能安装到本地计算机或扫描网络浏览器。在网页浏览器中运行实验的选项很多:Qualtrics(www.qualtrics.com)和Amazon Mechanical Turk(www.mturk.com)等平台都有简单的模板可以使用点击式界面进行自定义。 WEXTOR(Reips&Neuhaus,2002)是一个非线性图形用户界面,用于构建基于网页的类似调查的实验,提供比Mechanica Turk更多的灵活性,但其内容会被系统的内置功能所限制。或者,实验者可以编写自己的定制代码来实现其他方式可能无法实现的设计。随着网页技术的日益高水平化,现在可以在网页浏览器中创建许多基于计算机的不同类型的行为实验。特别是,HTML5通过大型网页浏览器,可以对嵌入在网站中的基于像素和矢量的图形进行程序控制,允许丰富的图形交互,类似于播放视频游戏。然而,编程这些实验可能具有挑战性,并且可能需要大量的网页开发经验,特别是对于更复杂的设计。

本文介绍了一个名为jsPsych的开源JavaScript库,它可以加速基于浏览器的实验的开发过程。该库包含执行各种行为实验中常见任务的代码,例如放映刺激,获取响应和测量响应时间。它还将描述实验的结构形式化,使实验者能够通过编写几行代码来创建实验描述,从而创建相应的实验。该库的设计使得实验可以从不同的组件中组装起来,称为插件。可以在不同的实验环境中使用的提示,jsPsych允许研究人员创建自定义实验,而无需从头开始生成所有必需的代码。由于该库基于模块化架构,研究人员可以在开发时共享和使用新插件,而无需任何集中修改内容。本文的下一部分将介绍设计软件。

jsPsych的主要目的是控制主体在实验过程中与之交互的内容。请注意,jsPsych不会处理创建在线实验的其他几个方面:例如,虽然jsPsych将记录由主题引起的全部内容,但它不会在网页服务器上将数据存储在数据库或其他永久性位置中。实验者必须决定如何处理和实施数据存储。(在线文档中有包含如何进行此项操作的示例,但仍有许多可能的jsPsychis不知道如何执行的解决方案。)如果jsPsych用于为Mechanical Turk或其他众包市场创建实验,则必须执行许多步骤才能启动这些平台上的实验(一篇优秀的入门书,参见《梅森和苏里》,2012).Onepossibilityistocombine jsPsych与psiTurk(McDonnell等,2012)。有一种可能性是将jsPsych与psiTurk(McDonnell等人,2012)结合起来,这是一个处理运行在线实验的所有“后端”方面的框架,例如在服务器上托管实验导入Mechanical Turk 接口来完成实验。 jsPsych很好地补充了这个库。 psiTurk可用于提供基于jsPsych的实验,简化了在线实验的各个方面,即前端(本文的主题内容; jsPsych的专长)和后端(服务器托管以及与Mechanical Turk,psiTurk专业的接口)。最后,值得注意的是jsPsych也可以用于离线实验。网站可以在实验室计算机上本地开发和托管,实验室计算机可以通过连接到互联网来完成实验。由于在实验室和在线环境中开发基于浏览器的实验之间几乎没有差异,因此如果需要,可以使用相同的代码在两个位置运行实验。这可能是一个特别有用的功能,用于检查在线实验与实验室中进行的实验的有效性。

JsPsych概述

jsPsych是一个开源项目,在撰写本文时由GitHub主持。该项目的URL是www.jspsych.org。 项目网站包含当前和以前版本的jsPsych的所有源代码,以及包含其他文档的wiki。 jsPsych的扩展或修改可以通过GitHub集成到项目中,使用户社区能够共享代码.

在jsPsych的基本工作流程中,实验者生成实验的描述,利用各种jsPsych插件,然后核心jsPsych库用于与适当的插件一起执行实验。核心库提供了一系列在所有实验中都必需的函数,但插件是大部分操作的关键所在。每个jsPsych插件定义了主体在实验期间可能参与的任务。示例包括:阅读说明并按键继续,分类刺激和接收反馈,尽可能快地响应刺激,并回答调查问题。在撰写本文时,14个插件经过了充分测试并且有详细记录(见表1),另外13个插件处于开发的早期阶段,或者没有详细记录。完成的插件可以在plugins文件夹中找到(可在jsPsych项目网站获得),开发中的插件可以在dev文件夹中找到,它是plugins文件夹的子文件夹。

在描述使用jsPsych生成实验的过程中,我将使用两个术语:试验和块。 试验是jsPsych的基本单位。每个插件定义执行试验的过程。例如,jspsych-categorize插件定义了一个试验,包括向受试者提供刺激,获得响应和呈现反馈。所有这些功能都嵌入在插件中,实验者只需要定义一小部分参数就可以使用它。 要使用jspsych-categorize插件,实验者将定义刺激,可接受的响应以及使用的文本,这些参数是特定于它们的功能的。

块是由同一个插件定义的所有测试的集合,因此所有测试都具有相同的总体结构。例如,一组分类试验可能涉及几十种刺激物的连续分类。用JSPsych创建一个实验涉及到定义一系列块,然后告诉JSPsych执行已经定义的实验。如本文的教程部分所示,这个过程相对简单,当然也比从头开始编写完整的程序更容易提供同等的功能。一旦创建了对实验的描述,核心库将处理实验的执行,跟踪用户在实验中的位置,并在适当时将控制权委托给各种插件。

JSPsych设计的两个关键目标是模块化和可扩展性。两者都是通过使用核心 插件架构实现的。JSPsych是高度模块化的;实验网页中只需要包含实验实际使用的核心库和插件。插件的设计使得它们可以与插件的任何其他子集进行交互。创建一个新的插件可以让有经验的程序员扩展JSPsych。插件有一个非常灵活的结构,可以创建一个插件来定义实验所需的大多数测试。希望随着越来越多的实验使用jpsych创建,可用插件库变得足够大,大多数实验可以通过组装已有的插件并只编写几十行代码来开发(这已经有可能是目前心理学家进行的许多常见类型实验的插件了)。有关如何创建插件的详细说明,请参见jpsych项目网站上的wiki页面:https://github.com/jodeleuw/jpsych/wiki/create-a-plugin。本文的教程部分介绍了先前存在的插件的使用。

核心库的功能

虽然大多数用于运行实验的代码都存在于插件中,但核心库是将所有东西粘合在一起的粘合剂。除了处理实验的执行之外,核心库还有一些其他功能,包括关键的(如数据存储)到可选的。

数据存储:当插件存储数据时,它应该调用核心库中定义的writeData()方法。这种方法做了两件重要的事情。首先,它将数据存储在内存中,以便以后可以通过各种jsPsych函数进行检索。其次,它通过功能来表示记录了新数据(参见下一节关于事件相关函数调用的内容)。可以调用the method jsPsych.data()方法来恢复到目前为止存储的所有数据。数据由多级数组组成。顶层对应于实验的每个块,第二级对应于单个试验.每个二级元素都是由存储数据的插件定义的javascript对象。插件可以存储任意定义的对象,允许存储任何类型的数据。 调用jsPych.data()返回的对象可以表示为一个json(javascript对象表示法)字符串,启用jsPych与其他编程语言(如r)之间相对简单的传输,以便进行进一步的数据分析。

来自jsPsych的数据也可以作为逗号分隔值(CSV)字符串进行检索,适合导入到电子表格或统计分析包中。方法jsPych.dataAsCSV()将返回一个字符串,其中包含csv格式的所有数据。另一个支持有限的方法(参见当前的限制部分)是通过调用jpsych.saveCSVdata()方法,将csv文件写入运行jpsych的计算机的硬盘(本文的教程部分将给出使用这两种方法的示例)。但是,这不是推荐的保存数据的方法,而仅是用来在开发过程中快速检查数据的手段。最终,数据应该保存在数据库中,或者保存为托管实验的服务器上的文件。这确保了实验者可以访问数据,并且数据被安全地存储。在线文档提供了一些关于如何实现这一点的提示。

与事件相关的功能调用:实验过程中的某些事件旨在触发对函数的调用。这些函数可以由实验者指定,这意味着任意代码可以在这些事件发生时执行。 触发函数调用的四个事件是(1)试验开始前的时刻,(2)试验结束后的时刻,(3)实验结束,以及(4)记录数据的时刻。 虽然可能实验者认为合适,但没有别的内置功能与这些事件(可以使用或不使用)相关联。 例如,记录数据时发生的事件可用于永久存储数据库中的新数据,可以在实验完成时逐步保存数据。

进度跟踪:核心库将保持跟踪,记录完成的试验数量和实验中剩余的试验数量。 调用jsPsych.progress()会返回一个JavaScript对象,其中包含有关实验中块的总数,实验中的试验总数,当前试验数(相对于整个实验和当前块)以及当前块数的信息。 这可以以各种方式使用。 一个常见的用例是将进度信息与试验结束时发生的事件相关函数调用相结合。 可以设计一个功能来检查当前进度,并更新屏幕上的进度条,以便实验者知道对象在实验中的大致位置。

预载图片:对于许多实验来说,预载图像文件很重要。这确保了图像在浏览器中的显示,因为jsPsych会尝试显示它们,而不是从服务器实例中获取图像,从而预先加载图像,jsPsychhasa内置预加载功能:jsPsych.preloadImages()。 此函数具有可选的回调函数参数,可以在图像加载时以及所有图像完成加载时触发。 这些可以用于显示加载进度屏幕,并在开始实验之前就等待所有图像都加载完毕。

接入amazon mechanical turk:由于Mechanical Turk是一种进行在线实验的常用方法,jsPsych提供了与Mechanical Turk接口相关的一些基本功能.jsPsych.turkInfo()方法返回一个包含Mechanical Turk工作者ID,HITID和赋值ID的JavaScript对象.它也是确定页面是否是从Mechanical Turk加载的一种方法,这对于防止未经授权的用户完成实验非常有效。

跟踪实验开始时间:最后,核心库可以记录实验开始的时间。在确定实验中一个受试者花费的时间时,这可能很有用。 这在在线环境中特别有用,在这种环境中,实验者可以起身,并在实验过程中离开计算机,然后等实验完成时再回来。

目前的局限

jsPsych最初是作为一种快速构建相对简单的实验的方式而创建的。尽管现在可以进行一些复杂性很高的实验,但仍然存在一些局限性。因为该库是围绕在执行实验之前创建实验描述的想法而构建的,所以它在静态实验中表现很好,但是在项目参与时,动态改变实验过程的功能很少。该软件没有核心库功能来处理实验结构中的条件变化或循环变化。一种解决方案(尽管可能不是理想的解决方案)是创建一个实现更改特定任务的条件的插件。 / dev文件夹中的插件称为jspsych-adaptive-category-train,它实现了一种特定的类别培训协议,在该协议中,对象必须达到类别学习任务的特定性能阈值。它通过将整个培训协议视为单个试验并在试验结构中实施条件逻辑来实现这一点。虽然这有效,但它不是一个特别优美或一般的解决方案。目前,jsPsych最适用于在项目开始之前完全了解实验结构的情况。计划在未来的核心库中实现一组通用的条件结构。

浏览器兼容性始终是任何网页开发项目的主要关注点。核心库和大多数插件将在所有最新版本的主流

原文和译文剩余内容已隐藏,您需要先支付 20元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。