[R] Error when adding lines to a plot using the mixed-effect model and metafor package
Viechtbauer Wolfgang (STAT)
wolfgang.viechtbauer at maastrichtuniversity.nl
Wed Mar 20 10:02:21 CET 2013
See comments below.
Best,
Wolfgang
--
Wolfgang Viechtbauer, Ph.D., Statistician
Department of Psychiatry and Psychology
School for Mental Health and Neuroscience
Faculty of Health, Medicine, and Life Sciences
Maastricht University, P.O. Box 616 (VIJV1)
6200 MD Maastricht, The Netherlands
+31 (43) 388-4170 | http://www.wvbauer.com
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Hewitt, Charlotte
> Sent: Tuesday, March 19, 2013 19:17
> To: r-help at R-project.org
> Subject: [R] Error when adding lines to a plot using the mixed-effect
> model and metafor package
>
> Hi,
>
> I am a student using R for my final year project, with the metafor package
> being particularly helpful. I have been following the steps laid out in
> the manual 'Conducting Meta-analysis in R with the Metafor package'
> (Viechtbauer, 2010) and applying it to my own data of infected Anopheles
> mosquitoes across Africa.
>
> In particular, I am attempting to apply a mixed-effect model to my data
> with absolute latitude as a moderator as per the example in the manual. I
> am able to generate a plot of Relative Risk against absolute latitude
> without issue, but when I try to add lines in from the predicted values
> generated I continually get an error:
>
> Error in xy.coords(x, y) : 'x' and 'y' lengths differ
>
> However, I have used the length function on both my x and y co-ordinates
> and found no difference in lengths. If anyone could shed some light on
> this I'd really appreciate it. The code I used can be found below:
>
> > mixed<-read.delim("regressiontest.txt")
> > mixed
> study year ablat mosq1pos mosq1neg mosq2pos mosq2neg
> 1 Cano et al. 2006 2 42 237 148 629
> 2 Kerah - Hinzoumbe et al. 2009 10 103 7260 3 215
> 3 Konate et al. 1994 13 83 5714 48 3609
> 4 Mwanzia et al. 2011 4 2 8971 0 100
So there are 4 studies in your dataset.
> > dat<-escalc(measure="RR", ai = mosq1pos, bi = mosq1neg, ci = mosq2pos,
> di = mosq2neg, data = mixed, append = TRUE)
> > res<-rma(yi, vi, mods = ablat, data=dat)
> > predict(res,transf = exp, addx = TRUE)
> > preds<-predict(res, transf = exp)
This will save the predicted values *for those 4 studies* in "preds".
> > wi<-1/sqrt(dat$vi)
> > size<-0.5 + 3 *(wi-min(wi))/(max(wi)) - min(wi)
> > plot(dat$ablat, exp(dat$yi), pch = 19, cex = size, xlab = "Absolute
> Latitude", ylab = "Relative Risk", las=1, bty = "l", log = "y")
> > lines(0:15, preds$pred)
So you are trying to plot a line based on 16 x-values (0:15) and the 4 y-values in preds. That can't work. If you want to obtain the predicted values for ablat values equal to 0:15, then you need to do:
preds <- predict(res, newmods=0:15, transf=exp)
And then the code should work.
> Many thanks,
> Charlotte Hewitt
More information about the R-help
mailing list