Rで分析結果を出力する方法

R/Rstudio

統計解析を行って論文やレポートを書く際、平均値や標準偏差の値だけでなく、分析結果としてt値やf値といった検定統計量であったり、有意確率や効果量といったものを報告する必要があります。

ただ、分析の出力結果には報告に必要な値以外にもたくさんの情報があり、報告の際には必要な情報だけに注意を払っていちいち手入力しないといけなかったりします。分析が5回くらいなら一つひとつやってもいいかもしれませんが、それ以上あると正直疲れます。
また、報告すべき値がやたら細かい値だと間違えてしまうリスクもあります。

そんなわけで、今回はt検定を例に統計解析結果から特定の値を取り出す方法と、それをCSVファイルに出力する手順をまとめました。
大きく分けて4つの工程にわかれます。

①分析を行い、出力結果を変数に代入する
②代入された出力結果の中から必要な値を取り出して、別の変数に格納する
③格納された値を1つの変数にまとめる
④1つにまとめた変数をcsvファイルとして出力する。

※上記2,3は1つの工程にまとめることも可能だと思いますが今回はイメージのしやすさの観点から別の工程としてまとめました。

0.データの準備

まず、以下のようなデータを変数datに代入します(データは適当に作りました)。
※同様のデータをcsvファイルとして作成してから読み込んでも問題ありません。

dat<-data.frame(ID=c(1:20),
教授法=rep(c(“a”,”b”),times=10),
国語の点数=c(72,65,64,68,72,71,70,64,64,62,63,59,66,59,65,63,63,61,63,67))

datの中身
t検定というのは二つの条件の平均値に有意な差があるかを知りたいときに使います。
例えば今回のデータであれば、教授法aを受けた人の平均点(66.2点)と教授法bを受けた人の平均点(63.9点)が有意に異なるか、というような目的のときに使われます。
このとき、教授法を独立変数、国語の点数を従属変数と呼びます。

1.分析(t検定)を行い、出力結果を変数に代入する

Rでt検定を行う際にはt.test()を使います。
今回は教授法aと教授法bには対応がない(それぞれ異なる対象者が各条件に割り当てられる)ので、対応のないt検定というものを使います。対応のないt検定の場合は,以下の式となります。

t.test(従属変数~独立変数,  )
※var.equal=Fとすると,ウェルチの検定というものになります(本来は等分散性の検定をしたうえで,ウェルチの検定にするかどうかを決める必要がありますが,今回は省略してあります)。

今回のデータの場合、以下のような結果が出力されます。t検定の結果を変数res_Ttestに代入したうえで出力させてみるとt検定の結果が出てきます。

> res_Ttest<-t.test(dat$国語の点数~dat$教授法, var.equal=T)
> res_Ttest
Two Sample t-test
data: dat$国語の点数 by dat$教授法
t = 1.3467, df = 18, p-value = 0.1948
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-1.288007 5.888007
sample estimates:
mean in group a mean in group b
66.2 63.9

2.出力結果の中から必要な値を取り出して、別の変数に格納する

さて、ここで出力された結果をどのようにして取り出すか、それが今回のメインテーマです。
1つには出力結果をそのままコピーしてエクセルに貼り付けるという方法もあります。分析が一回限りの場合であったり、あと5分で資料完成させないといけない、みたいな大変な状況ならこの方法を使うと良いかもしれません。
ですが,不必要な情報があるとデータのコピペミスなども起こるかもしれませんので、あらかじめ必要な情報がわかっているならそれらをうまく整理できたら便利です。t検定の出力結果は、実はいくつか要素的なものを持っていて、names()で確認することができます。
t検定の出力結果を変数res_Ttestに代入したうえで,names()で確認すると以下のような情報が出てきます。
> names(res_Ttest)
[1] “statistic” “parameter” “p.value” “conf.int” “estimate” “null.value” “stderr” “alternative” “method” “data.name”
例えば,”statistic”は,t値を示しており,下記のように入力をすればt値だけを出力することができます。
> res_Ttest$statistic
t
1.346742
あるいは、”statistic”が格納されている位置を数字で指定しても取り出すこどできます。”statistic”は1番目にあるので,以下のように入力します。
> res_Ttest[1]
$statistic
t
1.346742
論文やレポートとして検定結果を報告する場合には、
自由度、t値、p値
あたりが最低限必要なので、こちらを取り出します。
> t<-res_Ttest$statistic #t値
> df<-res_Ttest$parameter#自由度
> p<-res_Ttest$p.value#p値

3.格納された値を1つの変数にまとめる

このままの状態では各々の値が別個の変数として独立して存在していることになるので、1つの変数に結合しましょう。
> res_Table<- data.frame( df,t,p)
> res_Table
df   t     p
df 18 1.346742 0.1947766
うまくまとまりましたが,行名が列の一番はじめのdfと同じになってしまっていますので,何の結果かわかりやすくするために,rownames()を使用して,行名を国語の点数としてあげましょう。
rownames(res_Table)<-“国語の点数”
>res_Table
df        t             p
国語の点数 18 1.346742 0.1947766

4.1つにまとめた変数をcsvファイルとして出力する。

最後に上記の内容をcsvファイルとして出力します。

csvファイルの出力は、write.csv(出力する変数, “ファイル名.csv”) という命令を打てば出力できます。

> write.csv(res_Table,”結果テーブル.csv”)

上記の関数を実行すると,以下のようなファイルが出力されます。

csvファイルの出力結果

以上で報告に必要な結果だけを取り出して出力することができました。

やり方をおさらいすると以下の手順になります。

①分析を行い、出力結果を変数に代入する
②代入された出力結果の中から必要な値を取り出して、別の変数に格納する
③格納された値を1つの変数にまとめる
④1つにまとめた変数をcsvファイルとして出力する。
正直なところ、今回のように変数が一つだけなら、わざわざスクリプトを書いて取り出すよりも直接目視で書き写した方がはやいですが、例えば従属変数が国語だけでなく、数学、日本史、世界史、英語…というようにたくさんある場合にこの取り出し方を知っておくとかなり楽に分析結果を残すことができます。
なお、そのためにはfor文を使った繰り返し処理を組み合わせる必要があるのですが、その点については次回まとめたいと思います。
タイトルとURLをコピーしました