我正在為我想象中的R中的多層次抽樣程式而苦惱。 假設我有一個資料集,由一個非常有偏見的抽樣方法組成。因此,用參與者得到的結果是有偏見的。我想調整資料集以匹配兩個人口統計變數(性別和年齡),這兩個變數在資料集中被編碼為因子。下面的圖片描述了這種情況。
我假設我需要進行一個 "回圈 "計算。舉個例子:為了調整第一個年齡區間(15-19歲)的樣本量,我需要定義一個新的總數,其中這個最終樣本符合50% 50%的定義。
x< -結構(list(age_cat = c("25-29"/span>。 "30-34", "25-29", "20-24",
"25-29", "20-24"。 "35-39", "30-34"。 "25-29",/span> "30-34"。 "25-29",
"30-34",/span> "35-39"。 "45-49", "40-45"。 "20-24", "20-24"。 "25-29",
"35-39", "35-39"。 "25-29", "20-24", "30-34", "30-34", "40-45",
"25-29", "25-29"。 "25-29",/span> "20-24"。 "40-45", "20-24"。 "40-45",
"30-34",/span> "25-29"。 "45-49", "30-34", "45-49", "40-45", "25-29",
"35-39",/span> "40-45"。 "25-29",/span> "45-49"。 "35-39",/span> "45-49"。 "40-45",
"20-24", "45-49"。 "40-45", "25-29", "35-39", "30-34", "30-34",
"25-29",/span> "20-24"。 "20-24",/span> "40-45"。 "35-39", "25-29", "25-29",
"20-24", "40-45"。 "20-24", "20-24"。 "45-49", "20-24"。 "35-39",
"20-24", "35-39"。 "45-49", "15-19", "45-49", "35-39"。 "35-39",
"30-34", "35-39"。 "45-49",/span> "35-39"。 "30-34", "20-24", "35-39",
"40-45", "40-45"。 "40-45",/span> "30-34"。 "45-49", "20-24", "30-34",
"45-49", "35-39"。 "20-24", "20-24", "20-24",/span> "45-49", "20-24",
"45-49",/span> "35-39"。 "25-29",/span> "40-45"。 "40-45",/span> "25-29"。 "35-39",
"45-49", "30-34"。 "45-49", "45-49"。 "45-49",/span> "15-19"。 "30-34",
"45-49", "30-34"。 "30-34",/span> "35-39"。 "25-29",/span> "40-45"。 "15-19",
"20-24", "20-24"。 "40-45", "40-45"。 "45-49", "45-49"。 "35-39",
"40-45", "30-34"。 "35-39", "35-39"。 "25-29", "25-29"。 "20-24",
"20-24", "40-45"。 "20-24", "35-39", "20-24", "20-24", "30-34",
"25-29", "45-49"。 "25-29", "35-39", "20-24",/span> "35-39"。 "35-39",
"35-39", "40-45"。 "35-39", "35-39", "20-24", "30-34", "25-29",
"15-19", "30-34"。 "35-39", "15-19", "20-24", "20-24"。 "35-39",
"25-29", "25-29"。 "25-29", "25-29"。 "30-34",/span> "40-45"。 "35-39",
"30-34", "35-39"。 "40-45", "25-29", "30-34", "25-29"。 "25-29",
"45-49", "30-34"。 "30-34",/span> "25-29"。 "15-19",/span> "25-29"。 "20-24",
"15-19",/span> "20-24"。 "30-34", "20-24"。 "40-45", "25-29", "25-29",
"30-34", "30-34"。 "25-29",/span> "20-24"。 "40-45", "45-49", "25-29",
"25-29", "40-45"。 "35-39", "25-29", "45-49", "35-39", "30-34",
"45-49", "30-34"。 "30-34",/span> "45-49", "35-39", "20-24", "45-49",
"30-34", "25-29"。 "45-49", "45-49"。 "40-45", "25-29"。 "20-24",
"40-45", "30-34"。 "35-39", "30-34"。 "20-24",/span> "35-39"。 "20-24",
"30-34", "20-24"。 "35-39", "35-39"。 "30-34", "45-49", "40-45",
"45-49",/span> "25-29"。 "35-39", "40-45", "30-34", "35-39", "30-34",
"35-39", "20-24"。 "25-29",/span> "35-39"。 "30-34", "30-34"。 "25-29",
"45-49", "45-49"。 "40-45", "40-45"。 "35-39", "30-34", "25-29",
"35-39", "20-24"。 "40-45", "20-24"。 "30-34", "40-45", "20-24",
"45-49", "20-24"。 "40-45", "25-29"。 "40-45", "25-29", "45-49",
"30-34", "30-34"。 "45-49", "40-45", "30-34", "30-34"。 "20-24",
"20-24", "35-39"。 "30-34", "15-19"。 "35-39", "25-29", "45-49",
"30-34", "25-29"。 "35-39", "15-19", "40-45", "45-49"。 "15-19",
"35-39",/span> "45-49"。 "45-49", "25-29")。 sex_cat =結構(c(1L。
2L, 1L。 2L, 1L。 1L, 1L。 2L, 2L。 1L, 1L。 2L, 1L。 2L, 1L。 1L, 1L, 1L,
1L,/span> 1L。 1L, 2L。 1L, 1L, 1L, 2L。 2L, 2L。 1L, 2L。 2L, 1L。 2L, 2L,
2L,/span> 1L。 1L, 1L。 2L, 2L。 2L, 2L。 1L, 1L, 2L, 2L。 1L, 1L。 2L, 2L,
2L,/span> 1L。 2L, 1L。 1L, 2L。 2L, 1L。 2L, 2L。 1L, 1L。 1L, 1L。 2L, 1L,
1L, 2L。 1L, 2L。 2L, 1L。 2L, 1L。 1L, 1L。 2L, 2L。 1L, 1L。 2L, 1L,
1L, 2L。 1L, 1L。 1L, 1L。 1L, 2L。 2L, 2L。 1L, 2L。 1L, 2L。 1L, 1L,
1L,/span> 1L。 1L, 2L。 1L, 1L。 2L, 1L。 1L, 2L。 1L, 2L。 1L, 1L。 1L, 1L, 1L,
1L,/span> 1L。 2L, 2L。 2L, 1L。 1L, 1L。 2L, 1L。 1L, 1L。 1L, 2L。 2L, 1L,
1L,/span> 1L。 1L, 2L。 2L, 1L。 2L, 1L。 2L, 1L。 2L, 1L。 2L, 2L。 2L, 1L,
1L, 2L。 1L, 2L。 1L, 2L。 1L, 2L。 2L, 2L。 1L, 2L。 1L, 2L。 1L, 1L,
2L,/span> 2L。 1L, 2L。 1L, 1L。 1L, 1L。 2L, 2L。 1L, 1L。 1L, 2L。 1L, 2L,
1L, 1L。 2L, 1L。 2L, 2L。 2L, 1L。 2L, 2L。 2L, 1L。 2L, 1L。 2L, 1L,
1L, 2L。 1L, 2L。 1L, 1L, 1L, 1L。 2L, 2L。 1L, 2L。 1L, 1L。 2L, 1L,
2L, 1L。 1L, 1L。 2L, 2L。 1L, 1L。 1L, 2L。 1L, 2L。 2L, 1L。 1L, 2L,
1L,/span> 2L。 1L, 2L。 2L, 2L。 2L, 2L。 1L, 1L。 1L, 1L。 1L, 2L。 2L, 2L, 2L,
1L, 1L。 1L, 1L。 1L, 1L。 2L, 2L。 1L, 1L。 2L, 1L。 2L, 2L。 1L, 2L,
1L, 1L。 1L, 1L。 1L, 2L。 1L, 2L。 2L, 2L。 1L, 1L。 2L, 1L。 2L, 1L,
2L, 1L。 1L, 2L。 1L, 1L。 2L, 2L。 2L, 1L。 1L, 1L。 1L, 1L。 1L), 。 標簽 = c("M", 。
"F")。 class = "factor"))。 行。 names = c(NA。 -288L)。 class = c("tbl_df"。
"tbl", "data.frame"))
uj5u.com熱心網友回復:
好的,所以這是個有點大的問題! 以下是我所做的:
library(tidyverse)
library(data.table)
library(splitstackshape)
x <- x %> % mutate(id = row_number(),
sex_cats = paste("N",/span> sex_cat, sep = "_"))
x_dt <- data.table(x)
x_cts <- x %> % group_by(age_cat, sex_cat) %> % summarise(n = n()) %> %ungroup(sex_cat)
x_raw <- data. frame(age_cat = rep(unique(x_cts$age_cat)。 每個= 2),
sex_cat = rep(unique(x_cts$sex_cat)。 次 = length(unique(x_cts$age_cat)))。
百分比 = c(0。 5, 0.5, 0. 8, 0.2, 0. 34, 0.66, 0. 5, 0.5, 0. 75, 0.25, 0. 5, 0.5, 0. 6, 0.4)。
x_raw_wd <- x_raw %> % pivot_wider(names_from = sex_cat, values_from = percents, names_prefix = "per_")
x_raw_wd <- x_raw_wd %> % mutate(N_M = round(per_M * total_n)。
N_F = round(per_F =) operator">* total_n))
x_raw_wd$total_n < - c(6。 30, 30。 30,/span> 20。 10, 20)
x_raw_wd_fin <- x_raw_wd %>%
select(age_cat,N_M,N_F) %>%
pivot_longer(cols = starts_with("N_")。 names_to = "sex_cats") %> %
arrange(age_cat,sex_cats)
x_raw_wd_dt <- data.table(x_raw_wd_fin)
stratified(x_dt[, KEY 。 =粘貼(age_cat, sex_cats)], "KEY", keep. rownames = T,
with(x_raw_wd_dt, setNames(value, paste(age_cat, sex_cats))))
在使用data.table方面,有人比我更擅長,但我在這里所做的,是首先創建一個id列和sex_cats。sex_cats將在后面使用,但現在在這里保留這個。x_cts的創建是為了檢查并確保你所發送的資料被正確地復制和粘貼。
然后我創建了x_raw,這是一個模擬版本的請求;在這里,我們包括每個age_cat和sex_cat的percents,在每個age_cat中的每個sex_cat。這些加起來必須是100%。
然后我pivot_wider以獲得每個sex_cat的percents的寬格式。然后我模擬出你想要的每個age_cat的樣本數量:這是手動插入的,所以如果你需要改變每個age_cat的數量,請隨意。從這里我們為每個sex_cat計算出x_raw_wd中的樣本總數。
然后我們得到這個長格式,因為對來自splitstackshape的函式stratified有要求。如果你看一下names_to選項,這被轉移到N_M或N_F,這與sex_cat(sex_cat = 'M', 'F')不同。這就是為什么一開始我們創建了sex_cats。
最后,我們將所有的東西提交到stratified。我們創建一個KEY列,將我們的x_raw_wd_fin$value,即age_cat和sex_cat所需的樣本總數,與x中每個觀察的age_cat和sex_cat的組合相連接。
根據我的百分比,主要是為演示目的而編造的,我需要146個樣本。
這是我的輸出:
我的輸出是:
age_cat sex_cat id paste("N", sex_cat) KEY sex_cats
1。 15-19 F 281 N F 15-19 N_F N_F
2: 15-19 F 155 N F 15-19 N_F N_F
3: 15-19 F 177 N F 15-19 N_F N_F
4: 15-19 M 108 N M 15-19 N_M N_M
5: 15-19 M 284 N M 15-19 N_M N_M
---
142。 45-49 M 105 N M 45-49 N_M N_M
143: 45-49 M 37 N M 45-49 N_M N_M
144: 45-49 M 207 N M 45-49 N_M N_M
145: 45-49 M 173 N M 45-49 N_M N_M
146: 45-49 M 103 N M 45-49 N_M N_M
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/332730.html
標籤:

