# Why does d-prime of average hit and false alarm rates differ from the average d-prime of individual cases?

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