在 R 中生成离散数据的可行采样分布



我正在尝试模拟 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)

最新更新