使用R中的权重来考虑抽样概率的倒数

时间:2016-06-13 19:50:31

标签: r dataframe regression stata

这类似但不等于Using weights in R to consider the inverse of sampling probability

我有一个很长的数据框,这是真实数据的一部分:

age gender labour_situation industry_code FACT FACT_2....
35  M      unemployed       15            1510
21  F      inactive         00            651

FACT是一个变量,对于第一行来说,35岁的男性失业者代表1510人口。

我需要获得一些表来显示相关信息,例如就业人口和失业人员的百分比等。在Stata中,有一些选项,如tab labour_situation [w=FACT],显示人口中就业和失业人数,{ {1}}显示样本中就业和失业人数。

部分解决方案可能是重复数据帧的第一行1510次,然后我的数据帧的第二行重复651次?正如我搜索过的一个选项是运行

tab labour_situation

我需要做的另一件事是运行回归,记住以下列方式进行整群抽样:人口按区域划分。这造成了一个问题:一个人 foo+bar中的受访者代表foo+bar人,而foo+bar中受访的个人代表foo+bar人,但foo+barfoo+bar与总人数不成比例每个地区的人口,因此一些地区的人口过多,其他地区的人数不足。为了考虑到这一点,每个观测值应该通过其采样概率的倒数来加权。

最后一段意味着模型foo+bar可以使用有效等式估算foo+bar 方差 - 协方差矩阵不会是foo+bar,而是{ {0}}如果我考虑采样概率的倒数。

在Stata中,可以通过执行longdata <- data[rep(1:nrow(data), data$FACT), ] employment_table = with(longdata, addmargins(table(labour_situation, useNA = "ifany"))) 来运行回归,并且考虑到采样概率的倒数来计算正确的方差 - 协方差矩阵。当时我必须使用Stata来完成我的部分工作而将R用于其他工作。我只想使用R。

1 个答案:

答案 0 :(得分:3)

您可以通过重复rownames:

来完成此操作
df1 <- df[rep(row.names(df), df$FACT), 1:5]

> head(df1)
    age gender labour_situation industry_code FACT
1    35      M       unemployed            15 1510
1.1  35      M       unemployed            15 1510
1.2  35      M       unemployed            15 1510
1.3  35      M       unemployed            15 1510
1.4  35      M       unemployed            15 1510
1.5  35      M       unemployed            15 1510
> tail(df1)
      age gender labour_situation industry_code FACT
2.781  21      F         inactive             0  787
2.782  21      F         inactive             0  787
2.783  21      F         inactive             0  787
2.784  21      F         inactive             0  787
2.785  21      F         inactive             0  787
2.786  21      F         inactive             0  787

此处1:5指的是要保留的列。如果您将该位留空,则将返回所有内容。