忍者ブログ
×

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

自分でたいしたものでもない関数をつくった
source("https://blog.cnobi.jp/v1/blog/user/89d80905c7038b4121822249e9062fba/1252696384")

# クリップボードからデータを読む。dat <- read.table("clipboard", header=T) と同じ。psychパッケージのread.clipboardの名前を変えただけ
dat <- read.c()


# クリップボードにタブ区切りでデータフレームを書き出す。write.table(dat, "clipboard", sep="\t", row.names=FALSE, quote=FALSE) と同じ
write.c(dat)


# クリップボードにオブジェクトを書き出す。sink("clipboard", split=TRUE) と同じ
# 使った後は必ずsink()とする。
sink.c(obj)


# 変数ごとに度数分布を書く
frq
# frq(1:5, iris)
大本は青木先生のfrequency関数である。LatexのデフォルトをFALSEにしただけ。感謝。


PR
Jonathan Baronの分散分析の解説でSPSSで平方和をタイプ2と指定すると
aov関数での結果と同じになる、と書いてあり、疑問に思ったがよくわからなかったので
Rjpwiki青木先生の掲示板で聞いてみた。感謝。

周辺度数が比例しているとき ("要因"が直交していると) 、タイプ1とタイプ2は同じになるようだ。
Jonathan Baronのもよく読んでみると
The example aov() analysis below can be compared with the results of SPSS using SSTYPE(2)
「以下のaovでの分析例」では…と言っている。私の無知である。ジョナサンッッ!すまないッッ!!
でもその前にSPSS produces the same output as R if the user tells SPSS to calculate the Type I SS (SSTYPE(1)) or Type II SS (SSTYPE(2)) instead of the default SSTYPE(3).って言ってるよね…

平方和の疑問が解決したので、ずっと下書き状態だった混合3要因分散分析のコードを書いておこう。 基本はJonathan Baronのもの。少し原典のコードの誤りを修正した。
#データ生成
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)
## 見やすくした (上記HPのコードを少し修正した。HPのままこぴぺするとエラーになる)
  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))
# aovで分析
aovres <- aov(rt ~ grp*color*shape + Error(subj/(color+shape)), data=Hays.df)
summary(aovres)
## HPの記述は誤差項のカッコをつけわすれている; summary(aov(rt ~ grp*color*shape + Error(subj/shape+color), data=Hays.df))
dat <- read.table("http://personality-project.org/R/datasets/R.appendix1.data", header=T)
colnames(dat) <- c("x", "y") # 列名を短くする
aovres <- aov(y ~ x, dat)
summary(aovres)
pairwise.t.test(dat$y, dat$x, p.adj = "holm")

 # p値だけで自由度もt値も出ないとはどういうことだ

以下参考
http://www.personality-project.org/r/#anova

最近全然やらないので書き忘れていたが、t検定をメモしておこう

対応のない場合 (独立2標本) のときと対応のあるときで記述が違うので注意
等分散を仮定するときはvar.equal=TRUEとする。しないけど

対応のない場合
t.test(y ~ x, dat)
## xが独立変数、yが従属変数。xは因子変数にしなくてもよい

対応のある場合
t.test(datp[,1], datp[,2], paired=TRUE)
## ここで、pairedを指定しないと対応なしの検定になり、同じ結果を返す

## pairedの前で片側検定を指定できる (デフォルトは両側) 。まあ両側やっときゃいいだろう
## "greater"は前者が後者より大きい (datp[,1]>[,2]) 、"less"だとその逆。y~xの形式でどう指定するかは不明。というかできない (たぶん)
通りすがりさん、ありがとうございます
t.test(y~x, dat, alternative="greater")

ところで、グループ1 > グループ2 を検定しているが、
xのカテゴリーに割り当てた数値 (e.g., 0と1) のどちらがグループ1かわからない (たぶん数値の若い方をグループ1としてるんだと思うが)
# これで調べよう
aggregate(dat[,2], list(dat[,1]), mean, na.rm=TRUE) # 平均

## データフレームは以下のような感じ

対応なし
dat
  対応あり
datp
x y   y1 y2
1 7   7 3
1 5   5 2
1 5   5 1
1 9   9 4
1 5   5 1
0 3      
0 2      
0 1      
0 4      
0 1      


# このブログのエディタはエクセルから貼り付けたら勝手にtableつくってくれた。便利
標準誤差の関数を見つけたのでメモしておく

# 関数
se  <-  function(x)
{
y  <-  x[!is.na(x)]  #  remove  the  missing  values
sqrt(var(as.vector(y))/length(y))
}

# sapplyにした
sapply(dat, function(x) sqrt(var(as.vector(na.omit(x)))/length(na.omit(x))))

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