Multilevel metaregression in R, "redundant predictors dropped" (metafor) First time doing a meta-analysis, and I'd prefer not to botch this.
Out of a set of studies, I have six studies that each have used a pair of measures (on the same participants) that are commonly averaged to one value. However, there are theoretical reasons that it might be better to use these measures separately. I am testing this by comparing whether the effect sizes from measure 1 are different from the effect sizes from measure 2. 
So I have 12 correlations from 6 studies, which introduces dependency between correlations from the same study.
Using the metafor package, I use rma.mv and the random argument to account for the dependency:
pd <- escalc(measure="COR", ri=r_Pur, ni=n, data=d)
rp <- rma.mv(yi, vi, data=pd, mods= ~ compare, random= ~ compare | source)

where the source denotes the study, with six levels, and the compare denotes the measure, with two levels.
The results I get are:
Multivariate Meta-Analysis Model (k = 12; method: REML)

Variance Components: 

outer factor: source  (nlvls = 6)
inner factor: compare (nlvls = 2)

            estim    sqrt  fixed
tau^2      0.0040  0.0634     no
rho        1.0000             no

Test for Residual Heterogeneity: 
QE(df = 10) = 22.9376, p-val = 0.0110

Test of Moderators (coefficient(s) 2): 
QM(df = 1) = 69.7315, p-val < .0001

Model Results:

               estimate      se     zval    pval    ci.lb    ci.ub     
intrcpt          0.4341  0.0331  13.0975  <.0001   0.3691   0.4990  ***
compareConsEc   -0.2374  0.0284  -8.3505  <.0001  -0.2931  -0.1817  ***

---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 


Warning messages:
1: In rma.mv(yi, vi, data = pd, mods = ~compare, random = ~compare |  :
  Redundant predictors dropped from the model.

I'm interpreting that there is a difference between the two measures, as the model results row for compareConsEc is much smaller than the intercept (it read somewhere that the use of Q statistic is not recommended). However, the warning indicates that a predictor has been dropped, and since the compare is there but the estimate for the study-level is not, I assume the study-level was dropped. Yet, when I run the same analysis in rma without the random argument, the results are not (exactly) the same, which suggests that it is not simply dropping the random argument but doing something else differently as well.
My questions are:


*

*Is the analysis and syntax correct in principle?

*Reading this, I interpret that I have too few datapoints to estimate a two-level model. Does that mean that it is simply not possible to take the study-level dependency into account in the analysis? 

*If so, does that mean I should run a rma without the random argument instead, acknowledging in the report that this dependency might confuse the results? (and if so, to which direction?) Or is there a better option, such as an alternative analysis?

*Why are the results from rma and rma.mv different?

*Is the tau^2 useful in that table, with a predictor being dropped and the dependency being unaccounted for? Why is the rho 1?

*I used REML method, as a default. What would be a good source to the respective pros and cons of different methods?

 A: The warning has nothing to do with anything in random -- it relates to the fixed effects of the model (what you specify under mods).
What has happened here is that you have read in the data (probably from some external source) and in doing so your compare variable turned into a factor (for example, for read.table(), the default is to turn string variables into factors -- see help(read.table) and especially the as.is and stringsAsFactors arguments). Then you must have manipulated the dataset in some way so that some levels of that factor no longer occur in the dataset (maybe you deleted some rows). However, the compare factor still has those levels (try: levels(pd$compare) and you will see what I mean). When you then use that factor in the model, a dummy variable for that non-existent level is created, but since there are no rows for that level, that dummy variable consists of only 0's -- and that variable then gets dropped from the model matrix.
Here is a simpler example to illustrate this:
library(metafor)

dat <- data.frame(yi = c(-0.89, -1.59, -1.35, -1.44, -0.22, -0.79, -1.62, 0.01, -0.47, -1.37, -0.34, 0.45, -0.02),
                  vi = c(0.326, 0.195, 0.415, 0.02, 0.051, 0.007, 0.223, 0.004, 0.056, 0.073, 0.012, 0.533, 0.071),
                  alloc = c("random", "random", "random", "random", "alternate", "alternate", "random", "random", "random", "systematic", "systematic", "systematic", "systematic"))

rma(yi, vi, mods = ~ alloc, data=dat)

### delete rows where 'alloc' is equal to 'alternate'
dat <- dat[-c(5,6),]

### but 'alloc' still has 'alternate' level
levels(dat$alloc)

rma(yi, vi, mods = ~ alloc, data=dat)

You can basically ignore that warning. Or if it bothers you, just turn alloc again into a factor, which automatically drops the unused levels:
dat$alloc <- factor(dat$alloc)
rma(yi, vi, mods = ~ alloc, data=dat)

