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() потерпят неудачу, потому что они ожидают векторы столбцов.

Смежные вопросы