R语言中用均值替换、回归插补及多重插补进行插补

  • 用均值替换、回归插补及多重插补进行插补
# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("E:\\R_workspace\\R语言数据分析与挖掘实战\\chp4")
# 读取销售数据文件,提取标题行
inputfile <- read.csv('./data/catering_sale.csv', header = TRUE) 
View(inputfile)

# 变换变量名
inputfile <- data.frame(sales = inputfile$'销量', date = inputfile$'日期')
View(inputfile)

# 数据截取
inputfile <- inputfile[5:16, ]
View(inputfile)

# 缺失数据的识别
is.na(inputfile)  # 判断是否存在缺失
n <- sum(is.na(inputfile))  # 输出缺失值个数
n

# 异常值识别
par(mfrow = c(1, 2))  # 将绘图窗口划为1行两列,同时显示两图
dotchart(inputfile$sales)  # 绘制单变量散点图
boxplot(inputfile$sales, horizontal = TRUE)  # 绘制水平箱形图

# 异常数据处理
inputfile$sales[5] = NA  # 将异常值处理成缺失值
fix(inputfile)  # 表格形式呈现数据

# 缺失值的处理
inputfile$date <- as.numeric(inputfile$date)  # 将日期转换成数值型变量
sub <- which(is.na(inputfile$sales))  # 识别缺失值所在行数
sub
# 将数据集分成完整数据和缺失数据两部分
inputfile1 <- inputfile[-sub, ]  
inputfile2 <- inputfile[sub, ]

# 行删除法处理缺失,结果转存
result1 <- inputfile1
View(result1)

# 均值替换法处理缺失,结果转存
avg_sales <- mean(inputfile1$sales)  # 求变量未缺失部分的均值
avg_sales
# 用均值替换缺失
inputfile2$sales <- rep(avg_sales,n) 
# 并入完成插补的数据
result2 <- rbind(inputfile1, inputfile2)  
View(result2)


# 回归插补法处理缺失,结果转存
# 回归模型拟合
# 注意:因变量~自变量
model <- lm(sales ~ date, data = inputfile1)  
# 模型预测
inputfile2$sales <- predict(model, inputfile2) 
result3 <- rbind(inputfile1, inputfile2)

# 多重插补法处理缺失,结果转存
library(lattice)  # 调入函数包
library(MASS)
library(nnet)
library(mice)  # 前三个包是mice的基础
# 4重插补,即生成4个无缺失数据集
imp <- mice(inputfile, m = 4) 
# 选择插补模型
# inputfile为原始数据,有缺失
fit <- with(imp,lm(sales ~ date, data = inputfile))  
# m重复完整数据分析结果池
pooled <- pool(fit)
summary(pooled)
result4 <- complete(imp, action = 3)  # 选择第三个插补数据集作为结果

猜你喜欢

转载自blog.csdn.net/mr_muli/article/details/80452496
今日推荐