替换项目的数量不是加权长度的替换倍数

时间:2018-09-03 10:47:04

标签: r regression

我正在使用多项式回归来获得属于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 :(得分:0)

为什么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])