跳转至

缺失值的处理

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%表示套叠 - ^表示对交叉进行限制

lm()是拟合线性模型,可用于回归分析,单因素方差分析,协方差分析

回到页面顶部