とある案件で、2つの変数の相関係数を計算しているのを見たのですが、片方の変数のほうがデータ数が多いためか、平均値をとってから相関を計算していました。もともと「それやっちゃマズい」と思っていたのですが、実際にどのくらいのマズさになるのか実験してみました。
例題として、ある食品のリニューアルに向けて、使用する塩分量を現在のものからマイナス5グラムからプラス5グラムまで変化させ、それに対して20人の実験参加者に「しょっぱさ」の評価をしてもらうということを考えます。現在のものより塩味がとても薄くなっていたらマイナス20点、とても濃くなっていたらプラス20点、変化がないと感じたらゼロ点とします。
そのような仮想データを作ってプロットすると以下のようになります。X軸が塩分量、Y軸がしょっぱさ評価で、X軸の各値に対して20人分のデータが縦方向に並んでいるのが確認できます。lm()
を使って線形回帰直線も追加しました。
set.seed(20241225) x1 <- rep(-5:5, 20) y1 <- x1 + rnorm(220, mean=0, sd=5) plot(x1, y1, xlab="x", ylab="y", ylim=c(-20, +20)) grid() mod1 <- lm(y1 ~ x1) abline(mod1)
x1とy1の相関係数を計算すると r = .54 (p < .001) となりました。線形回帰の結果は以下のようになります。
Residuals: Min 1Q Median 3Q Max -15.8767 -2.8916 -0.1336 3.3016 15.8517 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.08397 0.34730 -0.242 0.809 x1 1.04045 0.10983 9.474 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 5.151 on 218 degrees of freedom Multiple R-squared: 0.2916, Adjusted R-squared: 0.2884 F-statistic: 89.75 on 1 and 218 DF, p-value: < 2.2e-16
y1 = -0.08 + 1.04 x1 という回帰式が得られました。また、このときの補正R二乗(自由度調整済み決定係数)は R2 = .2884 となっています。
ここで、「塩分量ごとに実験参加者の平均をとってしまおう」と考えたとします。グラフ中の灰色の点は評価値の生データで、平均値を赤い×印で重ねました。こんどは平均値を目的変数として線形回帰しました。
x2 <- -5:5 y2 <- tapply(y1, x1, mean) plot(x1, y1, col=8, xlab="x", ylab="y", ylim=c(-20, +20)) grid() points(x2, y2, pch=4, cex=2, lwd=2, col=2) mod2 <- lm(y2 ~ x2) abline(mod2, col=2)
さきほどと同様にx2とy2の相関係数を計算すると、なんと r = .98 (p < .001) となりました。線形回帰の結果は以下のようになります。
Residuals: Min 1Q Median 3Q Max -1.0874 -0.6220 -0.1850 0.6077 1.1840 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.08397 0.24494 -0.343 0.74 x2 1.04045 0.07746 13.433 2.93e-07 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.8124 on 9 degrees of freedom Multiple R-squared: 0.9525, Adjusted R-squared: 0.9472 F-statistic: 180.4 on 1 and 9 DF, p-value: 2.93e-07
上記のときと同じく y2 = -0.08 + 1.04 x2 という回帰式が得られました。平均をとっても回帰式は変わらないんですね。一方で決定係数は R2 = .9472 と、だいぶ大きな値になりました。
今回の例だと、塩分量-5 g~+5 gの11段階に対して、それぞれ20名が評価したのでデータ数は220個になります。11と220という異なるデータ数では相関係数の計算ができません。そのため平均値を計算して、データ数を11に一致させてから相関係数を計算しようと思うのかもしれません。しかし、塩分量を繰り返して(回答と対応させて)220個にすることでもデータ数を一致させることができます。
平均をとってから相関係数を計算するだけで、相関係数の値が向上してしまいます。これが許容される場面と許容されない場面があるのかもしれませんが、相関係数は生データに対して計算するのが誠実だと思います。回帰分析についても同様ですね。