在Matlab中的回归中引入虚拟变量时出错

时间:2014-08-27 15:50:51

标签: matlab linear-regression logistic-regression dummy-data

我在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 = selectVariables@classreg.regr.ParametricRegression(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');

它有效,但我不确定它是对的。我收到了这个警告:

  

警告:已达到迭代限制。

我不明白为什么因为我减少了很多我的虚拟等级。

1 个答案:

答案 0 :(得分:0)

您必须确保table()的所有输入都是列向量。如果你给它行向量,它会接受它们,但是fitglm()fitglme()会因为期望列向量而失败。