Supplementary Information for
Effects of livestock farming on birds of rural areas in Europe
Federica Musitelli1, Andrea Romano2, Anders Pape Møller3, Roberto Ambrosini1
Biodiversity and Conservation
Addresses
1 Dipartimento di Scienze dell’Ambiente e del Territorio e di Scienze della Terra, Università degli Studi di Milano-Bicocca, piazza della Scienza 1, 20126 Milano, Italy
2 Dipartimento di Bioscienze, Università degli Studi di Milano, via Celoria 26, 20133 Milano, Italy
3 Laboratoire d'Ecologie, Systématique et Evolution, CNRS UMR 8079, Université Paris-Sud, Bâtiment 362, F-91405 Orsay Cedex, France
Corresponding author, contact details
Federica Musitelli, Dipartimento di Scienze dell’Ambiente e del Territorio e di Scienze della Terra, Università degli Studi di Milano-Bicocca, piazza della Scienza 1, 20126 Milano, Italy. Tel 02 64483464, email.
Legend to Table S1 (Excel file provided separately). Effect sizes from 26 publications dealing with the influence of livestock farming on birds of rural areas. Details for each variable are provided in the Legend sheet.
Table S2. Indirect publication bias analyses. Results of three indirect publication bias analyses are reported, for each subset of studies for which a mean effect size significantly larger than zero was observed, i.e. all tests on the barn swallow except for that on reproduction (Table 1 in the main text). The table reports the number of effect sizes in each analysis, the Kendal τ correlation between effect sizes and sample sizes and the relative P-value, the fail safe number and three outcomes of the trim-and-fill test, specifically the estimated number of missing studies, the estimate of the mean effect size obtained after augmenting the observed data with the (estimated) missing studies, and its 95% confidence interval. Each test was run first by including all effect sizes, thus assuming complete independence of analyses reported into the same paper and, second, by including only the mean effect size within paper, thus assuming full dependence of effect sizes reported in each paper (see Methods for details). In the case of Kendall’s τ, we reported the results of analyses run by correlating the within-study effect size with the mean within-study sample size.
Number Trim and fill
of effect Kendall’s Fail-safe
Subset sizes τ P number Missing Estimate 95% CI
All effect sizes
All 47 -0.116 0.262 6622*+ 0 0.272 (0.173 – 0.371)
Direct effects 33 -0.155 0.218 4456*+ 0 0.317 (0.183 – 0.452)
Indirect effects 14 -0.022 0.912 201*+ 0 0.162 (0.098 – 0.226)
Distribution 39 -0.098 0.394 6264*+ 0 0.296 (0.189 – 0.404)
Mean within-paper effect size
All 16 -0.267 0.165 663*+ 4 0.213 (0.065 – 0.362)
Direct effects 14 -0.231 0.279 494*+ 3 0.262 (0.082 – 0.442)
Indirect effects 9 0.222 0.477 61* 0 0.124 (0.078 – 0.170)
Distribution 14 -0.341# 0.101 644*+ 4 0.235 (0.087 – 0.382)
*: values above the threshold 5n + 10 (where n is the original number of studies) proposed by Rosenthal (1979) as a reasonable, conservative critical value against which to test a fail-safe calculation.
+: values that differ significantly from the 5n + 10 threshold according to Fragkos et al. (2014).
#: when sample size was estimated as the minimum sample size within papers, Kendall’s τ was equal to -0.516, P = 0.010.
References
Fragkos KC, Tsagris M, Frangos C (2014) Publication bias in meta-analysis: confidence intervals for Rosenthal’s fail-safe number. Int Sch Res Notices 2014:825383. doi: 10.1155/2014/825383
Rosenthal R (1979) The “file drawer problem” and tolerance for null results. Psychol Bull 86:638–641
1
Code for all the analyses run with SAS 9.3
We here provide commented code for all the analyses run with SAS 9.3 including steps for proper data selection from Table S1.
/* SAS code for analyses reported in Musitelli et al.
Effects of livestock farming on birds of rural areas in Europe*/
/* data import
put your path to file Table S1.xlsx provided as Supplementary Information*/
proc import datafile = "C:\...your path to file ...\Table S1.xlsx"
out = meta replace dbms = xlsx;
run;
*analyses on barn swallow;
data meta_swallow;
set meta;
if barn_swallow EQ 1;
run;
proc mixed data = meta_swallow cl covtest method=REML;
title 'barn swallow all';
class ID ID_paper;
model zr = / solution ddfm=satterthwaite cl;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
weight N3;
parms 1 1 1 / hold=3;
run;
data meta_swallow_dir;
set meta;
if barn_swallow EQ 1 AND type_effect EQ 1;
run;
proc mixed data = meta_swallow_dir cl covtest method=REML;
title 'barn swallow direct effects';
class ID ID_paper;
model zr = / solution ddfm=satterthwaite cl;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
weight N3;
parms 1 1 1 / hold=3;
run;
data meta_swallow_ind;
set meta;
if barn_swallow EQ 1 AND type_effect EQ 0;
run;
proc mixed data = meta_swallow_ind cl covtest method=REML;
title 'barn swallow indirect effects';
class ID ID_paper;
model zr = / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
weight N3;
parms 1 1 1 / hold=3;
run;
proc mixed data = meta_swallow cl covtest method=REML;
title 'barn swallow comparison direct indirect';
class type_effect ID ID_paper;
model zr = type_effect / solution ddfm=satterthwaite cl;
random intercept /sub= ID (ID_paper) group = type_effect;
random intercept /sub= ID_paper group = type_effect;
weight N3;
lsmeans type_effect / pdiff adjdfe=row cl;
parms 1 1 1 1 1 / hold=5;
run;
data meta_swallow_dist;
set meta;
if barn_swallow EQ 1 AND type_study EQ 'distribution';
run;
proc mixed data = meta_swallow_dist cl covtest method=REML;
title 'barn swallow distribution';
class ID ID_paper;
model zr = / solution ddfm=satterthwaite cl;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
weight N3;
parms 1 1 1 / hold=3;
run;
data meta_swallow_repr;
set meta;
if barn_swallow EQ 1 AND type_study EQ 'reproduction';
run;
proc mixed data = meta_swallow_repr cl covtest method=REML;
title 'barn swallow reproduction';
class ID ID_paper;
model zr = / solution ddfm=satterthwaite cl;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
weight N3;
parms 1 1 1 / hold=3;
run;
proc mixed data = meta_swallow cl covtest method=REML;
title 'barn swallow comparison distribution reproduction';
class type_study ID ID_paper;
model zr = type_study / solution ddfm=satterthwaite cl;
random intercept / sub = ID(ID_paper) group = type_study;
random intercept / sub = ID_paper group = type_study;
weight N3;
lsmeans type_study / pdiff adjdfe=row cl;
parms 1 1 1 1 1 / hold=5;
run;
*analyses on other species;
data meta_other;
set meta;
if barn_swallow EQ 0;
run;
proc mixed data = meta_other cl covtest method=REML;
title 'other all';
class ID ID_paper species;
model zr = / solution ddfm=satterthwaite cl ;
random intercept / sub = ID(ID_paper) ;
random intercept / sub = ID_paper ;
random intercept /sub= species;
weight N3;
parms 1 1 1 1 / hold=4;
run;
data meta_other_dir;
set meta;
if barn_swallow EQ 0 AND type_effect EQ 1;
run;
proc mixed data = meta_other_dir cl covtest method=REML;
title 'other direct';
class ID ID_paper species;
model zr = / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
random intercept /sub= species;
weight N3;
parms 1 1 1 1/ hold=4;
run;
data meta_other_ind;
set meta;
if barn_swallow EQ 0 AND type_effect EQ 0;
run;
* one only paper, random effect for ID_paper removed ;
proc mixed data = meta_other_ind cl covtest method=REML;
title 'other indirect ';
class ID species;
model zr = / solution ddfm=satterthwaite cl ;
random intercept /sub= ID;
random intercept /sub= species;
weight N3;
parms 1 1 1/ hold=3;
run;
data meta_other_dist;
set meta;
if barn_swallow EQ 0 AND type_study EQ 'distribution';
run;
proc mixed data = meta_other_dist cl covtest method=REML;
title 'other distribution';
class ID ID_paper species;
model zr = / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
random intercept /sub= species;
weight N3;
parms 1 1 1 1 / hold=4;
run;
data meta_other_rep;
set meta;
if barn_swallow EQ 0 AND type_study EQ 'reproduction';
run;
proc mixed data = meta_other_rep cl covtest method=REML;
title 'other reproduction';
class ID ID_paper species;
model zr = / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
random intercept /sub= species;
weight N3;
parms 1 1 1 1 / hold=4;
run;
* variation in effect sizes with latitude;
proc mixed data = meta cl covtest method=REML;
title 'bias latitude all';
class ID ID_paper species;
model zr = latitude / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
random intercept /sub= species;
weight N3;
parms 1 1 1 1/ hold=4;
run;
proc mixed data = meta_swallow cl covtest method=REML;
title 'bias latitude swallow';
class ID ID_paper species;
model zr = latitude / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
weight N3;
parms 1 1 1 / hold=3;
run;
proc mixed data = meta_other cl covtest method=REML;
title 'bias latitude other';
class ID ID_paper species;
model zr = latitude / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
random intercept /sub= species;
weight N3;
parms 1 1 1 1/ hold=4;
run;
* variation in effect size with year;
proc mixed data = meta cl covtest method=REML;
title 'bias year of publication';
class ID ID_paper species;
model zr = year / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
random intercept /sub= species;
weight N3;
parms 1 1 1 1/ hold=4;
run;
proc mixed data = meta_swallow cl covtest method=REML;
title 'bias year of publication swallow';
class ID ID_paper species;
model zr = year / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
weight N3;
parms 1 1 1 / hold=3;
run;
proc mixed data = meta_other cl covtest method=REML;
title 'bias year of publication other';
class ID ID_paper species;
model zr = year / solution ddfm=satterthwaite cl ;
random intercept /sub= ID (ID_paper);
random intercept /sub= ID_paper;
random intercept /sub= species;
weight N3;
parms 1 1 1 1/ hold=4;
run;
Code for publication bias analyses run with R 3.0.1
We here provide commented code for all the analyses run with R 3.0.1 including steps for proper data selection from Table S1.
# load necessary libraries
library(metafor)
library(xlsx)
### data import----
# put your path to file Table S1.xlsx provided as Supplementary Information
d <- read.xlsx("C:/…your path to file .../Table S1.xlsx", "Data")
### Analyses on all effect sizes ----
# 1) select all effect sizes on barn swallows ----
f <- subset(d, species == "Hirundo_rustica")
dim(f)
# Kendal Tau correlation test
cor.test(f$Zr, f$sample_size, method = "kendall")
# Fail-safe number
fsn(Zr, var_Zr, data = f, type = "Rosenthal", alpha = 0.05)
# Trim-fill
# A random effect model is required for trim-fill
ma <- rma.uni(Zr, var_Zr, data = f, method = "REML")
trimfill(ma, estimator = "L0")
# 2) select direct effects on barn swallows ----
f <- subset(d, species == "Hirundo_rustica" & type_effect == 1)
dim(f)
# Kendal Tau correlation test
cor.test(f$Zr, f$sample_size, method = "kendall")
# Fail-safe number
fsn(Zr, var_Zr, data = f, type = "Rosenthal", alpha = 0.05)
# Trim-fill
# A random effect model is required for trim-fill
ma <- rma.uni(Zr, var_Zr, data = f, method = "REML")
trimfill(ma, estimator = "L0")
# 3) select indirect effects on barn swallows ----
f <- subset(d, species == "Hirundo_rustica" & type_effect == 0)
dim(f)
# Kendal Tau correlation test
cor.test(f$Zr, f$sample_size, method = "kendall")
# Fail-safe number
fsn(Zr, var_Zr, data = f, type = "Rosenthal", alpha = 0.05)
# Trim-fill
# A random effect model is required for trim-fill
ma <- rma.uni(Zr, var_Zr, data = f, method = "REML")
trimfill(ma, estimator = "L0")
# 4) select effects on barn swallow distribution ----
f <- subset(d, species == "Hirundo_rustica" & type_study == "distribution")
dim(f)
# Kendall Tau correlation test
cor.test(f$Zr, f$sample_size, method = "kendall")
# Fail-safe number
fsn(Zr, var_Zr, data = f, type = "Rosenthal", alpha = 0.05)
# Trim-fill
# A random effect model is required for trim-fill
ma <- rma.uni(Zr, var_Zr, data = f, method = "REML")
trimfill(ma, estimator = "L0")
#### Analyses on mean within study effect size ----
# 1) select all effect sizes on Barn swallows ----
f <- subset(d, species == "Hirundo_rustica")
dim(f)
# calcuale mean effect size within paper
Zrmean <- data.frame(cbind(ID_paper=unique(f$ID_paper),Zr=NA, se_Zr=NA,
var_Zr=NA, avg_sample_size=NA, min_sample_size=NA,
max_sample_size=NA))
dim(Zrmean)
for(i in 1:nrow(Zrmean)){
IID <- as.numeric(Zrmean$ID_paper[i])
Sub <- subset(f, ID_paper==IID)
if(nrow(Sub)>0){
mZr <- rma.uni(Zr, 1/N3, data = Sub, method = "REML")
Zrmean$Zr[i] <- mZr$b
Zrmean$se_Zr[i] <- mZr$se
Zrmean$var_Zr[i] <- mZr$se^2
Zrmean$avg_sample_size[i] <- mean(Sub$sample_size)
Zrmean$min_sample_size[i] <- min(Sub$sample_size)
Zrmean$max_sample_size[i] <- max(Sub$sample_size)
}
}
# Kendal Tau correlation test
cor.test(Zrmean$Zr, Zrmean$avg_sample_size, method = "kendall")
cor.test(Zrmean$Zr, Zrmean$min_sample_size, method = "kendall")
cor.test(Zrmean$Zr, Zrmean$max_sample_size, method = "kendall")
# Fail-safe number
fsn(Zr, var_Zr, data = Zrmean, type = "Rosenthal", alpha = 0.05)
# Trim-fill
# A random effect model is required for trim-fill
ma <- rma.uni(Zr, var_Zr, data = Zrmean, method = "REML")
trimfill(ma, estimator = "L0")
# 2) select direct effects on barn swallows ----
f <- subset(d, species == "Hirundo_rustica" & type_effect == 1)
dim(f)
# calcuale mean effect size within paper
Zrmean <- data.frame(cbind(ID_paper=unique(f$ID_paper),Zr=NA, se_Zr=NA,
var_Zr=NA, avg_sample_size=NA, min_sample_size=NA,
max_sample_size=NA))
dim(Zrmean)
for(i in 1:nrow(Zrmean)){
IID <- as.numeric(Zrmean$ID_paper[i])
Sub <- subset(f, ID_paper==IID)
if(nrow(Sub)>0){
mZr <- rma.uni(Zr, 1/N3, data = Sub, method = "REML")
Zrmean$Zr[i] <- mZr$b
Zrmean$se_Zr[i] <- mZr$se