Commit b0819d7d authored by Bonte Bruno's avatar Bonte Bruno

add IATmaster for interexpe

parent 19411811
<filesMatch ".(txt)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
\ No newline at end of file
# Set the path to the IAT folder here (be sure to include trailing slash)
# on Linux (use a single forward slash):
base.dir = "~/Documents/Research/IAT/"
# on Windows (use double forward slashes):
# base.dir = "C://Users//winteram//Documents//IAT//"
# File delimiter = '/' for Unix/Max, '//' for Windows
fd = '/'
# Set the template you want to analyze here
template.name = "Science"
output.dir = paste(base.dir,"templates",fd,template.name,fd,"output",fd,sep="")
setwd(output.dir)
output.files = list.files()
data.list = lapply(output.files, read.table, sep = ",")
summarized <- data.frame(matrix(ncol=9,nrow=length(data.list)))
names(summarized) <- c("Id","Date","Block4.m","Block4.sd","Block7.m","Block7.sd","diff","full.sd",'d')
for(i in 1:length(data.list))
{
filename = strsplit(output.files[i],'-')
id = filename[[1]][2]
iat.date = paste(filename[[1]][4],"-",filename[[1]][5],"-",filename[[1]][3]," ",filename[[1]][6],":",substr(filename[[1]][7],1,2),sep="")
block4.m = mean(as.numeric(unlist(subset(data.list[[i]], V1==3 & V6>300 & V6 < 3000, select="V6"))))
block7.m = mean(as.numeric(unlist(subset(data.list[[i]], V1==6 & V6>300 & V6 < 3000, select="V6"))))
block4.sd = sd(as.numeric(unlist(subset(data.list[[i]], V1==3 & V6>300 & V6 < 3000, select="V6"))))
block7.sd = sd(as.numeric(unlist(subset(data.list[[i]], V1==6 & V6>300 & V6 < 3000, select="V6"))))
full.sd = sd(as.numeric(unlist(subset(data.list[[i]], (V1==6 | V1==3) & V6>300 & V6 < 3000, select="V6"))))
diff = block7.m - block4.m
d = diff / full.sd
summarized[i,] = c(id, iat.date, block4.m, block4.sd, block7.m, block7.sd, diff, full.sd, d)
}
rm(block4.m,block4.sd,block7.m,block7.sd,d,data.list,diff,filename,full.sd,i,iat.date,id,output.files)
setwd(paste(base.dir,"templates",fd,template.name,sep=""))
write.csv(summarized, "summarized.csv")
The MIT License (MIT)
Copyright (c) 2015 Winter Mason
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
**********************************************************
* project: Open Source, Web-based IAT
* authors: Winter Mason (m@winteram.com)
* Steven Allon
* Pinar Ozturk
* source: https://github.com/winteram/IAT
**********************************************************
OVERVIEW:
---------
This is meant to be an easy-to-use implicit association test (see
Greenwald, McGhee, & Schwartz, 1998) for use by interested
psychologists. The flow of the test is driven by javascript, and
participant responses are stored in a comma-delimited text file. At the
end of the test, a simple effect size is calculated to determine the
participant's tendency to find two categories more congruent than the other
two categories.
To create and modify versions of the IAT, and to make them available to
participants, the experimenter can direct their browser to the
"experimenter.php" file.
REQUIREMENTS:
-------------
Server-side: PHP (with permission to write files in directory)
(optional) MySQL with root access
Client-side: Javascript-enabled web browser
USE:
----
1) copy the folder to a publicly accessible folder on your web server
2) from a shell prompt (i.e., Terminal in Mac or Linux, PuTTy in Windows) type 'sh setup.sh'
3) create a new version of the IAT using the experimenter tool (Direct your
browser to [yourserver.com]/IAT/experimenter.php)
4) [only necessary if IAT uses images] After creating the template, upload
the images to the folder "IAT/[template name]/img"
5) Direct participants to your IAT! (e.g., [yourserver.com]/IAT)
OUTPUT:
-------
The output files are in the "output" folder within the template folder for the active IAT.
The columns are as follows:
Trial #
Round #
Category Label
Category Index (which item within the category)
Errors
Reaction Time (in milliseconds)
{"active":"Cooperation","available":["Empty","Race","Science", "Test", "Cooperation"]}
<div id="experiment_frame">
<div id="header">
<div id="left_cat"></div><div id="right_cat"></div>
</div>
<div id="picture_frame">
<div id="exp_instruct"></div>
<div id="word" class="IATitem"></div>
<img id="wrong" src="core/Wrong.jpg">
</div>
</div>
<div id="under_instruct">
Si les touches <b>E</b> et <b>I</b> ne fonctionnement pas, cliquez à l'intérieur du cadre blanc et essayez de nouveau.<br>
Si le symbôle <font color=red>X</font> apparait, pressez l'autre touche pour le faire disparaitre.
</div>
<div id="sub" style="display:none"></div>
<?php
// Change to name of IAT
$IATname = "Women / Men";
// Change if you are / are not using images
$pictures = true;
?>
\ No newline at end of file
body {
background:none repeat scroll 0 0 #FFFFFF;
border:0 none;
font-family: Arial;
}
.exp-header {
height: 50px;
width: 98%;
font-size: 20px;
padding: 25px 10px 0px 10px;
margin: 1px;
}
.exp-header-active-label {
float: left;
}
.exp-header-active {
margin-left: 70px;
}
.selector-frame {
width: 230px;
margin: 15px 0px 0px 15px;
float: left;
}
.selector-label {
font-size: 14px;
width: 100px;
padding: 2px;
text-align: center;
}
.selector-button-list {
width: 200px;
margin: 5px;
}
.delete-item {
float: left;
cursor: pointer;
}
.save-item {
float: right;
margin-right: 5px;
cursor: pointer;
}
.ui-icon:hover {
background-image: url(overcast/images/ui-icons_3383bb_256x240.png);
}
#exp-content {
min-height: 550px;
min-width: 550px;
margin: 10px 30px 0px 250px;
border: solid black 1px;
}
#create-new {
}
#template-name {
font-size: 32px;
border-style: none;
margin: 5px 0px 0px 5px;
background-color: #CCC;
}
.template-item {
padding: 3px 0px 3px 0px;
background-color: #f5f5f5;
border: #eee 1px solid;
font: 11pt Verdana;
}
.template-item:not(.template-selected):hover {
color: #599FCF;
}
.template-selected {
background-color: #FCFCD2;
border-color: #aaa;
}
.template-unsaved {
background-color: #fcfc98 !important;
}
.template-unsaved .template-item-label {
font-weight: bold;
}
.template-unsaved .template-item-label:after {
content: "*";
font-weight: bold;
}
.template-item-label {
margin-left: 15px;
text-align: center;
width: 100%;
cursor: default;
}
.template-form-label {
float: left;
}
.template-form-item {
padding: 3px 0px 3px 0px;
}
.template-option {
font-size: 12px;
margin-left: 10px;
}
.cat-item-img {
margin: 10px 3px 3px 3px;
vertical-align: bottom;
max-width: 100px;
max-height: 30px;
}
#add-item-button {
text-align: center;
margin-left:auto;
margin-right:auto;
height: 50px;
width: 50px;
}
.erroritem {
border: red 1px dotted;
}
.ui-dialog {
width: 40% !important;
}
.cat-AB {
-moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px;
-moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px;
}
.cat-12 {
background: #3383BB;
color: #ccc !important;
-moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px;
-moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px;
}
.ui-state-hover .cat-12 { color: #ddd !important; }
.ui-state-active .cat-12 { color: #fff !important; }
\ No newline at end of file
body {
background:none repeat scroll 0 0 #FFFFFF;
border:0 none;
}
#instructions
{
width: 800px;
}
#experiment_frame
{
margin-left: auto;
margin-right: auto;
width:500px;
height: 500px;
border: solid black 1px;
}
#header
{
height: 120px;
}
#left_cat
{
font-size: 1.2em;
margin: 15px;
float: left;
}
#right_cat
{
font-size: 1.2em;
margin: 15px;
float: right;
}
#exp_instruct
{
margin: 15px;
}
#under_instruct
{
margin-left: auto;
margin-right: auto;
margin-top: 10px;
width: 600px;
}
.itemdiv
{
margin-left: auto;
margin-right: auto;
}
.IATitem
{
font-size: 1.5em;
margin-left: auto;
margin-right: auto;
height: 200px;
display: none;
}
#word {
width: 100px;
max-height: 115px;
text-align: center;
padding-top: 85px;
}
#wrong
{
margin-left: auto;
margin-right: auto;
height: 80px;
display: none;
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<!-- Thin People Fat People -->
<div> Placez vos majeurs ou indexs sur les touches <b>E</b> et <b>I</b> de votre clavier.
Des mots représentant les catégories vont apparaitre un par un au milieu de l'écran.
quand le mot appartient à la catégorie de gauche, pressez la touche <b>E</b>; quand le mot appartient à la catégorie de droite,
pressez la touche <b>I</b>. Les mots appartiennent à une seule catégorie.
Si vous faites une erreur une <font color=red>X</font> va apparaitre - corrigez l'erreur en pressant l'autre touche.</div>
<br>
<div> Ceci est une tâche de classement chronométrée. <b>ALLEZ LE PLUS VITE POSSIBLE</b> tout en faisant le moins d'erreurs
possibles. Aller trop lentement ou faire trop d'erreur améneront des résultats non interprétables. Cette tâche dure approximativement 5 minutes.</div>
<br>
<div style="text-align:center">Pressez la <b>barre d'expace</b> pour commencer.</div>
<!-- <green>Good Bad</green> -->
<p><b>Voyez ci-dessus, les catégories ont changé.</b> Les mots à classer ont également changé.
La façon de procéder, par contre, est toujours la même.</p>
<br>
<p>Quand le mot appartient à la catégorie de gauche, pressez la touche <b>E</b>;
Quand le mot appartient à la catégorie de droite, pressez la touche <b>I</b>.
Les mots appartiennent à une seule catégorie. Un <font color=red>X</font> apparait après une erreur;
corrigez l'erreur en pressant l'autre touche. <b>ALLEZ AUSSI VITE QUE POSSIBLE.</b></p>
<br>
<div style="text-align:center">Appuyez sur la touche <b>espace</b> pour commencer.</div>
<!-- Thin People /or /<green>Good</green> Fat People /or /<green>Bad</green> -->
<p><b>Voyez ci-dessus, Les quatre catégories que vous avez vues séparemment apparaissent maintenant ensemble.</b>
Rappelez-vous qu'un mot appartient à une seule catégorie. Par exemple, si les catégories
<b>fleur</b> and <b>bon</b> apparaissent ci-dessus sur des côtés différents - des mots correspondant
à <b>fleurs</b> iraient dans la catégorie <b>fleur</b>, et pas dans la catégorie <b>bon</b>.</p>
<br>
<p>Les mots en <font color=green>verts</font> et <b>noirs</b> devraient vous aider à identifier
la catégorie pertinente. Utilisez les touches <b>E</b> et <b>I</b> pour catégoriser les mots dans les
quatre groupes figurant à <b>gauche</b> ou à <b>droite</b>, et corrigez les erreurs en pressant l'autre touche.
</p>
<br>
<div style="text-align:center">Appuyez sur la <b>barre d'espace</b> pour commencer.</div>
<!-- Thin People /or /<green>Good</green> Fat People /or /<green>Bad</green> -->
<p><b>Classez à nouveau les quatre mêmes catégories</b>
Rappelez-vous d'aller aussi vite que possible tout en faisant le moins d'erreurs possibles.</p>
<br>
<p>Les mots en <font color=green>verts</font> et <b>noirs</b> devraient vous aider à identifier
la catégorie pertinente. Utilisez les touches <b>E</b> et <b>I</b> pour catégoriser les mots
dans les quatre groupes figurant à <b>gauche</b> ou à <b>droite</b>,et corrigez les erreurs en pressant
l'autre touche.
</p>
<br>
<div style="text-align:center">Appuyez sur la <b>barre d'espace</b> pour commencer.</div>
\ No newline at end of file
<!-- Fat People Thin People -->
<p><b>Remarquez ci-dessus, il y a seulement deux catégories et leurs positions ont changé.</b>
La catégorie qui était précédemment sur la gauche est maintenant sur la droite, et la catégorie
qui était sur la droite est maintenant sur la gauche. Excercez-vous à cette nouvelle configuration.
<br>
Pressez les touches <b>E</b> et <b>I</b> pour catégoriser les mots à gauche ou à droite, et corrigez
les erreurs en pressant l'autre touche.
<br>
<div style="text-align:center">Appuyez sur la <b>barre d'espace</b> pour commencer.</div>
<!-- Fat People /or /<green>Good</green> Thin People /or /<green>Bad</green> -->
<p><b>Regardez ci-dessus, les quatre catégories apparaissent maintenant ensemble dans une
nouvelle configuration.</b>
Rappelez-vous qu'un mot appartient seulement à une catégorie. </p>
<br>
<p>Les mots en <font color=green>verts</font> et <b>noirs</b> devraient vous aider à identifier
la catégorie pertinente. Utilisez les touches <b>E</b> et <b>I</b> pour catégoriser les mots
dans les quatre groupes figurant à <b>gauche</b> ou à <b>droite</b>,et corrigez les erreurs en pressant
l'autre touche.
</p>
<br>
<div style="text-align:center">Appuyez sur la <b>barre d'espace</b> pour commencer.</div>
<!-- Fat People /or /<green>Good</green> Thin People /or /<green>Bad</green> -->
<p><b>Classez à nouveau les quatre mêmes catégories</b>
Rappelez-vous d'aller aussi vite que possible tout en faisant le moins d'erreurs possibles.</p>
<br>
<p>Les mots en <font color=green>verts</font> et <b>noirs</b> devraient vous aider à identifier
la catégorie pertinente. Utilisez les touches <b>E</b> et <b>I</b> pour catégoriser les mots
dans les quatre groupes figurant à <b>gauche</b> ou à <b>droite</b>,et corrigez les erreurs en pressant
l'autre touche.
</p>
<br>
<div style="text-align:center">Appuyez sur la <b>barre d'espace</b> pour commencer.</div>
<label for="subID">Subject ID:</label>
<input type="text" id="subID" name="subID"/>
<br><br>
<div> Entrez ici l'identifiant qui vous a été donné. </div>
<br>
<input type="submit" value="Submit Subject ID" onclick='loadInstructions("one");'>
<h2> Test d'Association Implicite : <span class='IATname'></span> </h2>
<p> Vous allez devoir classer des mots <span id='andpics'></span> dans des catégories le plus rapidemment possible. Vous devriez compléter cette tâche en moins de 5 minutes.</p>
<input type="submit" value="Continue" onclick='loadInstructions("two");'>
\ No newline at end of file
<p>Dans la tâche qui suit, il va vous être présenté une série de mots à classer dans différentes catégories. La tâche demande à ce que vous classifiez les mots le plus vite possible tout en faisant le moins d'erreurs possibles. Aller trop lentement ou faire trop d'erreurs améneront des résultats non interprétables. Cette partie de l'expérience dure approximativement 5 minutes. La liste suivante rassemble les catégories et les mots qui appartiennent à chacune de ces catégories.</p>
<table>
<tr><td>Catégorie</td><td>.................... </td><td>Mots</td></tr>
<tr><td id="clabel1"></td><td>.................... </td><td id="citems1"></td>
<tr><td id="clabel2"></td><td>.................... </td><td id="citems2"></td>
<tr><td id="clabelA"></td><td>.................... </td><td id="citemsA"></td>
<tr><td id="clabelB"></td><td>.................... </td><td id="citemsB"></td>
</table>
<p>Gardez à l'exprit</p>
<ul>
<li>Gardez vos majeurs ou vos indexs sur les touches 'e' et 'i' pour aller plus vite.</li>
<li>Les catégories présentées en haut de l'écran vous disent quels mots sont associés à chaque touche.</li>
<li>Chaque mot correspond à une seule catégorie correcte. La plupart sont faciles à catégoriser.</li>
<li>Le test ne donne aucun résultats si vous êtes lents -- essayez s'il vous plait d'aller le plus vite que vous pouvez.</li>
<li>Attendez-vous à faire quelques erreurs si vous êtes rapides. Ce n'est pas grave.</li>
<li>Pour de meilleurs résultats, assurez vous que la luminosité de votre écran est à son maximum et évitez les distractions.</li>
</ul>
<input type="submit" value="Continue" onclick="loadInstructions('IAT');">
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*!
* jQuery Cookie Plugin v1.3.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2013 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd && define.amd.jQuery) {
// AMD. Register as anonymous module.
define(['jquery'], factory);
} else {
// Browser globals.
factory(jQuery);
}
}(function ($) {
var pluses = /\+/g;
function raw(s) {
return s;
}
function decoded(s) {
return decodeURIComponent(s.replace(pluses, ' '));
}
function converted(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
return config.json ? JSON.parse(s) : s;
} catch(er) {}
}
var config = $.cookie = function (key, value, options) {
// write
if (value !== undefined) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
value = config.json ? JSON.stringify(value) : String(value);
return (document.cookie = [
encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// read
var decode = config.raw ? raw : decoded;
var cookies = document.cookie.split('; ');
var result = key ? undefined : {};
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = decode(parts.shift());
var cookie = decode(parts.join('='));
if (key && key === name) {
result = converted(cookie);
break;
}
if (!key) {
result[name] = converted(cookie);
}
}