Making causal conclusions from heterogeneous data sources