How do I determine whether two correlations are significantly different? I want to determine which of two sets of data (B1, B2) better correlates (pearsons r) to another set (A). There is missing data in all sets of data.
How can I determine whether the resulting correlation is significantly different or not?
E.g. 8426 values are present in both A and B1, r = 0.74. 8798 are present in both A and B2, r=0.72.
I thought this question might help but it is unanswered: How to know one system is significantly better than another one?
 A: Assume Fisher transformation: $r_1'=\tanh^{-1}(r_1)$ and $r_2'=\tanh^{-1} \left(r_2\right)$. Or, in an equivalent and perhaps clearer way (thanks to @dbwilson!), $r_1'={1\over2}\ln\left({1+r_1\over1-r_1}\right)$ and $r_2'={1\over2}\ln\left({1+r_2\over1-r_2}\right)$.
Then it follows that, due to the fact the Fisher transformed variables are now Normally distributed and the sum of normally distributed random variables is still normally distributed:
$$z={r_1'-r_2'\over S}\sim N(0,1) $$
With
$$S=\sqrt{S_1^2+S_2^2}=\sqrt{{1\over n_1-3}+{1\over n_2-3}}$$
So you test the null hypotheses $H_0:z=0$ by obtaining $P(z\neq0)=2\cdot P(Z>|z|)$.
Compared to the habitual $t$-test, notice we couldn't use the $t$-statistics so easily, see What is the distribution of the difference of two-t-distributions, so there's a consideration to be made on the degrees of freedom available in the computation, i.e. we assume $n$ large enough so the normal approximation can be reasonably to the respective $t$ statistics.
--
After the comment by @Josh, we can somewhat incorporate the possibility of interdependence between samples (remember both correlations depend on the distribution of A). Without assuming independent samples and using the Cauchy-Schwarz inequality we can get the following upper bound (see: How do I find the standard deviation of the difference between two means?):
$$S\leq S_1+S_2$$
$$S\leq {\sqrt{1\over n_1-3}+\sqrt{1\over n_2-3}}$$
A: Sometimes one might be able to accomplish this in multiple regression, where A is the DV, B is the score people have on a scale, and C is a dummy code that says it is either B1 or B2: lm(A~B+C+B*C). The interaction term, B*C, will tell you if the correlations are different, while simple slopes between A and B at both levels of C will tell you the correlations.
However, it is not possible to fit all types of comparisons between conditions in this framework. The cocor R package is very useful, and it has a very simple point-and-click interface on the web. Note that, with different missing data, you have neither independent nor dependent samples. I would use listwise deletion here, to keep it simple (and power isn't an issue for you).
A: Oh the power of the bootstrap. Lets look at three vectors for illustration: $A$, $B_1$ and $B_2$ where:
$$Cor(A, B_1) = 0.92$$
$$Cor(A, B_2) = 0.86$$

The goal is to determine if the correlation of these two data sets are significantly different. By taking bootstrap samples like so:
 B <- 10000
 cor1 <- cor2 <- rep(0, B)
 for(i in 1:B){
   samp <- sample(n, n, TRUE)  
   cor1[i] <- cor(A[samp], B1[samp])
   cor2[i] <- cor(A[samp], B2[samp])
 }

We can plot the bootstrap distributions of the two correlations:

We can also obtain 95% Confidence Intervals for $Cor(A, B_i)$.
95% CI for $Corr(A, B_1)$:
$$(0.897, 0.947)$$
95% CI for $Corr(A, B_2)$:
$$(0.810, 0.892)$$
The fact that the intervals don't overlap (barely) gives us some evidence that the difference in sample correlations which we observed is indeed statistically significant.
As amoeba points out in the comments, a more "powerful" result comes from getting the difference for each of the bootstrap samples.

A 95% CI for the difference between the two is:
$$(0.019, 0.108)$$
Noting that the interval (barely) excludes 0, we have similar evidence as before. 

To handle the missing data problem, just select your bootstrap samples from the pairs which are contained in both data sets.
