количество заменяемых элементов не кратно длине замены в весе - PullRequest
0 голосов
/ 03 сентября 2018

Я использую полиномиальную регрессию, чтобы получить вероятность принадлежности к четырем подгруппам для 500 000 регионов. Data.frame выглядит следующим образом:

Regions        groupadmit        mid-pop
1                 2               1764
2                 3               1254
25                1               1452
674               4               2665
3001              2               1097
56                3               9864
98                1               2675
500,000          ....             .....

Я написал следующий код:

library (nnet)
mlogit<- multinom(groupadmit~mid_pop, data = admissionLSOA1)
probs <- predict(mlogit, type="probs")

Коды работают до этого момента, давая вероятность принадлежности к каждой группе (1, 2, 3, 4) для каждого наблюдения (региона).

Вероятность:

Regions     groupadmit1       groupadmit2     groupadmit3    groupadmit4         
52            0.2484091        0.2494408       0.2505393      0.2516109
97            0.2483949        0.2494358       0.2505441      0.2516252
1300          0.2483253        0.2494112       0.2505676      0.251695
287           0.2483623        0.2494242       0.2505551      0.2516584
500,000         ....            .....            ....          ....

Но когда я взвешиваю выборку (регионы) в соответствии с их вероятностью, это возвращает следующую ошибку:

Warning message:
In wts[groupadmit == 1] <- probs[groupadmit == 1, 1]/probs[groupadmit ==  :
number of items to replace is not a multiple of replacement length

Что я делаю, так это взвешиваю регионы в соответствии с их вероятностью принадлежности к каждой группе, пропорционально вероятности принадлежности к группе, чтобы уравновесить любые шансы для выбора. Это очень похоже на взвешивание обратной вероятности. Коды:

wts[groupadmit==1] <- probs[groupadmit==1,1]/probs[groupadmit==1,1]
wts[groupadmit==2] <- probs[groupadmit==2,1]/probs[groupadmit==2,2]
wts[groupadmit==3] <- probs[groupadmit==3,1]/probs[groupadmit==3,3]
wts[groupadmit==4] <- probs[groupadmit==4,1]/probs[groupadmit==4,4]

Но вышеупомянутая ошибка появляется всякий раз, когда я делаю анализ. Может кто-нибудь, пожалуйста, помогите мне понять, почему я получаю эту ошибку и как я могу ее исправить?

Большое спасибо заранее

1 Ответ

0 голосов
/ 03 сентября 2018

Почему R жалуется?

Warning message:
In wts[groupadmit == 1] <- probs[groupadmit == 1, 1]/probs[groupadmit ==  :
number of items to replace is not a multiple of replacement length

это означает, что правая часть вашей руки assign (<-) больше, чем то, что у вас есть на левой стороне, что составляет wts[groupadmit==1]

Поэтому я предлагаю вам сделать:

length(probs[groupadmit==1,1]/probs[groupadmit==1,1])

, а затем

length(wts[groupadmit==1]) 

Тогда, я полагаю, это показывает, что левая сторона меньше.

Тогда просто запустите

wts[groupadmit==1] <- probs[groupadmit==1,1]/probs[groupadmit==1,1]

и окончательно распечатать

wts[groupadmit==1]

Решение:

Быстрое решение - использовать rbind для создания wts:

wts<-rbind(probs[groupadmit==1,1]/probs[groupadmit==1,1], 
probs[groupadmit==2,1]/probs[groupadmit==2,2],
probs[groupadmit==3,1]/probs[groupadmit==3,3],
probs[groupadmit==4,1]/probs[groupadmit==4,4])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...