[R] plotting missing data patterns

Patrick E. McKnight pem at theriver.com
Sun Jan 6 21:54:19 CET 2002


Uwe,

Thanks for the suggestion.  I followed Andy Liaw's advice and used image
instead of plot.  I can't believe there are so many things available in
R and most of which I simply overlook!  Thanks again for your helpful
suggestions.

Cheers,

Patrick


On Sun, 2002-01-06 at 04:21, Uwe Ligges wrote:
> "Patrick E. McKnight" wrote:
> > 
> > I have one other problem and then I'll stop and get back to writing.  I
> > want to plot a missing data matrix (the R matrix a la Little and Rubin)
> > to graphically depict where the missing data lie in the matrix.  Some
> > statistical packages produce a graphical depiction of the missing data
> > patterns by plotting the matrix, color-coding the plot with contrasting
> > colors for either missing or present.
> > 
> > So far, I have fumbled my way through parts of it but I can't figure out
> > what I am doing wrong.  Here is my situation....
> > 
> > Dataset...now sorted the way I want it (thanks)
> > 
> >  > newcouple
> >     id age sex iv1 iv2 dv mdpf
> > 2   0   0   0   0   0  0    1
> > 3   0   0   0   0   0  0    1
> > 5   0   0   0   0   0  0    1
> > 7   0   0   0   0   0  0    1
> > 9   0   1   0   0   0  0    3
> > 6   0   0   1   0   0  0    5
> > 10  0   0   0   1   0  0    9
> > 1   0   0   0   0   1  0   17
> > 4   0   0   0   0   0  1   33
> > 8   0   0   0   0   0  1   33
> > 
> > # begin code
> > 
> > # create matrix from data.frame for easy indexing
> > 
> >  > dummy <- as.matrix(newcouple)
> > 
> > # create new vectors to later plot
> > 
> > x <- mat.or.vec(1,1)
> > y <- mat.or.vec(1,1)
> > 
> > # define default plotting information with par
> > 
> > par(bg="black",pch=22)
> > 
> > # create new frame for plotting
> > 
> > plot.new()
> > 
> > # loop through the matrix to only plot a square for the observations and
> > # variables that are missing
> > 
> >      for (i in 1:nrow(dummy)){
> >        for (j in 1:ncol(dummy)){
> >          if (dummy[i,j] == 1){
> > 
> > # record the coordinates for the missing values to plot with a points
> > # call later
> > 
> >             y <- append(y,i)
> >             x <- append(x,j)
> >           }
> >        }
> >      }
> > 
> > # points to plot from my
> > 
> >      points(x,y,bg="white")
> > 
> > # end code
> > 
> > The graphical output is just a black window with one point plotted (0,0
> > I think).  What am I doing wrong?  
> 
> You did not set the dimensions in plot.window() after calling
> plot.new().
> 
> I would suggest to use image() instead of your code:
> 
>  dummy <- as.matrix(newcouple)
>  image(x = 1:nrow(dummy), y = 1:ncol(dummy), z = dummy,
>      breaks = c(min(dummy), 0, 1, max(dummy)), col = c(1, 0, 1))
> 
> 
> *Your* code can be simplified (loops) and corrected as follows (the
> "reversed" colours are the most complicated thing):
> 
>  dummy <- as.matrix(newcouple)
>  x <- col(dummy)[dummy==1]
>  y <- row(dummy)[dummy==1]
>  par(bg="black", fg="white", col.axis="white", col.lab="white", 
>      col.sub="white", col.main="white", pch=22)
>  plot(x, y, type="n")
>  points(x,y)
> 
> 
> 
> > The points function does not appear
> > to be adding the extra points the way I want it to add them to the same
> > display window.
> > 
> > In the end, I would like to have either a black background with white
> > squares (holes) or a white background with black squares to represent
> > where the data are missing.  I will adjust the squares to an appropriate
> > size later.  I know that there are other procedures for graphically
> > depicting missing data but I (and my colleagues) want this graph for now.
> 
> 
> Uwe Ligges


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list