You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:15:39