我正在尝试模拟 2 X 2 数据,这些数据会产生相对较强的负 phi 系数。
我正在使用库GenOrd
如下:
library(GenOrd)
# Specify sample size N
N <- 40
# Marginal distribution
marginal <- list(c(.5), c(.5))
# Matrix
Sigma <- matrix(c(1.0, -.71, -.71, 1.0), 2, 2, byrow=TRUE)
# Generate a sample of the categorical variables with specified parameters
m <- ordsample(N, marginal, Sigma)
但是,每当我输入大于 -.70
的相关性时,我都会收到以下错误。
Error in contord(list(marginal[[q]], marginal[[r]]), matrix(c(1, Sigma[q, :
Correlation matrix not valid!
我显然在某处指定了一些站不住脚的东西——但我不知道它是什么。
感谢帮助。
我会尝试回答这个问题作为一个编码问题。该错误指向软件包发现问题开始的位置:在您的 Sigma 条目处。考虑到您的边际分布,在您的 corr. 矩阵中有 -.71 是越界的,包会警告您这一点。您可以通过更改 Sigma 中的符号来查看这一点:
Sigma <- matrix(c(1.0, .71, .71, 1.0), 2, 2, byrow=TRUE)
m <- ordsample(N, marginal, Sigma)
> m
[,1] [,2]
[1,] 1 1
[2,] 1 2
....
至于为什么 -.71 无效,您可能希望将该统计问题定向到交叉验证以获得简洁的答案。
我不确定"为什么",但是,我发现使用 MultiOrd
包中的 generate.binary()
函数模拟 2 X 2 数据会产生相对较强的负相关性没有问题。
例如,以下代码将适用于完整的相关输入范围。generate.binary()
函数的文档表明指定的矩阵被解释为四弦相关矩阵。
library(MultiOrd)
# Specify sample size N
N <- 40
# Marginal distribution for two variables as a vector for MultiOrd rather than a list
marginal <- c(.5, .5)
# Correlation (tetrachoric) matrix as target for simulated relationship between variables
Sigma <- matrix(c(1.0, -.71, -.71, 1.0), 2, 2, byrow=TRUE)
# Generate a sample of the categorical variables with specified parameters
m <- generate.binary(40, marginal, Sigma)