(RIM) R 中的加权样本
(RIM) weighting samples in R
我有一些调查数据。例如,我使用 ÌSLR
中的 credit
数据
包。
library(ISLR)
数据中的性别分布如下所示
prop.table(table(Credit$Gender))
Male Female
0.4825 0.5175
Student 的分布如下所示。
prop.table(table(Credit$Student))
No Yes
0.9 0.1
假设,在人口中,性别的实际分布是 Male/Female(0.35/0.65),学生的分布是 Yes/No(0.2/0.8)。
在 SPSS 中,可以通过将 "population distribution" 除以 "distribution of the sample" 来模拟总体分布,从而对样本进行加权。这个过程叫做"RIM Weighting"。数据将仅通过交叉表进行分析(即没有回归、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
在加权数据集中,我有期望的分布 Student:Yes/No(0.2/0.8) 和 Gender male/female(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 |
对于 expss
包,您需要明确提供您的权重变量。据我了解 iterake
将特殊变量 weight
添加到数据集:
library(expss)
cro(Credit$Gender, Credit$Married) # unweighted result
cro(credit_weighted$Gender, credit_weighted$Married, weight = credit_weighted$weight) # weighted result
我有一些调查数据。例如,我使用 ÌSLR
中的 credit
数据
包。
library(ISLR)
数据中的性别分布如下所示
prop.table(table(Credit$Gender))
Male Female
0.4825 0.5175
Student 的分布如下所示。
prop.table(table(Credit$Student))
No Yes
0.9 0.1
假设,在人口中,性别的实际分布是 Male/Female(0.35/0.65),学生的分布是 Yes/No(0.2/0.8)。
在 SPSS 中,可以通过将 "population distribution" 除以 "distribution of the sample" 来模拟总体分布,从而对样本进行加权。这个过程叫做"RIM Weighting"。数据将仅通过交叉表进行分析(即没有回归、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
在加权数据集中,我有期望的分布 Student:Yes/No(0.2/0.8) 和 Gender male/female(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 |
对于 expss
包,您需要明确提供您的权重变量。据我了解 iterake
将特殊变量 weight
添加到数据集:
library(expss)
cro(Credit$Gender, Credit$Married) # unweighted result
cro(credit_weighted$Gender, credit_weighted$Married, weight = credit_weighted$weight) # weighted result