3
$\begingroup$

I'm reporting d-prime for a set of IDs. After setting a dprime() function, I use it to compute d-prime for each ID based on their hit and false alarm rates, saved as a new variable (d). I checked that the d-prime being given for each ID is correct.

I then need to report average d-prime for all IDs. I would also like to report mean hit and false alarm rates.

Using mean() for the new d variable, I get the value of 2.36.

Using mean() for the hit.rate variable, I get the value of 0.4496053.

Using mean() for the fa.rate variable, I get the value of 0.07.

After looking at this values, I was surprised that the mean d-prime was as high as it was. If I use my dprime() function on average hit and FA rates, then I get a dprime value of 1.349132.

Am I missing something about the way that d-prime works?? I'm very surprised by this. If average d-prime should only be taken when computed from individual cases first, and not after getting an average hit and FA rate, is it bad practice to be reporting these response rates?

Thanks so much for your help!!

data = structure(list(id = structure(1:20, .Label = c("8001", "8002", 
                                           "8003", "8004", "8005", "8006", "8007", "8008", "8009", "8010", 
                                           "8011", "8012", "8013", "8014", "8015", "8016", "8017", "8018", 
                                           "8019", "8020", "8101", "8102", "8103", "8104", "8105", "8106", 
                                           "8107", "8108", "8109", "8110", "8111", "8112", "8113", "8114", 
                                           "8115", "8116", "8117", "8118", "8119", "8120"), class = "factor"), 
           hit.rate = c(1, 0.121052631578947, 1, 0.421052631578947, 
                        0.65, 0.613157894736842, 0.478947368421053, 0.178947368421053, 
                        0.268421052631579, 0.394736842105263, 1, 0.0184210526315789, 
                        0.218421052631579, 0.331578947368421, 0.144736842105263, 
                        0.231578947368421, 0.523684210526316, 0.689473684210526, 
                        0.436842105263158, 0.271052631578947), fa.rate = c(1, 0, 
                                                                           0, 0, 0, 0, 0, 0, 0.0425, 0, 0, 0.00249999999999995, 0.01, 
                                                                           0, 0.015, 0, 0.155, 0, 0.05, 0.125)), .Names = c("id", "hit.rate", 
                                                                                                                            "fa.rate"), row.names = c(NA, -20L), class = "data.frame")


# set d' function
# Correction applied according to MacMillan & Kaplan, 1985
dprime <- function(hit, fa, n_targets, n_lures) {
  hit = ifelse(hit == 0, 1/(2*n_targets), hit)
  hit = ifelse(hit == 1, 1-(1/(2*n_targets)), hit)
  fa = ifelse(fa == 0, 1/(2*n_lures), fa)
  fa = ifelse(fa == 1, 1-(1/(2*n_lures)), fa)

  qnorm(hit) - qnorm(fa)
}

# add d' column to the data for each ID
data$d = dprime(data$hit.rate, data$fa.rate, 380, 400)
mean(data$d) # mean d' is 2.362759


# get mean hit and FA rates
mean.hit = mean(data$hit.rate) # mean hit.rate for all IDs is 0.4496053
mean.fa = mean(data$fa.rate)   # mean fa.rate for all IDs is 0.07
dprime(mean.hit, mean.fa, 380, 400) # d' is now 1.349132 
$\endgroup$

1 Answer 1

2
$\begingroup$

d' is transforming from one space to another. The averages of transformed spaces won't be the same as the average of untransformed space that is then transformed.

Consider as a toy example you had one ID with a false alarm rate very close to zero. The qnorm will approach negative infinity! That's definately going to pull your average of d' much more than averaging the FA then including that in a d".

Your last question is a big "it depends". I lean towards d' at the ID level and then summarizing that. However, your milage may vary.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.