2012-07-17 26 views
1

我正在执行线性回归分析(y = xb,用给定的[nx1]向量y和[nxm]矩阵x对b求解相当大的一组数据,使用regstats()函数Matlab统计工具箱,并循环一系列矩阵/矢量对。问题是如果列中有全零,regstats会返回NaN,因为它不能执行回归。在我所有的x矩阵中有零列,但它们并不总是出现在相同的列号中。由于我的x-矩阵中的每列代表一个现实世界变量,我不能简单地删除零列并运行回归。我需要删除零,记住哪些列已被删除,运行回归,然后将0值合并到b向量结果中适当的位置。这样,我的所有结果都表示相同顺序的相同数量的变量,其中特定变量未包含在回归中的位置为零。我用一小组测试数据手动完成了这项工作,但现在我需要运行它以获得大约800个回归对,所以我需要一些方法来自动搜索和替换零列。为regstats函数删除零列

回答

1
IZEROS = find(all(M==0)); 

IZEROS将是具有全部为零的列的索引列表。

1
allzero = all(x == 0, 1); 
goodcols = find(~allzero); 

b = zeros(m,1); 
b(goodcols) = % solution to problem, taking into account only goodcols