缺失值的处理
1.使用中位数或者均值(非数值时使用众数)来填补缺失值
x <- c(1,2,7,8,NA,10,22,NA,15,NA,9)
y <-c('a',NA,'b',NA,'b','a','a','b','a','c','d')
df <- data.frame(x, y)
df
x_mean <- mean(x,na.rm = TRUE)
x_mean #x的平均值
x_median <- median(x, na.rm = TRUE)
x_median #x的中位数
y_mode <- as.character(y[which.max(table(y))])
y_mode #y的众数
df2 <- replace_na(data = df, replace = list(x = x_mean, y = y_mode))
df2 #使用x的均值,y的众数,来填充缺失值。
2.使用随机数
3.使用mice
包多重填补法补充数据
1)mice()函数从一个含缺失值的数据框开始,返回一个包含多个完整数据集对象(默认可以模拟参数5个完整的数据集);
2)with()函数可依次对每个完整数据集应用统计建模;
3)pool()函数将with()生成的单独结果整合到一起。
随机数的生成方法
set.seed(12138)
x1 <- runif(n = 1000, min = 1, max = 15)
#runif生成均匀分布随机数,n指定数量,min最小值,max最大值
x2 <- rnorm(n = 1000,mean = 10,sd=5) + 10
#rnorm生成正态随机数 ,n数量,mean正态分布的均值,sd正态分布的标准差
x3 <- rt(n = 1000, df = 3)
#T测验随机数
x4 <- rf(n = 1000, df1 = 2, df2 = 3)
#F测验随机数
x5 <- rpois(n= 1000,lambda=5)
#泊松分布的随机数
x6 <- rbinom(n=1000,size=100,prob=0.75)
#二项分布随机数 rbinom是生成二项分布,即正面/反面这样,n是生成的数量,size是实验次数,prob是指定概率。
模拟1000次抛硬币,coin <- rbinom(n=1000,size=1,prob=0.5)
y <- 2*x1 - 0.3*x2 + 0.6*x3 - 1.2*x4 + rexp(1000,rate=1)
#rexp(1000,rate=1)生成指数分布的随机数1000个
将NA赋值给指定列的随机生成的行的值
miss.df是一个数据框
miss.df[sample(1:nrow(miss.df), 40),1] <- NA
sample(1:nrow(miss.df), 40)是生成随机的1到行数(1000)之间的随机的40个数
后面的1是指定第一列
library(mice)
im <- mice(data = miss.df, m = 10,maxit = 6, method = 'pmm') #m是多重插补的次数,maxit是设置获取完整数据集的个数,method是预测方法,pmm使用平均值预测
fit <- with(data = im, expr = lm(y ~ x1 + x2 + x3 + x4+x5+x6))
pooled <- pool(object = fit)
summary(pooled)
lm.fit <- lm(y ~ x1 + x2 + x3 + x4+x5+x6, data = miss.df)
summary(lm.fit)
关于拟合关系,参考https://zhuanlan.zhihu.com/p/51533928
y~x1 + x2 + x3 + x4+x5+x6
是一个拟合关系,y是因变量,x1,x2,x3,x4,x5,x6是自变量,~
代表存在函数关系。此处的x1,x2,x3,x4,x5,x6之间不是传统意义的加法运算,而是表示每一个都是一个自变量。
~
之后的符号的含义:
- +
表示添加新的变量
- -
表示移除一个变量
- :
表示相互作用
- *
表示交叉
- %in%
表示套叠
- ^
表示对交叉进行限制