市原清志先生「バイオサイエンスの統計学」をRで実装したものです。
市原先生は直線回帰・相関の順に説明しておられます。両者の違いが重要だと認識されていたのだと思います。
回帰 | 相関 | |
---|---|---|
誤 差 | y方向のみ | x,y両方が確率変数 |
信頼域 | yの信頼区間 | x,yの分布の中心からの等確率距離 |
目 的 | どのように直線に関係づけられるか | どの程度直線的か |
単 位 | 単位に依存 | 単位に依存しない |
相関係数.
\({r_{xy} = \dfrac{\sum_{i = 1}^n (x_i - \bar{x})(y_i - \bar{y})} {\sqrt{\sum_{i = 1}^n (x_i - \bar{x})^2}\sqrt{\sum_{i = 1}^n (y_i - \bar{y})^2}} =\dfrac{1}{n}\sum_{i=1}^n \dfrac{x_i - \bar{x}}{s_x} \cdot \dfrac{y_i - \bar{y}}{s_y} }\)
回帰係数.
\(\displaystyle b=\frac{\sum
^{n}_{i=1}\left( x_{i}-\bar{x}\right) \left( y_{i}-\bar{y}\right) }{
\sum ^{n}_{i=1}\left( x_{i}-\bar{x}\right) ^{2}} = \dfrac{\sqrt{\sum_{i
= 1}^n (y_i - \bar{y})^2}}{{\sqrt{\sum_{i = 1}^n (x_i -
\bar{x})^2}}}\cdot\displaystyle \frac{\sum ^{n}_{i=1}\left(
x_{i}-\bar{x}\right) \left( y_{i}-\bar{y}\right) }{ \sqrt{\sum_{i = 1}^n
(x_i - \bar{x})^2}\sqrt{\sum_{i = 1}^n (y_i -
\bar{y})^2}}=\dfrac{s_y}{s_x}r_{xy}\)
重要なのは分子の共分散で、分母は単位を調整するためのものです。標準化して無名数にしておけば、相関係数と回帰係数は一致します。
相関係数と回帰係数の違い.
x <- c(-2,2)
y <- c(-2,2)
plot(x,y,asp = 1,xlim=c(-3,3),ylim=c(-3,3))
abline(h=0,v=0,col="lightblue")
(x-mean(x))*(y-mean(y))#偏差積
## [1] 4 4
(x-mean(x))*(x-mean(x))#偏差平方
## [1] 4 4
sum((x-mean(x))*(y-mean(y)))/sum((x-mean(x))*(x-mean(x)))
## [1] 1
x <- c(-2,2)
y <- c(2,-2)
plot(x,y,asp = 1,xlim=c(-3,3),ylim=c(-3,3))
abline(h=0,v=0,col="lightblue")
(x-mean(x))*(y-mean(y))#偏差積
## [1] -4 -4
(x-mean(x))*(x-mean(x))#偏差平方
## [1] 4 4
sum((x-mean(x))*(y-mean(y)))/sum((x-mean(x))*(x-mean(x)))
## [1] -1
S=c()
DATA=data.frame(X=c(),Y=c())
X <- c(0,1,2,3,4)
for (i in 1:100){
e <- rnorm(5,0,0.5)
Y <- 0.5*X+1+e
data <- data.frame(X=X,Y=Y)
fit = lm( formula = Y ~ X, data = data )
f <- fit$ fitted.values#予測値
a <- fit$ coefficients;a#回帰係数
e <- fit$ residuals;e#残差
se <- sum(e^2)#残差平方和
s <- sqrt(se/3)#se/2#残差分散
S <- c(S,s)
DATA <- rbind(DATA, data)
}
mean(S)
## [1] 0.4520193
model = lm( formula = Y ~ X, data = DATA )
plot(DATA,asp=1,col="grey")
abline(model)
par(family = "HiraKakuProN-W3") #日本語フォントの指定
data = matrix(0,10,2)
data[,1]<-c(1,3,4,5,6,7,9,10,11,12)
data[,2]<-c(4,4,5,6,5,7,6,8,9,7)
colnames(data)<- c("X","Y")
plot(data)
dat<- data.frame(data)
dat
X | Y |
---|---|
1 | 4 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 5 |
7 | 7 |
9 | 6 |
10 | 8 |
11 | 9 |
12 | 7 |
glimpse(dat)
## Rows: 10
## Columns: 2
## $ X <dbl> 1, 3, 4, 5, 6, 7, 9, 10, 11, 12
## $ Y <dbl> 4, 4, 5, 6, 5, 7, 6, 8, 9, 7
#データフレーム形式(行・列はラベルを必ず持ち, ラベルによる操作が可能である
dat.lm<- lm(Y~X,data=dat)
dat.lm
##
## Call:
## lm(formula = Y ~ X, data = dat)
##
## Coefficients:
## (Intercept) X
## 3.4164 0.3946
par(family = "HiraKakuProN-W3") #日本語フォントの指定
par(mfrow=c(2,2))
plot(dat.lm)
summary(dat.lm)
##
## Call:
## lm(formula = Y ~ X, data = dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.15217 -0.73829 0.09699 0.63043 1.24247
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.41639 0.61769 5.531 0.000553 ***
## X 0.39465 0.08097 4.874 0.001233 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8855 on 8 degrees of freedom
## Multiple R-squared: 0.7481, Adjusted R-squared: 0.7166
## F-statistic: 23.76 on 1 and 8 DF, p-value: 0.001233
residuals(dat.lm)#残差
## 1 2 3 4 5 6
## 0.188963211 -0.600334448 0.005016722 0.610367893 -0.784280936 0.821070234
## 7 8 9 10
## -0.968227425 0.637123746 1.242474916 -1.152173913
sqrt(sum(residuals(dat.lm)^2)/8)#標準偏差
## [1] 0.8854783
#taikei.lm$residuals でもよい
coefficients(dat.lm)#回帰係数
## (Intercept) X
## 3.4163880 0.3946488
plot(residuals(dat.lm) )
abline(h=0,col="lightblue")
Sx <-var(dat$X)*9;Sx
## [1] 119.6
Sy <-var(dat$Y)*9;Sy
## [1] 24.9
Sxy <-cov(dat$X,dat$Y)*9
sqrt((Sy-coefficients(dat.lm)[2]*Sxy)/8)
## X
## 0.8854783
テキストの標準偏差と少しずれているが、四捨五入による誤差と考えられる。
p211の図でわかるように、回帰直線は.
x,y の尺度が同じとき、
yを回帰する直線が y=ax+b であれば、
xを回帰する直線も x=ay+b である(同じ傾き)。
1.1.2 aov による回帰分析 aov は分散分析の関数です。R は因子型(factor)の説明変数に対し、特性関数(indicator function)を用いて回帰分析を行い、分散分析として出力しているそうです。このため、水準数が4ならば、使う特性関数は3つ、もう一つの水準は x=0 のときの切片の値として使うので、自由度は 4-1=3 、分散分析の場合の自由度が 水準数−1であるのは、こういう理由によります。 説明変数 x を数値型(numeric)として aov を適応すると、回帰分析が行われ、説明変数の自由度は1になります。 (factor(x)として因子型にすると、自由度は因子数−1になります)
以下の内容は、2変量正規分布を扱うので高校のレベルを超える。
ここでは項目だけを列挙し、詳しい説明は次のページで行う。
共分散分析(ANCOVA)の第1段階に相当する。