忍者ブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

データフレームの1列を取り出してデータフレームにする
y <- iris[1]
y <- iris[2:4]
## y <- iris[,1]だとベクトルになる
## y <- iris[,2:4]はデータフレームになる

データフレームの一部を取り出してデータフレームにする
yy <- cbind(iris[1], iris[4:5], iris[1:2])
## カンマをつけても同じ yy <- cbind(iris[,1], iris[,4:5], iris[,1:2])

データフレームの1列を取り出してデータフレームにする
onedf <- data.frame("one"=c(df$xxxx))
# 名前をつけないと変数名が"df$xxx"になる

データフレームや行列を結合する
ndf <- cbind(onedf, onedf2)
# 変数名は元のデータフレームについている名前になる
ndf <- cbind(onedf$one, onedf2$one2)
# こうすると変数名がなくなってV1...とかが勝手につく

欠損値を除いたデータフレームをつくる
ndf <- na.omit(df)
ndf[,2] <- factor(ndf[,2])
## 0がカウントされている変数にfactor関数を使うと消える


PR
データフレームを範囲指定して因子変数にする
Rjpwikiより

lapply(dat[4:24], factor)
これはなんかうまくいかない
datf[4:24] <- lapply(dat[4:24], factor)
または
for (i in 4:24) {
datf[,i] <- factor(dat[,i]) # カンマの有無に注意
}
Rで変量要因を投入した分析を
行うにはlme4パッケージのlmer関数を使うらしい
これでランダム切片/傾きモデルを検討できる。
あと、glmmというのもあるらしい

…そのうち調べよう
aov関数の方がいろんな用途に使えて便利そうなのだが、タイプ1平方和を計算する。
なので、carパッケージのAnova関数を勉強しようと思っていた。
タイプIIかタイプIIIかは議論の分かれるところらしく、別に個人的にはタイプIIでもよいと思う。
しかし、上述のとおりaovではタイプIしか出ない…と思っていたのだが、基本に返って (今頃)
Jonathan Baronの解説を読んでみると、SASやSPSSで平方和の指定をデフォルトのタイプ3からタイプ2にすれば、RとSASやSPSSは同じ結果になるよ、と書いてある。
「RでSASやSPSSと同じ出力が欲しい!」という人はそういう回答を求めてないと思うのだが…

ということは、非釣合型の分散分析でもaovでOKじゃないか、と思ったので上記HPの解説とanovakunのタイプ2指定の出力を比較してみた。

上記HP、6.8.1 Example 1: Mixed Models Approach to Within-Subject Factors (Hays, 1988, Table 13.21.2, p. 518)のUnbalanced (Nonorthogonal) Designs セクションより
以下転載

#データ生成
data1<-c(49,47,46,47,48,47,41,46,43,47,46,45,48,46,47,45,49,44,44,45,42,45,45,40,49,46,47,45,49,45,41,43,44,46,45,40,45,43,44,45,48,46,40,45,40,45,47,40)
### 交互作用ありにしたいときは以下を使う (適当にデータをいじったもの)
###data1<-c(49,10,46,47,48,47,41,46,43,5,46,5,48,46,47,45,100,44,44,45,42,45,45,40,49,46,47,45,49,45,41,43,44,46,100,40,45,43,44,45,48,46,40,45,10,45,10,40)
## 見やすくした (上記HPのコードを少し修正した。HPのままこぴぺするとエラーになる)
matrix(data1, ncol= 4, dimnames = list(paste("subj", 1:12), c("Shape1.Color1", "Shape2.Color1" ,"Shape1.Color2", "Shape2.Color2"))) 
## anovakunでも検証するためにデータフレームにした
datkun <- data.frame(matrix(data1, ncol= 4, dimnames = list(paste("subj", 1:12), c("Shape1.Color1", "Shape2.Color1" ,"Shape1.Color2", "Shape2.Color2"))))
# aov用のデータフレーム作成
Hays.df <- data.frame(rt = data1, subj = factor(rep(paste("subj", 1:12, sep=""), 4)), shape = factor(rep(rep(c("shape1", "shape2"), c(12, 12)), 2)), color = factor(rep(c("color1", "color2"), c(24, 24))))
# 非釣合型のデータにするため、grp変数を付け加える
Hays.df$grp <- factor(rep(c(1,1,1,1,1,1,1,1,2,2,2,2), 4))
## anovakun用のデータフレームにも付け加える
grp <- c(1,1,1,1,1,1,1,1,2,2,2,2)
datkun <- data.frame(cbind(grp, datkun))
# aovで分析
summary(aov(rt ~ grp*color*shape + Error(subj/(color+shape)), data=Hays.df))
## HPの記述は誤差項のカッコをつけわすれている; summary(aov(rt ~ grp*color*shape + Error(subj/shape+color), data=Hays.df))
# anovakunで分析
anovakun(datkun, "AsBC", 2, 2, 2, type2=T)

出力は全く同じになった。

結論: もうaovでやろう。lm, glmを使ったとき、気が向いたらAnovaを使おう。あと、そろそろまじめに平方和について勉強しよう
最近知ったのだが、anova関数はそもそも尤度を使ってモデル比較をするための関数らしい。知らないことが多いものだ

誤差項はスラッシュを使うよりも以下の形にしたほうが見やすい出力になる
被験者*対応がある要因をs:aとする。
後は足していくだけ
s:a + s:b + s:a:b

プロフィール
HN:
tao
HP:
性別:
非公開
職業:
会社員
趣味:
アウトドア、自転車、ジョギング、英語学習
自己紹介:
・千葉在住のサラリーマンです。データ分析っぽいことが仕事。
・今年英検1級取得。今はTOEIC高得点を目指して勉強中。
・興味のあることは野球、アウトドア、英語学習、統計、プログラミング、PC関係などなど。
ブログ内検索
freead
順位表
プロ野球データFreak
セリーグ順位表
パリーグ順位表