2014-08-27 159 views
2

我在Matlab中運行一些迴歸。我的第一三個迴歸是:在Matlab中迴歸中引入虛擬變量時出錯

tbl1=table(Y1,X1); 
mdl1=fitlm(tbl1,'Y1~X1'); 
mdl12=fitglm(tbl1,'Y1~X1','Distribution','binomial','link','probit'); 
mdl13=fitglm(tbl1,'Y1~X1','Distribution','binomial'); 
  • Y1是我的因變量,它是二進制的,只需要的值0或1。
  • X1,自變量,是1列邏輯變量。它是一個虛擬的,它也只是取值爲1和0。

這3個不同的模型正在工作。

我以前建假人組來控制不同的效果(例如:年度,行業,員工等的數量),例如:

group1=cell2mat(A(:,5)); 
[~, ~, ugroup1] = unique(group1) 
D1=dummyvar(ugroup1); 
D1(:,1)=[0];      %Define reference group 
D1=logical(D1); 

或者

group2=cell2mat(A(:,6)); 
x2 = [0 10 20 25 30 35 40 45 50 55 60 70 100 300]; 
[n2, idx2] = histc(group2, x2); 
D2 = bsxfun(@eq, idx2, 1:length(x2)-1); 
D2(:,1)=[0]; 

我總共有94個假人,分爲4個不同的邏輯陣列(D1-48等級,D2-13等級,D3-6等級和D4-27等級)。

什麼我想現在要做的就是將它們添加到迴歸上面:

tbl1=table(Y1,X1,D1,D2,D3,D4); 
mdl1=fitlm(tbl1,'Y1~X1+D1+D2+D3+D4'); 
mdl12=fitglm(tbl1,'Y1~X1+D1+D2+D3+D4','Distribution','binomial','link','probit'); 
mdl13=fitglm(tbl1,'Y1~X1+D1+D2+D3+D4','Distribution','binomial'); 

但我總是得到錯誤:

1.Error using classreg.regr.FitObject/selectVariables (line 402) 
Predictor variables must be numeric vectors, numeric matrices, or categorical vectors. 

2.Error in classreg.regr.TermsRegression/selectVariables (line 370) 
      model = [email protected](model); 

3.Error in classreg.regr.FitObject/doFit (line 217) 
      model = selectVariables(model); 

我一直在嘗試不同的選項例如更改變量類型或添加例如tbl1.D1=nominal(D1);但它總是給出錯誤。我想它必須與我介紹虛擬組的方式有關。

有人能幫我嗎?謝謝。

我想這(所有變量改爲雙打):

Y=[Y1]; 
x=[X1 D1 D2 D3 D4]; 
mdl23=fitglm(x,Y,'Distribution','binomial'); 

它的工作原理,但我不知道它是正確的。我收到此警告:

警告:達到了迭代限制。

我不明白爲什麼因爲我減少了很多我的虛擬水平。

回答

0

您必須確保table()的所有輸入都是列向量。如果你給它的行矢量,它會接受它們,但然後fitglm()fitglme()將失敗,因爲他們期望列向量。