Returns a design or model matrix of orthonormal contrasts such that the marginal prior on all effects is identical. Implementation from Singmann & Gronau's bfrms, following the description in Rouder, Morey, Speckman, & Province (2012, p. 363).

Though using this factor coding scheme might obscure the interpretation of parameters, it is essential for correct estimation of Bayes factors for contrasts and order restrictions of multi-level factors (where `k>2`). See info on specifying correct priors for factors with more than 2 levels in the Bayes factors vignette.

contr.orthonorm(n, contrasts = TRUE, sparse = FALSE)

Arguments

n

a vector of levels for a factor, or the number of levels.

contrasts

a logical indicating whether contrasts should be computed.

sparse

logical indicating if the result should be sparse (of class dgCMatrix), using package Matrix.

Value

A matrix with n rows and k columns, with k=n-1 if contrasts is TRUE and k=n if contrasts is FALSE.

Details

When `contrasts = FALSE`, the returned contrasts are equivalent to `contr.treatment(, contrasts = FALSE)`, as suggested by McElreath (also known as one-hot encoding).

References

- McElreath, R. (2020). Statistical rethinking: A Bayesian course with examples in R and Stan. CRC press.

- Rouder, J. N., Morey, R. D., Speckman, P. L., & Province, J. M. (2012). Default Bayes factors for ANOVA designs. *Journal of Mathematical Psychology*, 56(5), 356-374. https://doi.org/10.1016/j.jmp.2012.08.001

Examples

contr.orthonorm(2) # Q_2 in Rouder et al. (2012, p. 363)
#> [,1] #> [1,] -0.7071068 #> [2,] 0.7071068
contr.orthonorm(5) # equivalent to Q_5 in Rouder et al. (2012, p. 363)
#> [,1] [,2] [,3] [,4] #> [1,] 0.0000000 0.8944272 0.0000000 0.0000000 #> [2,] 0.0000000 -0.2236068 -0.5000000 0.7071068 #> [3,] 0.7071068 -0.2236068 -0.1666667 -0.4714045 #> [4,] -0.7071068 -0.2236068 -0.1666667 -0.4714045 #> [5,] 0.0000000 -0.2236068 0.8333333 0.2357023
## check decomposition Q3 <- contr.orthonorm(3) Q3 %*% t(Q3) ## 2/3 on diagonal and -1/3 on off-diagonal elements
#> [,1] [,2] [,3] #> [1,] 0.6666667 -0.3333333 -0.3333333 #> [2,] -0.3333333 0.6666667 -0.3333333 #> [3,] -0.3333333 -0.3333333 0.6666667