我正在尝试编写Fisher的精确测试代码(参见:wiki),特别是针对2x2列联表(矩阵)。但是我在一个特定的步骤上被卡住了:在观察到的非负整数矩阵的情况下生成替代矩阵,其中替代矩阵的行和和和必须等于原始矩阵。This page (Wolphram)有所有步骤的描述,但下面我将详细说明我所坚持的部分。在
问题
为了实现2x2列联表的Fisher精确检验,我们给出了一个2x2矩阵,其元素是表示观察值的非负整数,即观察到的矩阵。在
其中一个步骤要求我生成2 x 2矩阵的所有组合,备选矩阵,其非负整数元素受以下条件限制:
对我来说,生成替代矩阵最明显的方法是在一个2x2矩阵中强制所有可能的数字组合,其值小于或等于所观察矩阵的行/列之和。然后迭代这些组合,过滤掉不满足上述条件的组合。在
编辑:在2x2矩阵(备选矩阵)中生成所有元素组合的最快算法是什么?行和列和等于观察到的矩阵的行和和和?
< S>原件:我们如何用以下语言实现这一点:R、Python、C/C++、Matlab?
示例
以2×2检验的一个应用为例,设X为期刊,如《数学杂志》或《科学》,Y为某一期刊某一期中出现的有关数学和生物学主题的文章数。如果《数学》杂志有五篇关于数学的文章和一篇关于生物学的文章,而《科学》没有关于数学的文章和四篇关于生物的文章,那么相关的矩阵将是:
所有可能的替代矩阵将是:
相关帖子
这其实很简单。您只需从所有可能的组合中选择符合条件的组合。在
下面是python中的一个解决方案:
我有一个答案用sympy。想法是一样的:求解线性方程组,从矩阵元素的和中得到行数和列数。这是硬编码的,基本上就是你的矩阵。linsolve给你无穷多的解,其余的则把它们限制为正整数。在
相关问题 更多 >
编程相关推荐