缺失值,如何处理?

问题描述

下午好, 我一直在寻找解决这些问题的方法。我正在努力解决通过三个不同数据集研究它的缺失数据。我会尽量解释清楚。按照与我正在处理的数据集相关的视图进行报告。他们每个人都包括 654 个主题,并显示出不同的缺失模式。

数据集 1

> data1
# A tibble: 654 x 5
     age   fev    ht   sex smoke
   <dbl> <dbl> <dbl> <dbl> <dbl>
 1     9  1.71   145     0     0
 2     8  1.72   171     0     0
 3     7  1.72   138     0     0
 4     8  2.34   155     0     0
 5     6  1.92   147     0     0
 6     6  1.42    NA     0     0
 7     8  1.99   149     0     0
 8     9  1.94   152     0     0
 9     6  1.60   135     0     0
10     8  2.19   149     0     0
# ... with 644 more rows

数据集 2

> data2 
# A tibble: 654 x 5
     age   fev    ht   sex smoke
   <dbl> <dbl> <dbl> <dbl> <dbl>
 1     9  1.71   145     0     0
 2     8  1.72   171     0     0
 3     7  1.72   138     0     0
 4     9  1.56   135     1     0
 5     9  1.90   145     1     0
 6     8  2.34   155     0     0
 7     6  1.92   147     0     0
 8     6  1.42   142     0     0
 9     8  1.99   149     0     0
10     9  1.94   152     0     0
# ... with 644 more rows

数据集 3

> data3
# A tibble: 654 x 5
     age   fev    ht   sex smoke
   <dbl> <dbl> <dbl> <dbl> <dbl>
 1     9  1.71   145     0     0
 2     8 NA      171     0     0
 3     7  1.72   138     0     0
 4     9  1.56   135     1     0
 5     9  1.90   145     1     0
 6     8  2.34   155     0     0
 7     6  1.92   147     0     0
 8     6  1.42   142     0     0
 9     8  1.99   149     0     0
10     9  1.94   152     0     0
# ... with 644 more rows

我被要求确定“fev”变量的 MCAR、MAR 和 MNAR 之间的缺失机制。下面我让你打印每个数据集的缺失模式。

> data1 %>% 
 +   missing_pattern(dependent,explanatory)
        age sex smoke ht fev   
    588   1   1     1  1   1  0
    36    1   1     1  1   0  1
    30    1   1     1  0   1  1
          0   0     0 30  36 66

> data2 %>% 
+   missing_pattern(dependent,explanatory)
    age sex smoke ht fev    
524   1   1     1  1   1   0
95    1   1     1  1   0   1
30    1   1     1  0   1   1
5     1   1     1  0   0   2
      0   0     0 35 100 135

> data3 %>% 
+   missing_pattern(dependent,explanatory)
    age sex smoke ht fev    
557   1   1     1  1   1   0
62    1   1     1  1   0   1
32    1   1     1  0   1   1
3     1   1     1  0   0   2
      0   0     0 35  65 100

鉴于这三种模式,您能否在 MCAR、MAR 和 NMAR 机制之间建立缺失类别?你能推荐任何已知的方法来对它们进行分类吗?我指定我已将“fev”变量视为因变量,将其他变量视为解释变量。

此外,我想表示两个具体的图表。

  1. 这个和下面那个差不多:

    enter image description here

这是我使用鼠标库中可用的“空气质量数据集”获得的。为了创建它,我已经开始从我以前使用的代码中汲取洞察力,尽管如此,尽管代码返回了图形,但我仍然不断收到错误消息。 这就是使用数据集2为例的情况。你能弄清楚exaclty在做什么吗?这个错误是什么原因造成的?我检查了 'fev' 变量,它是一个数字变量。

> imp <- mice(data2,method = "mean",m = 1,maxit = 1) 

 iter imp variable
  1   1  fev  ht
> head(complete(imp))
  age   fev  ht sex smoke
1   9 1.708 145   0     0
2   8 1.724 171   0     0
3   7 1.720 138   0     0
4   9 1.558 135   1     0
5   9 1.895 145   1     0
6   8 2.336 155   0     0
> head(data2)
# A tibble: 6 x 5
    age   fev    ht   sex smoke
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     9  1.71   145     0     0
2     8  1.72   171     0     0
3     7  1.72   138     0     0
4     9  1.56   135     1     0
5     9  1.90   145     1     0
6     8  2.34   155     0     0
> 

> library(lattice)
> par(mfrow=c(1,2))
> breaks <- seq(-20,200,10)
> nudge <- 1
> lwd <- 1.5
> x <- matrix(c(breaks-nudge,breaks+nudge),ncol=2)
> obs <- data2[,"fev"]
> mis  <- imp$imp$fev[,1]
> fobs <- c(hist(obs,breaks,plot=FALSE)$count,0)

Error in hist.default(obs,plot = FALSE) : 
  'x' must be numeric

> fmis <- c(hist(mis,0)
> y <- matrix(c(fobs,fmis),ncol=2)
> matplot(x,y,type="s",+         col=c(mdc(4),mdc(5)),lwd=2,lty=1,+         xlim = c(0,170),ylim = c(0,40),yaxs = "i",+         xlab="fev",+         ylab="Frequency")
> box() 

第二个图应根据同一数据集上的“预测均值匹配”方法实现。特别是,我被要求估算“fev”的缺失值,考虑到 MAR 数据集中的所有变量以及 Y="fev" 与 X1="age" by X2="抽烟”。你有什么代码可以把它退回来吗?我让attached 总是在来自MASS 库的whiteside 数据集上运行,以便获得一些见解。

mice.impute.normdump <- function (y,ry,x,...)
{
  x <- cbind(1,as.matrix(x))
  parm <- .norm.draw(y,...)
  betadump <<- c(betadump,parm$beta)
  return(x[!ry,] %*% parm$beta + rnorm(sum(!ry)) * parm$sigma)
}
mice.impute.pmmdump <- function (y,...)
  yhatobs <- x[ry,] %*% parm$coef
  yhatmis <- x[!ry,] %*% parm$beta
  betadump <<- c(betadump,parm$beta)
  return(apply(as.array(yhatmis),1,.pmm.match,yhat = yhatobs,y = y[ry],...))
}

plot(x=whiteside$Temp,y=whiteside$Gas,col=mdc(1),lwd=lwd,pch=19,xlab=expression(paste("Temperature (",degree,"C)")),ylab="Gas consumption (cubic feet)")
imp <- mice(whiteside,m=1,maxit=0)
pred <- imp$pred
pred["Gas","Insul"] <- 0
betadump <- vector("list",0)
imp <- mice(whiteside,m=5,pred=pred,meth="normdump",maxit=1,print=FALSE,seed=83126)
abline(m1<-lm(Gas~Temp,data=whiteside,na.action=na.omit),col=mdc(4))
betadump <- matrix(betadump,nc=2,byrow=TRUE)
for (i in 1:5) abline(coef=unlist(betadump[i,]),col=mdc(5))
points(rep(5,5),imp$imp$Gas,col=mdc(2),pch=19)


tp <- xyplot(imp,Ozone~Solar.R,na.groups=ici(imp),ylab="Ozone (ppb)",xlab="Solar Radiation (lang)",cex = 0.75,lex=lwd,ylim = c(-20,180),xlim = c(0,350))
print(tp,newpage = FALSE,position = c(0.48,0.08,0.92))

如何编写此代码以针对这些查询? 谢谢你帮我

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...