従属なデータの統計的検定

# 従属なデータ
　統計的検定では，[独立なデータ](https://www.weblio.jp/content/%E7%8B%AC%E7%AB%8B%E3%81%AA%E3%83%87%E3%83%BC%E3%82%BF#goog_rewarded)であることが前提です．対する従属なデータは医学の研究ではよく扱われ，様々な対処法があります．
　$X$と$Y$が，互いに独立であれば$COV(X,Y)≠0$となります（十分条件）．ゆえに従属なデータは相関関係を持ちます[^1]．医学では，従属なデータを“対応がある”といいます．例えば，左右の握力を測り，左右の差をみるときに，Aという人の右の握力とBという人の左の握力を比べるなら，AとBは異なる人なので独立なデータで，複数名の平均の差を比べたいなら，2標本$ｔ$検定を適用します．また，Aという人の右の握力と左の握力を比べるときは独立ではなくなり（＝従属），対応のある$t$検定を適用します．
　A，B，Cという3名の左右握力を測ると，6つの握力値が記録されます．D，E，Fという3名の左右握力を測ると，6つの握力が記録されます．ABC群とDEF群は独立です．ABCの平均とDEFの平均の差を検定したいときは，2標本$ｔ$検定で間違いありません．しかし，もしABCの握力値の左右含めてn=6とし，DEFの握力値の左右含めてn=6とし，これらの差を見たいとします．<font color="#1e90ff">**ABCとDEFは独立ですが，Aの右握力とAの左握力は独立ではありません．**</font>2標本$ｔ$検定を適用してよいのでしょうか？ 　
  
  [^1]:$COV(X,Y)=0$であっても独立なことがあります． 

 # 例：左右握力のデータの場合
　A群（10人）における右の握力データ **$X_R$** があるとします．同一の10名に対して左の握力データ **$X_L$** があるとします．
　同様に，B群（10人）における右の握力データ **$Y_R$** ，同一の10名から取った左の握力データ **$Y_L$** があるとします．
　 **$X_R$** と **$Y_R$** の平均差を検定したいなら，2標本$t$検定の適用となります[^3]．**$X_L$** と **$Y_L$**，**$X_R$** と **$Y_L$**，**$X_L$** と **$Y_R$** の平均差の検定でも2標本$t$検定を適用します．
　ここで，$X＝$｛$X_R，X_L$｝（左右のデータを1つにする），$Y＝$｛$Y_R，Y_L$｝ として，A群の握力とB群の握力を比べたいとき，2標本$t$検定を適用してよいか．2標本$t$検定は，2つの独立した母集団からの各標本（2標本）に対する平均の差を検定する手法です．このケースでは，A群とB群は独立で間違いないですが，Aの中のデータ$X_R，X_L$とBの中のデータ$Y_R，Y_L$の中では，従属な関係があります．これでも検定は成り立つか，です． 

[^3]:**$X_R$** と **$Y_R$** が等分散と仮定した場合

## Rによるシミュレーション
　まず，
```rb
cor.matrix<-function(rcoef,l){ #相関係数rcoefのl行×l列行列を作成
  r<-matrix(rcoef,l,l)
  diag(r)<-1
  r
}
```
の関数で，相関行列rを作ります．この関数を利用して次に，

```rb
rep<-10000 
n<-50
Y<-NULL
   for(m in c(0,0.2,0.4,0.6,0.8)){
        r<-cor.matrix(m,2)
        X<-NULL
             for(i in 1:rep){
                   x<-cor.sim(r,n) #大きさnのx_1～N(0，1)と相関rを持つx_2～N(0，1)の作成
                   y<-cor.sim(r,n) #大きさnのy_1～N(0，1)と相関rを持つy_2～N(0，1)の作成
                   X<-rbind(X,
                       c(t.test(x[,1],y[,1],var.equal=T)$p.value, #r=0のデータの差の検定⇒p値の回収
                                             t.test(c(x),c(y),var.equal=T)$p.value)) #r=0,0.2,0.4,0.6,0.8のデータの差の検定⇒p値の回収
             }
        Y<-rbind(Y,c(sum(X[,1]<0.05)/rep,sum(X[,2]<0.05)/rep))
   }
dimnames(Y)[[2]]<-c("片側データ","左右のデータ")
dimnames(Y)[[1]]<-c("r=0","r=0.2","r=0.4","r=0.6","r=0.8")
Y
```
により，シミュレーションします．
　まず，$N(0，1)$に従う乱数からデータ$X_1$（n=50），$X_1$と$r=0，0.2，0.4，0.6，0.8$の相関を持つデータ$X_2$（n=50）を発生させます．$r=0$の場合は独立です．
　次に，$N(0，1)$に従う乱数からデータ$Y_1$（n=50），$Y_1$と$r=0，0.2，0.4，0.6，0.8$の相関を持つデータ$Y_2$（n=50）を発生させます．これも$r=0$の場合は独立です．
　そして，①$X_1$と$Y_1$の2標本$t$検定を行います．続いて，②$X=$｛$X_1，X_2$｝（n=100）と$Y=$｛$Y_1，Y_2$｝（n=100）として，2標本$t$検定を行います．何れも平均に差のない標本なので，有意水準$5％$で検定すれば，第Ⅰ種の過誤は5％前後です．
　以上の過程をrep=10,000回繰り返し計算します．
　各検定の$p$値から$p<0.05$となる個数を数え，$10,000$で割ります．もし，全てp<0.05であれば1，p<0.05が何もなければ0となります．
 
# シミュレーションの結果

　以下は，$n=50$の場合の結果です．$X_1$と$Y_1$の2標本$t$検定では，例えば右側のデータだけでA，B群の差を検定したような結果です．$X$と$Y$の2標本$t$検定では，右側と左側のデータを併せてA，B群の差を検定したような結果です．
　有意水準0.05で判断しているので，0.05（＝$\alpha$）に近いほど正解です．$X$と$Y$の2標本$t$検定では，相関が大きくなるほど値は上がり，有意差が出やすい条件になります[^2]．
 
 | r | $X_1$と$Y_1$ | $X$と$Y$ |
|:-----------|------------:|:------------:|
| 0       | 0.0483        | 0.0492         |
| 0.2     | 0.0471      | <font color="red">**0.0726**</font>       |
| 0.4       | 0.0481        | <font color="red">**0.1010**</font>        |
| 0.6         | 0.0487          | <font color="red">**0.1215**</font>            |
| 0.8       | 0.0488       | <font color="red">**0.1464**</font>        |

※0.05となるのが理想．0.04～0.06の範囲外を赤字で表示．
[^2]:平均差の差のない検定なので，nが大きくなっても0.05をキープして正解です．

# ここまでの結論
　少なくとも，<font color="#1e90ff">**一人の対象から2つのデータ（例えば左右）を取得して1標本とし，2標本の差の検定を行う方法は間違いでした．**</font>シミュレーションするまでもない数理的には常識の事項ですが，証拠を示しました．
　検出力，nの異なる場合や，正規分布以外でも確認したいところですが，この一例で十分です．
　また，解析はこれ以外のケースもあります．例えば経時的にとった反復測定の例とか，多変量解析の例とかです．問題は必ず起こりますが，程度は想像つかないので，シミュレーションする価値はありそうです．

# 代わりの方法
　A群の左右の握力を測定して，どうしても左右のデータを活用したい[^4]という場合，[線形混合モデル](https://qiita.com/ykawakubo/items/f57c38b72d2ddc7798fd)（MMRM）を活用できます．

[^4]:研究目的に応じて活用しなければならないならということで，なんとなくnを増やしたい，測定したデータを捨てるにはもったいないなどの理由ではありません．

　上述のシミュレーションで，MMRMを使用してみます．固定効果（fixed effect）を群の比較，そして左右の比較，変量効果（random effect）を対象者として，Rの[lme4パッケージ](https://cran.r-project.org/web/packages/lme4/index.html)のlmer関数による検定結果を追加します．
　上述と同様に，$n=50$として，相関係数の変化，シミュレーション回数は同様です．

# シミュレーションの結果

　全ての変数で平均に差のない検定結果なので，値は$0.05$前後になるはずです．

| r       | $X_1$と$Y_1$ | $X$と$Y$| $X$と$Y$(MMRM)| $X_1,Y_1$と$X_2,Y_2$(MMRM)|交互作用(MMRM)|
|:--------:|------------:|:------------:|:------------:|:------------:|:------------:|
| 0       | 0.0518      | 0.0521       |0.0046|  0.0488         | 0.0512         |
| 0.2     | 0.0454      | <font color="red">**0.0686**</font>        |0.0451|  0.0505         | 0.0524         |
| 0.4     | 0.0504      |<font color="red">**0.0990**</font>        |0.0502|  0.0487        | 0.0448         |
| 0.6     | 0.0481      |<font color="red">**0.1204**</font>        |0.0514|  0.0492         | 0.0488         |
| 0.8     | 0.0514      |<font color="red">**0.1503**</font>        |0.0496|  0.0505         | 0.0524         |

※0.05となるのが理想．0.04～0.06の範囲外を赤字で表示．

　MMRMは，理論に近似した結果となりますので，問題なさそうです．

# 結論
　同一人物から左右の握力や筋力などを測定して，全てのデータを利用する方法は誤りです．相関が強いほど，その率は高くなります．しつこいようですが，n=10のA群，n=5のB群があって，それぞれ左右の握力を測り，A群をn=20，B群をn=10として検定すれば，誤った結果が出力されます．もちろん，全員が左右とも測定できない人がいて，A群n=15，B群n=8となることもあると思います．その場合，本結果よりも多少は理論値に近づくと思います．
　今回はMMRMで適切な結果となりましたので，解析方法によっては適切に解析できることがわかりました．
　古くから医学の研究では，このような手順が当たり前のように行われてきました．その風習を継承しているわけですが，「皆がやってるからいい」とか「赤信号みんなで渡れば怖くない」的な発想は，止めなければなりません．このような検定結果は信用するに足りず，その研究者の信憑性に関わります．