【4-8】p値と信頼区間の関係性をざっくり説明してみる第4章では様々な検定を紹介しています。検定を行うとp値に目が向きがちですが、期待値と95%信頼区間を出す必要性も言われています。今回はp値と95%信頼区間の関係性についてです。統計ソフトで検定をかけるとp値が出てきます。0.05かどうかはグラフを見れば一目でわかります。0.05は95%信頼区間が基準を跨ぐかどうかと全く同じ意味です。t検定など2つの基準の差を見る検定では差が0という仮説を立てます。Fisherの正確検定やロジスティック回帰分析のようにオッズ比をみる検定ではオッズ比が1という仮説を立てます。信頼区間たとえば架空のダイエットのメソッドがあったとします。数字は完全に適当です。3つの架空のメソッドで3ヶ月トレーニングをした研究があったとします。ちなみに1つの研究ではなく、3つの別々研究だったとします。それぞれN数も違うとします。交絡因子などの共変量もここでは考えないこととします。0.11この場合どれが効果ありと感じるでしょうか?2期待値と信頼区間を見る次に以下の期待値と95%信頼区間をみるといかがでしょうか?マイナスになっているというのはそれだけ減量したという意味とします。0.05は95%信頼区間が0を跨ぐかどうかと全く同じ意味です。N数も追加してみます495%信頼区間の特徴95%信頼区間の幅はN数が増えると短くなるという特徴があります。そのためどんな意味のない些細な効果でもN数を増やすと有意差が出やすくなります。(倫理的にどうかはここでは言及しません)Aは有意差はあるのですが、逆に言うと3ヶ月トレーニングして1kgの効果しかないメソッドとも言えます。N数を増やすと区間が狭くなるので有意差はより出るかもしれませんが、減量効果が上がる(点の位置が左に動く)訳ではありません。Cはもしかしたらサンプルサイズの設計(取るべきN数)が足りなかっただけという研究の設定段階の問題なのかもしれません。N数を増やすことで信頼区間の幅だけでなく期待値もどう変わるかわかりませんが、有意差がなかったので効果が無いと断言してしまっていいのかどうかは気になります。効果が無いと断言できるものでもありません(本当に意味のある効果がなかったのか、本来あったはずなんだけどN数が足りなくて効果がなかったのか判断つかない)。そこに95%信頼区間があればp値のみよりも判断する材料が増えるかもしれません。2.まとめ今回はp値と信頼区間の関係性について紹介しました。研究デザイン(共変量の調整など)やバイアスを評価することが大切なのですが、加えてp値だけにとらわれないように自分も気をつけたいと思います。第4章では統計の中でも検定を扱っています。ここまでいろいろな検定を行ってきましたが、グラフを作る時はどうするでしょうか?【4-6】Rのt検定の結果からp値や信頼区間の数値を取り出す方法では検定した結果を取り出す方法を紹介しました。今回は取り出したデータで95%信頼区間のグラフを作る方法を紹介します。データとt検定のコードは以下になります。前回の記事でこのコードの解説をしていますのでわからない場合は先に確認をお願いします。dat_height)1.データを取り出すまずはp値、95%信頼区間のデータを取り出してみます。これも前回の記事で紹介しています。res_height$conf.int[2]pconf.lowconf.highこの数字をグラフに乗せると小数点が多すぎるのでround関数で丸めます。今回はp値は小数点第3位、95%信頼区間は小数点第2位までにしてみます。2)pconf.lowconf.highこれでグラフに貼り付けやすくなりました。2.グラフを作成する今回はうまくいかないグラフも載せることでグラフを作る流れもお見せできればと思います。目標は以下のようなグラフを作ることです。第3章で使ってきたtidyverseパッケージのggplot関数を使います。ggplotの使い方がわからない場合はこちらをご参照ください。最初にtidyverseパッケージを呼び出します。library(tidyverse)まずグラフを作ってみます。今回使うのはgeom_errorbar関数を使います。geom_errorbar関数はaes関数の中に3つの要素が必要です。x:x軸ymin:エラーバーの最小値ymax:エラーバーの最大値x軸に値するものは今回ないので空欄にしておきます。yminとymaxはconf.lowとconf.highになります。conf.high))なんだかすごいグラフができました。グラフを横向きにするのはcoord_flip関数です。()には何も入れません。coord_flip()これで横向きになりましたが線が幅長いので短くします。今回は0.1にしました。widthはaes関数の外に配置します。coord_flip()これでエラーバーっぽくなりました。今度は数値を入れます。文字を打ち込むのでgeom_text関数を使います。geom_text関数のaes()では3つ指定します。coord_frip()を使っているのでx軸が縦、y軸が横になっていることに注意します。x:文字を置くx軸の位置→今回は空欄y:文字を置くy軸の位置→conf.lowとconf.highの2つlabel:実際の文字→conf.lowとconf.highの2つconf.lowとconf.highの2つのデータを入れるのでc関数でつなげます。coord_flip()数字が出てきましたがグラフとぶつかってしまいます。上に上げるときはマイナスの値を入れます。今回は試してみて-1.5にしました。coord_flip()これでグラフができましたが、y軸(グラフを横にしたから下がy軸になっている)の名前を変えてみます。labs関数を使って「95%信頼区間」と入れてみます。xも消します(空欄にする)。coord_flip()Windowの場合はこれで完成かもしれませんが、Macだと日本語が□□□と豆腐になってしまいます。今回はヒラギノ角ゴproW3を指定します。coord_flip()今回のt検定は2群の差が0と仮定していました。0のラインで赤線を足してみます。y軸に垂直な線を引くにはgeom_hline関数を使います。付けなければ黒になります。aesは付けなくて大丈夫です。coord_flip()3.まとめ今回は検定の結果から値を取り出してグラフを作成しました。グラフの要素を1つずつ追加しました。ブログに書かれているコードは長くて読みにくいかもしれませんが、「今度はこの要素を付け加えたい」という順番にコードを書けばその通りにグラフができるのもRの特徴の1つです。今回の順番は1例ですので順番を変えて1つずつ作ってみていただければggplotの理解も深まりやすいと思います。第4章では統計の中でも検定を扱っています。ここまでいろいろな検定を行ってきましたが、グラフを作る時はどうするでしょうか?これは【4-1】Rでt検定を行う方法で行ったt検定の結果です。p値があり、下には95%信頼区間、その下には各グループの平均が記載されています。-1.745123A:28.12B:35.07この数値をグラフなどにするには手で打ち直すかコピペをすることが多いと思います。今回はこの数値がどこに入っているのか?どうやって取り出せばいいのかという話です。今回は架空のデータを使いますがもし第4章を実践された方はそのデータでも大丈夫です。1.使うデータこんなデータを作りました。)を指定すると疑似データを作ってくれます。heightの列に男女のデータをc関数でくっつけ100人のデータにします。sexの列は(男性,男性,男性,,,,女性,女性,女性,,,,,)としたいのでrep関数を使いました。tibble関数でheightとsexをつなげました。2.t検定をするこれをt検定してみます。t検定は【4-1】Rでt検定を行う方法で紹介しています。dat_height)ここまでできました。このままだとデータは取り出せません。結果を変数に入れます。dat_height)3.結果からデータを取り出すすると右上のEnvironmentタブに結果が格納されます。リストというのはExcelのシートが10個あって、それぞれにデータが入っているというイメージです。左がExcelでいうシート名です。p値はp.valueに入っていますのでこうなります。res_height$p.valueres_height[["p.value"]]もし小数点以下を四捨五入したい場合はround関数を使います。3)95%信頼区間はconf.intに入っています。そのまま出すと2つのデータが出てきます(95%信頼区間の最小と最大)。]]ではないので注意してください。]は【1-12】Rで特定の条件にあう要素を抜き出す方法で紹介しましたが、条件式ではなくただの数値をいれると◯番目のデータを取り出してくれます。[1]だと1つ目のデータ(つまり最小)[2]だと2つ目のデータ(つまり最大)が取り出せます。res_height$conf.int[1]res_height[["conf.int"]][2]そして点推定である各平均はestimateに入っています。res_height$estimateres_height$estimate[1]res_height[["estimate"]][2]4.データを取り出すメリット結果をコピペしても問題はないのですが、こうすることでのメリットがあります。それはもし後でデータが変わったとしてもコード自体は何も変えなくていいことです。考えたくはありませんが、後でデータが増えた、実は個々の数値が間違ってた等あると結果も変わります。データをコードで取り出しておくと、データが変わっても自動的に数値が更新されるのでミスする可能性が減ります。元データを修正するだけでいいというのはExcelやEZRでは簡単にはできません。5.まとめ今回は検定の結果からデータを取り出す方法を紹介しました。検定の種類によっては取り出し方が違うこともありますが、まずは結果が格納されたデータをみるとヒントがあるかもしれません。次回は取り出した値を使って95%信頼区間のグラフを作る方法を紹介します。