Матричная обусловленность в порядковой логистической регрессии

У меня есть два набора данных, один необработанный и один очищенный. Независимая переменная - это урон, который может принимать любое значение от 0 до 100 включительно. Зависимая переменная - это рейтинг пользователя, который может принимать любое целое число от 1 до 5 включительно. Поскольку IV является непрерывным, а порядковый номер DV, я использую логистическую регрессию для прогнозирования будущих ответов - в частности, я использую встроенную в MATLAB функцию mnrfit, определяя тип модели в качестве порядкового.

Это работало хорошо для необработанных данных, но я получаю ошибку при попытке регрессии на очищенных данных. В частности,

В mnrfit>ordinalFit (строка 349) В mnrfit (строка 206) Предупреждение: матрица является единственной, близкой к единственной или плохо масштабируемой. Результаты могут быть неточными. RCOND = NaN. Ошибка использования Linsolve Matrix должна быть положительно определенной.

Ошибка в mnrfit (строка 248) bcov = linsolve(hess,eye(size(hess)),struct('SYM',true,'POSDEF',true));"

Между двумя наборами данных нет большой разницы, просто несколько нулей в очищенных ответах. Номер условия необработанной матрицы ответа составляет около 57, а числа очищенной матрицы ответа - около 58. Ранг и необработанного ответа, и матрицы очищенного ответа составляет 5, что равно количеству столбцов в каждой матрице. Поэтому я не уверен, почему регрессия должна работать с необработанными данными, а не с очищенными данными.

Может кто-нибудь предложить, как продолжить устранение неполадок / отладки? Или почему регрессия может не работать? Я включил соответствующие фрагменты кода и образцы данных в конце этого поста.

Заранее спасибо!

Это код для исходной модели logit, основанной на необработанных данных:

% fit logit model to all data - responses as a function of mean CDF
% expect a positive trend - i.e. that responses get larger as mean CDF
% increases
% 1: predictor variable is mean CDF; response variable is the user
% damage rating - this is the way our experiment was designed
    % get unique values of mean CDF
    [x,ia,ic] = unique(crowddata(:,3));
    y(1:length(x),1:5) = 0;
    for i = 1:length(x)
        y(i,1:5) = crowddata(ia(i),5:9);
        beq(i,1) = buckets(ia(i),3);
        buneq(i,1) = buckets(ia(i),4);
    end

    % get sample sizes (total number of responses) for each mean CDF
    for i = 1:length(x)
        ssize(i,1) = y(i,1) + y(i,2) + y(i,3) + y(i,4) + y(i,5);
    end

    % fit a ordinal logistic regression model
    [b,dev,stat] = mnrfit(x,y,'model','ordinal');
    b2 = [b(1:4)';repmat(b(5:end),1,4)];

    xx = (1:1:276)';
    % get probability that a mean CDF is in a category, based on our
    % logit model that includes all user responses
    pihat = mnrval(b,xx,'model','ordinal','interactions','off');

Ниже приведен код регрессионной модели, основанной на очищенных данных.

% new regression model using only responses cleaned based on time
% 2: predictor variable is mean CDF; response variable is the user
% damage rating - this is the way our experiment was designed
    % get unique values of mean CDF
    [x_clean,ia,ic] = unique(crowddata_clean(:,3));
    y_clean(1:length(x_clean),1:5) = 0;
    for i = 1:length(x_clean)
        y_clean(i,1:5) = crowddata_clean(ia(i),5:9);
        beq(i,1) = buckets(ia(i),3);
        buneq(i,1) = buckets(ia(i),4);
    end

    % get sample sizes (total number of responses) for each mean CDF
    for i = 1:length(x_clean)
        ssize_clean(i,1) = y_clean(i,1) + y_clean(i,2) + y_clean(i,3) +...
            y_clean(i,4) + y_clean(i,5);
    end

    % fit a ordinal logistic regression (linear) model
    [bclean,dev,stat] = mnrfit(x_clean,y_clean,'model','ordinal');
    b3 = [b(1:4)';repmat(b(5:end),1,4)];

ОБНОВЛЕНО: x и x_clean - это 276 x 1 векторов со значениями в диапазоне от ~0,3 до ~77.

Y и y_clean - это 276 x 5 матриц с номерами условий около 14. Вот первые 10 строк y

2   0   0   0   0
2   0   0   0   0
1   1   0   0   0
10  1   0   0   0
2   1   0   0   0
8   1   1   0   0
0   1   0   0   0
4   1   0   0   0
5   0   0   0   0
2   2   0   1   0
0   2   3   0   0

0 ответов

Другие вопросы по тегам