R 具有最小共现非NA值数的矩阵的最佳子集?

R 具有最小共现非NA值数的矩阵的最佳子集?,r,algorithm,matrix,graph-algorithm,subgraph,R,Algorithm,Matrix,Graph Algorithm,Subgraph,我有一个N×T的数据矩阵(N>>T),其中有许多缺失的NA值。我正在搜索矩阵的最佳行子集,这样任意两行N_I和N_j将至少有k>=2个共现(即同时出现t)非NA值。为了激发这一点,我找到这个子集的最终目标是能够计算成对相关矩阵(使用R的cor(,use=“pairwise.complete.obs”)作为收缩过程的初始估计值 形式上,如果X是我的原始矩阵,那么Y是矩阵,其中每个条目都有值1,如果对应的X条目有一个观察值,NA为0。那么YY'将是一个N X N矩阵,计算非NA值的共现情况。最初,这

我有一个N×T的数据矩阵(N>>T),其中有许多缺失的NA值。我正在搜索矩阵的最佳行子集,这样任意两行N_I和N_j将至少有k>=2个共现(即同时出现t)非NA值。为了激发这一点,我找到这个子集的最终目标是能够计算成对相关矩阵(使用R的
cor(,use=“pairwise.complete.obs”)
作为收缩过程的初始估计值

形式上,如果X是我的原始矩阵,那么Y是矩阵,其中每个条目都有值1,如果对应的X条目有一个观察值,NA为0。那么YY'将是一个N X N矩阵,计算非NA值的共现情况。最初,这个YY'矩阵将包含0个值,表示N_i行和N_j行共现0个值。我想找到最大值使YY'的最小值为k=2或3等的X的est子集

有没有什么算法可以解决这个问题,理想情况下在R中实现?我感觉这个YY'矩阵可以被视为一个图,并且可能存在解决这个问题的已知程序(集团发现?Steiner树?)但我在这方面的知识还不够丰富……我可以想到一种贪婪的迭代算法,每次都删除最差的行并重新计算YY,但我希望会有一个更优雅、更快的解决方案

数据的快速模拟:

set.seed(123)
X[3,]3 4 11
最小(YY)
#> [1] 0

由(v0.3.0)于2020年9月28日创建,不幸的是,这个问题是NP难问题。给定一个有n个顶点和m条边的图,我们可以将查找最大团的问题简化为在顶点-边关联矩阵上k=1时解决这个问题(对于较高的k,重复列)

我会以一种明显的方式扭转这种减少,并将这个问题减少到max集团


图的顶点对应于行。如果对应的行有足够的非NA coöccurring值,则两个顶点之间有一条边。要找到最大值团,您可以大声呼叫。

阅读您的帖子,这是一个打字错误:“我想找到X的最小子集,使YY'的最小值为k=2或3,等等。”我想你的意思是,“我想找到X的最大子集,使得YY'的最小值是k=2,或3,等等。”一个非常简单的贪心迭代算法:在每次迭代中,扫描YY'的行,查找下面有最多条目的行
k
。从X中删除这个条目,重新计算YY'并重复。当YY'的行中没有条目的行低于
k
时终止。谢谢你的打字,我的错!是的,我已经想到了那个贪心的过程,但希望如此这将是一个更优雅的解决方案!只需相应地编辑文本。感谢@ldogThank您的回答!您是否介意提供一些基本的背景知识,针对初学者?我的例子中的顶点和边是什么,YY'的N个观察值和非0个条目?我手头的问题的标准名称是什么?I的数据类型是什么have最多有N=7000和T=20,但我不认为T的维数起多大作用,如果我们关注的是dim N x N的YY'矩阵?非常感谢!!@Matifou添加了一些关于如何使用max集团解决问题的描述。@Matifou关于标准问题名称,我不想在不查阅文献的情况下发表权威性的讲话,但因为与马克斯集团的密切联系,我不确定它是否有自己的名字(而不是作为马克斯集团在一个有限的图形类上进行研究)。谢谢!我理解得更好,但仍然对你的中间句“以明显的方式扭转缩减”感到困惑?请注意,igraph只使用无向图,因此我将YY'转换为1/0矩阵,如果YY'条目的值>=1,则为1。对于更高的k,我该怎么做?迭代,还是简单地将无向YY'设置为值>=k?非常感谢!@Matifou yes,threshold YY'。