R语言rake加权计算遇缺失值问题求助(仅plec列存在缺失)
解决rake加权中plec列缺失值问题
核心问题
rake函数要求用于加权的变量不能存在缺失值,你的plec列有NA,导致触发缺失值报错;同时原代码中函数参数传递用了<-而非=,属于语法错误,也会影响运行。
解决方案1:删除含缺失值的观测
直接过滤掉plec列有NA的行,确保所有用于加权的变量完整:
library(readxl) library(survey) # 加载rake所属的survey包 DATASET <- read_excel("C:/Users/Mateusz/Desktop/25.10/Nowy Arkusz programu Microsoft Excel.xlsx") DATA <- as.data.frame(DATASET) # 过滤plec列无缺失的行 DATA_clean <- DATA[!is.na(DATA$plec), ] data.svy.unweighted <- svydesign(ids=~1, data=DATA_clean) plec.dist <- data.frame(plec=c("k","m"), Freq=nrow(DATA_clean)*c(.49,.51)) miasto.dist <- data.frame(miasto=c(1,2,3), Freq=nrow(DATA_clean)*c(.64,.12,.24)) wiek.dist <- data.frame(wiek=c(1,2), Freq=nrow(DATA_clean)*c(.7,.3)) # 修正参数传递语法,用=而非<- data.svy.rake <- rake( design = data.svy.unweighted, sample.margins = list(~plec,~miasto,~wiek), population.margins = list(plec.dist, miasto.dist, wiek.dist) )
解决方案2:插补缺失值
若不想删除观测,可对plec列的NA进行插补,比如用该列的众数:
library(readxl) library(survey) DATASET <- read_excel("C:/Users/Mateusz/Desktop/25.10/Nowy Arkusz programu Microsoft Excel.xlsx") DATA <- as.data.frame(DATASET) # 计算plec列的众数并插补缺失值 plec_mode <- names(which.max(table(DATA$plec, useNA = "no"))) DATA$plec[is.na(DATA$plec)] <- plec_mode data.svy.unweighted <- svydesign(ids=~1, data=DATA) plec.dist <- data.frame(plec=c("k","m"), Freq=nrow(DATA)*c(.49,.51)) miasto.dist <- data.frame(miasto=c(1,2,3), Freq=nrow(DATA)*c(.64,.12,.24)) wiek.dist <- data.frame(wiek=c(1,2), Freq=nrow(DATA)*c(.7,.3)) data.svy.rake <- rake( design = data.svy.unweighted, sample.margins = list(~plec,~miasto,~wiek), population.margins = list(plec.dist, miasto.dist, wiek.dist) )
内容的提问来源于stack exchange,提问作者Mateusz Pietruszyński
相关产品推荐
相关产品推荐

