R関係の忘備録

R関係の忘備録

Rのemfでメタファイルを保存してみる

Rで出力した図をWordでPDFに変換すると,図に余分な線が入る件。

これは色々と困るので対策方法を探してみた。
devEMFパッケージのemf関数で対処できるらしい。
フォントをTimesにもできる。

#以下シンタックス
library(devEMF)
emf(file = "dissociation.emf", family = "Times")
plot(x, y)
dev.off()
#以上シンタックス

devEMFパッケージを読み込む。
emf()のfileでファイル名を付けて,familyでフォントを選ぶ。
そのあと図を描画して,dev.off()。
保存場所は作業ディレクトリ。

たったこれだけ。
あとはWordの「図の挿入」から,emfファイルを選べばOK。
これはありがたい。
emf()と描画の順序に注意。先にemf(),そのあと描画。
0

ANOVA君のGUIが出た件

諸事情あってRをあまり触らない生活が続いています。

そんな中,いつの間にか「ANOVA君のGUI」(井関先生のwebサイトへリンク)が公開されていました。
ANOVA君は,井関先生が開発されているRで分散分析を実施する関数群なんですが,これまではCUIオンリーでした。

Rを使いはじめる上で,どうしてもCUIは敷居が高いです。
慣れれば全然問題ないんですけどね,やっぱり最初はとっつきにくい。
特にSPSSで教育を受けてきた人には,CUIなんて何かの呪文にしかみえないんじゃないでしょうか。

GUIもCUIも一長一短あるでしょうが,統計解析ソフトの選択肢が増えるのは良いことだと思います。
このまま,重回帰分析やSEMもGUIで実行できるようになるんですかね。
そうなれば敷居がグッと下がっていいですね。もはやRの面影がないですけど。
0

Rで再現確率“Prep”を計算してみる

新年明けましておめでとうございます。
今年もよろしくお願いいたします。

福岡教育大の市原学先生の論文の中に登場していた再現確率prep
新指標とか言われると,何かワクワクします。

市原先生の論文(市原ら, 2009)でも,引用元の論文(Sanabria & Killeen, 2007)でも
Excelを使ったら簡単に計算できるよ!って言われてます。

でもやっぱり,Rで計算してみたい。
決して現実逃避ではありません。

そこで,Rで関数を作って
サンプルサイズと効果量dから計算できるようにしてみた。

##Rで再現確率を計算する
#以下,関数
dPrep <- function(n1, n2, d){#n1とn2は各群のサンプルサイズ,dは効果量d。
σr <- (n1 + n2)*sqrt((2 / (n1*n2*(n1+n2-4))))#効果量の標準誤差を計算
pre <- pnorm(d/σr)#ExcelのNORMDISTをRで表現するとこうなる。pre#結果の出力
}
#以上,関数

◯使い方
A群の人数が9名,B群の人数が10名,効果量dが1.00の場合
(市原先生の論文に記載された数値(市原ら, 2009, p.25)を使ってます。)

dPrep(n1 = 9, n2 = 10, d = 1.00)

このように書きます。


そして結果は
[1] 0.9142514

市原先生の論文に掲載されている値と一致します。
(市原先生の論文では小数点以下第二位までしか書かれていないので,小数点以下第三位より下のどこかでずれているかもしれませんが,許容範囲内と思います)

引用文献
市原ら (2009). 心理学研究法の新指標再現確率“prep”の意志決定場面での有用性:
実験データ解析における有意確率pと再現確率prepの比較 人間環境学研究, 6 (2), 23-26.
Sanabria, F., & Killeen, P. R. (2007). Better Statistics for better decisions: Rejecting
null hypotheses statistical tests in favor of replication statistics. Psychology in the  Schools, 44 (5), 471-481.
0

連続量からカテゴリ変数を作ってみる (by R)

これまではExcelのif関数を使ってカテゴリ化してたけど,年末で時間もあることなのでRで実施する方法を探してみた。
そして見つけた方法がこちら。
出典は「Rdfexpand - PukiWiki」 (新規ウィンドウで表示)

cut関数なんて便利な関数があるのね。知らなかった。
上記リンクでは具体的な数値を指定して,「痩せ」「標準」「太め」に分類してたけど
どうやら具体的な数値を指定しなくてもできるっぽい。

以下,Rに標準搭載されているデータセット「iris」を使ってやってみた。

1.irisのSepal.Length変数の平均+1SD以上で高群,平均-1SD以下で低群,残りを中群に分ける。
2.
平均やSDを算出するのではなく,mean関数とsd関数を使って分類する (関数を使うと,コードの使い回しができて楽そうなので)。

data(iris)
data <- iris #irisをdataに入れる
attach(data) 
#カテゴリ変数をデータセットに追加
#カテゴリ変数の名前は「Sepal.Length.HL」
data$Sepal.Length.HL <- cut(
Sepal.Length,#基準にする変数を指定
breaks = c(-Inf, mean(Sepal.Length) - sd(Sepal.Length), mean(Sepal.Length) + sd(Sepal.Length), Inf),#Sepal.Lengthの平均とSDを使って分類の区分を記述。(-∞,平均-1SD,平均+1SD,∞)
right = T,#今回は平均+1SD「以上」を高群にするので,Tにする。
labels = c("低群", "中群", "高群"),#小さい方から順番にラベルを付ける
ordered_result = T)#ordered_result = Tでカテゴリデータに順序関係を意味づけられるらしい
detach(data)
data#ちゃんと反映されてるか確認

以上のような簡単なコードでカテゴリ化できる。
実際にR (ver.3.1.2) で実行したら綺麗に分類できた。

個人的にはExcelはあくまでデータ入力に徹してもらって,
変数の合成とか生成はRでやりたいので,コンソール上で分類ができるのは嬉しい。
特に,下線部は実際の数値ではないから,追加調査で微妙に平均やSDが変化しても書き直す必要がない。

なお,Rのsd関数が出力するのは,不偏分散の正の平方根で,
標本分散の正の平方根よりも若干大きめの値をとる。
やっぱり標本分散の正の平方根の方がいいのだろうか。
0