This function allows you to calculate A from from a vector hits and a vector a false alarms.
A(data, h, f)
# Create some data
set.seed(1); library(dplyr)
#>
#> Attaching package: ‘dplyr’
#> The following objects are masked from ‘package:stats’:
#>
#> filter, lag
#> The following objects are masked from ‘package:base’:
#>
#> intersect, setdiff, setequal, union
axb <- data.frame(subj = sort(rep(1:10, each = 20, times = 10)),
group = gl(2, 1000, labels = c("g1", "g2")),
hit = c(rbinom(1000, size = c(0, 1), prob = .8),
rbinom(1000, size = c(0, 1), prob = .6)),
fa = c(rbinom(1000, size = c(0, 1), prob = .3),
rbinom(1000, size = c(0, 1), prob = .4))
)
# Calculate A on entire data frame
A(axb, hit, fa)
#> [1] 0.6703768
# Calculate A for each subject
# by group, plot it, and run a
# linear model
axb %>%
group_by(subj, group) %>%
summarize(A = A(., hit, fa)) %T>%
{
plot(A ~ as.numeric(group), data = .,
main = "A as a function of group", xaxt = "n",
xlab = "Group", ylab = "A")
axis(1, at = 1:2, labels = c("g1", "g2"))
abline(lm(A ~ as.numeric(group), data = .), col = "red")
} %>%
lm(A ~ group, data = .) %>%
summary()
#> `summarise()` has grouped output by 'subj'. You can override using the
#> `.groups` argument.
#> Warning: essentially perfect fit: summary may be unreliable
#>
#> Call:
#> lm(formula = A ~ group, data = .)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -3.701e-17 -3.701e-17 0.000e+00 0.000e+00 1.480e-16
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 6.704e-01 2.617e-17 2.562e+16 <2e-16 ***
#> groupg2 -3.700e-17 3.700e-17 -1.000e+00 0.347
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
#> Residual standard error: 5.851e-17 on 8 degrees of freedom
#> Multiple R-squared: 0.3104, Adjusted R-squared: 0.2242
#> F-statistic: 3.6 on 1 and 8 DF, p-value: 0.09433
#>