问题描述
下午好, 我一直在寻找解决这些问题的方法。我正在努力解决通过三个不同数据集研究它的缺失数据。我会尽量解释清楚。按照与我正在处理的数据集相关的视图进行报告。他们每个人都包括 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”变量视为因变量,将其他变量视为解释变量。
此外,我想表示两个具体的图表。
- 这个和下面那个差不多:
这是我使用鼠标库中可用的“空气质量数据集”获得的。为了创建它,我已经开始从我以前使用的代码中汲取洞察力,尽管如此,尽管代码返回了图形,但我仍然不断收到错误消息。 这就是使用数据集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 (将#修改为@)