在Matlab中保存完全交互回归的变量名称

时间:2014-04-03 20:02:44

标签: matlab regression linear interaction

我正在运行一个完全相互作用的线性回归(也就是说,我包括所有变量的所有双向交互),现在我想输出变量名和系数估计值。 最小的例子如下:

y = randn(100,1); %Dependent variable
X = randn(100,3); %Independent variables
names = {'var1', 'var2', 'var3'};

Xint = x2fx(X, 'interaction'); %Construct interaction terms

res = regstats(y,Xint);

现在,x2fx​​()的文档声明它按以下顺序构造其输出:

常数

线性项(X列,依次为1,2,...,n)

交互术语(X列的成对乘积,顺序为(1,2),(1,3),...,(1,n),(2,3),...,( n-1,n))

我现在想要以相同的顺序构造一个变量名称的单元格,即(对于最小的例子)我想要

allVars = {'cons', 'var1', 'var2', 'var3','var1xvar2','var1xvar3','var2xvar3'};

我尝试使用ndgrid执行此操作,如下所示:

temp1 = 1:3; % Vector of variable indices
[x, y] = ndgrid(temp1, temp1);
allvarnames = [x(:) y(:)];

但这有两次相互作用的变量(例如一次为2-1,一次为1-2),顺序仍然是错误的。我可以按照这些方针进行,虽然它可能有些混乱,但我想知道是否有人知道更简单的解决方案。

提前致谢, 汤姆

1 个答案:

答案 0 :(得分:1)

也许使用triu(上三角矩阵)?

T = triu(ones(length(names))); %a mask for cross terms to keep
for i = 1:length(names)
    for j = 1:length(names)        
        if T(i,j) && (i ~= j)
            fprintf('%sx%s\n',names{i},names{j});
        end
    end
end

这只是印刷了交叉术语;您必须将它们保存到allvarnames数组中,并使用常量和线性项变量名称前置。

var1xvar2
var1xvar3
var2xvar3

请注意,无论名称的长度如何,这都有效。'