Я запускаю некоторые регрессии в 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');
Это работает, но я не уверен, что это правильно. Я получаю это предупреждение:
Предупреждение: Достигнуто предельное значение итерации.
Я не понимаю, почему, поскольку я уменьшил количество моих фиктивных уровней.