2

我目前正在尝试在 R 中执行 anesrake 函数(anesrake 包https://cran.r-project.org/web/packages/anesrake/index.html的一部分,它根据样本属性集对总体属性集进行加权)到多组变量的近似权重排名。

我有一个样本数据表 testData:

Index   GENDER   AGE    
1       Female   18-24  
2       Female   35-64  
3       Male     65+    

注意:年龄范围有 6 个级别 - 18-24,25-34,35-44,45-54,55-64,65+

然后,我的人口数据有一组 2 个列表:

GENDER <- c(.49,.51)
AGE <- c(.08,.1,.12,.2,.2,.3)

然后我在原始表上创建一组目标变量和一个 CASEID 列:

targets <- list(GENDER, AGE)
names(targets) <- c("GENDER", "AGE")
testData$CASEID <- 1:length(testData$GENDER)

我终于看到了我的人口数据与我的样本数据的差异:

> anesrakefinder(targets, testData, choosemethod = "total")
   GENDER       AGE 
0.1495337 0.3668394 

但是当我使用 anesrake 函数做最终分析时,我得到了抛出的错误:

> anesrake(inputter=targets,dataframe=testData,caseid=testData$CASEID)
Error in rakeonvar.default(mat[, i], inputter[[i]], weightvec) : 
  number of variable levels does not match number of weighting levels
In addition: Warning message:
In rakeonvar.default(mat[, i], inputter[[i]], weightvec) :
  NAs introduced by coercion

我一直在关注两个关于如何使用 anesrake 的“教程”,但我仍然不够努力。这些是下面的教程:

http://sdaza.com/survey/2012/08/25/raking/

http://surveyinsights.org/wp-content/uploads/2014/07/Full-anesrake-paper.pdf

您可以在这方面提供的任何帮助将不胜感激。

干杯,

斯图

4

2 回答 2

3

您需要使用以下示例将目标变量的级别标记为与数据变量的级别相同 -

names(targets$agecat1) <- levels(rak2$agecat1)
names(targets$newpayer) <- levels(rak2$newpayer)
于 2017-06-06T19:35:56.410 回答
1

我刚刚通过将我的数据从字符转换为因子解决了同样的问题。

您可以尝试以下方法:

testData$GENDER <- as.factor(testData$GENDER) 
testData$AGE <- as.factor(testData$AGE)
于 2017-01-02T12:51:02.277 回答