2014-04-03 109 views
1

我正在運行完全交互式的線性迴歸(即包括所有變量的所有雙向交互),現在我想輸出變量名稱以及係數估計值。 一個最小的例子如下所示:在Matlab中保存完全交互迴歸的變量名稱

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​​的documenation()指出,它構造其以下列順序輸出:

常數項

的線性項(該(1,2,...,n)列中的X,列

交互作用項(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

也許使用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 

請注意,無論'姓名'的長度如何,這都是有效的。