4

我有一些调查数据。例如,我使用包中的credit数据 ÌSLR

library(ISLR)

数据中 Gender 的分布是这样的

prop.table(table(Credit$Gender))
  Male Female 
0.4825 0.5175 

Student 的分布是这样的。

prop.table(table(Credit$Student))
 No Yes 
0.9 0.1  

假设在人口中,性别的实际分布是​​男性/女性(0.35/0.65),学生的分布是是/否(0.2/0.8)。

在 SPSS 中,可以通过将“总体分布”除以“样本分布”来模拟总体分布,从而对样本进行加权。这个过程称为“RIM 加权”。数据将仅通过交叉表分析(即没有回归、t 检验等)。什么是 R 中对样本加权的好方法,以便稍后通过交叉表分析数据?

可以在 R 中计算 RIM 权重。

install.packages("devtools")
devtools::install_github("ttrodrigz/iterake")


credit_uni = universe(df = Credit,
    category(
        name = "Gender",
        buckets = c(" Male", "Female"),
        targets = c(.35, .65)),
    category(
        name = "Student",
        buckets = c("Yes", "No"),
        targets = c(.2, .8)))

credit_weighted = iterake(Credit, credit_uni)



-- iterake summary -------------------------------------------------------------
 Convergence: Success
  Iterations: 5

Unweighted N: 400.00
 Effective N: 339.58
  Weighted N: 400.00
  Efficiency: 84.9%
        Loss: 0.178

这里是加权数据的 SPSS 输出(交叉表)

                Student     
                No  Yes 
Gender  Male    117 23  140
        Female  203 57  260
                320 80  400

这里来自未加权的数据(我导出了两个文件并在 SPSS 中进行了计算。我通过计算的权重对加权样本进行了加权)。

                Student     
                No  Yes 
Gender   Male   177 16  193
         Female 183 24  20          
                360 40  400

在加权数据集中,我有所需的分布学生:是/否(0.2/0.8)和性别男/女(0.35/0.65)。

这是使用性别和已婚(加权)的 SPSS 的另一个示例

    Married     
                No  Yes 
Gender   Male   57  83  140
         Female 102 158 260
                159 241 400

并且未加权。

                Married 
                No  Yes 
Gender   Male   76  117 193
         Female 79  128 207
                155 245 400

这在 R 中不起作用(即两个交叉表看起来都像未加权的)。

library(expss)

cro(Credit$Gender, Credit$Married)

cro(credit_weighted$Gender, credit_weighted$Married)



 |               |              | Credit$Married |     |
 |               |              |             No | Yes |
 | ------------- | ------------ | -------------- | --- |
 | Credit$Gender |         Male |             76 | 117 |
 |               |       Female |             79 | 128 |
 |               | #Total cases |            155 | 245 |

 |                        |              | credit_weighted$Married |     |
 |                        |              |                      No | Yes |
 | ---------------------- | ------------ | ----------------------- | --- |
 | credit_weighted$Gender |         Male |                      76 | 117 |
 |                        |       Female |                      79 | 128 |
 |                        | #Total cases |                     155 | 245 |
4

1 回答 1

1

使用expsspackage 你需要明确地提供你的权重变量。据我了解,向数据集iterake添加了特殊变量weight

library(expss)

cro(Credit$Gender, Credit$Married) # unweighted result

cro(credit_weighted$Gender, credit_weighted$Married, weight = credit_weighted$weight) # weighted result
于 2019-08-19T20:31:13.773 回答