Millisecond Forums

GNAT sample scripts for calculating d?

By Jay - 1/28/2011

Hello out there, 

Does anyone have a sample script (or know of an article that discusses this) for calculating a d score at the end of a GNAT?  What I am hoping is for participants to see their d score (and perhaps an interpretation) upon completion of the test.   I am also a little confused about whether the error rate alone, or the response latencies alone, or some combination of both - is the best way to score a GNAT.

On a related note . . . is there SPSS information for GNAT data? 

Thanks for the help.


By Dave - 1/28/2011

GNAT data may be summarized by calculating d' (d prime), a measure of sensitivity common in signal detection theory (SDT). Nosek & Banaji (2001) discuss analysis of GNAT data at length. Whether an accuracy based measure like d' or a latency based measure should be used depends on the specifics of your GNAT procedure. Note that d' is neither identical to the IAT D score measure nor Cohen's d (a measure of effect size). Because of the underlying distributional assumptions, calculating d' requires some advanced mathematical functions available in popular stats software, but not Inquisit (which is primarily a data collection, not a data analysis tool). Pulling this off in Inquisit would be very awkward if at all possible. SPSS syntax is available from the GNAT page at or Brian Nosek's site at Project Implicit.



By seandr - 1/29/2011

Just a quick comment on computing d prime in Inquisit. As Dave suggested, this can't be done with the current set of built in functions available in Inquisit. Specifically, Inquisit lacks a function for computing the Z score, which is required for computing d prime. This will likely be added to a future release.


By Dave - 2/3/2011

Since I've been doing some related work anyway, I might as well throw this in here. If anyone really, really, really needs to compute p or z values for whatever reason, Inquisit syntax for the standard normal CDF and its inverse is provided below. The code is based on Aludaat & Alodat (2008). More accurate algorithms are available, but I prefer these approximations because they're (a) relatively concise and (b) accurate enough for most purposes in psychology and related fields. Warning to unsuspecting readers: If you don't understand what this code does, chances are you don't need it.

# Normal CDF and Inverse Normal CDF functions
# This code is based on the approximations given in Aludaat & Alodat (2008).
# Results should be accurate to about two decimal places, with larger deviations
# for extreme values. This code is provided without any warranty.

# expressions.p_z computes p given z
# expressions.z_p computes z given p

/ p_z = if(values.z>0) 0.5*(1+sqrt((1-exp(-sqrt(m_pi/8)*pow(values.z,2))))) else
/ z_p = if(expressions.p_z>0.5) sqrt(-ln(1-pow(2*expressions.p_z-1,2))/sqrt(m_pi/8)) else

/ z = 0.6

<text mytext>
/ items = ("z = <%values.z%> | p_z = <%expressions.p_z%> | z_p = <%expressions.z_p%>")

<trial mytrial>
/ stimulusframes = [1=mytext]
/ validresponse = (anyresponse)