- 追加された行はこの色です。
- 削除された行はこの色です。
#content
個人メモを整理中です.不適切な記述が多々あるかと思います.お気づきの際は,ishida-m.at.ias.tokushima-u.ac.jp. までご連絡ください.
#contents
* [[ ]] の使い方 [#z6109ecf]
例えば以下のようなデータで ([[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.200)
> z
0.8 1 1.2 1.4 1.6 2.5
0 6 4 2 2 0 0
1 1 1 4 4 4 2
>
> z[[1]] // 一列目の一行目
[1] 6
> z[[2]] // 一列目の二行目
[1] 1
> z[[3]] // 二列目の一行目
[1] 4
> z[[4]] // 二列目の二行目
[1] 1
> z[[5]] // 三列目の一行目
[1] 2
> z[[6]] // 三列目の二行目
[1] 4
>
> z
このとき以下は,行名を
> dimnames(z)[[1]]
[1] "0" "1"
次は列名を表示する.
> dimnames(z)[[2]]
[1] "0.8" "1" "1.2" "1.4" "1.6" "2.5"
今は二次元のデータだから,三次元を指定するとエラーとなる.
> dimnames(z)[[3]]
Error in dimnames(z)[[3]] : subscript out of bounds
* boxplot [#qb7738a5]
例えばカッコーの巣であれば,
> source("/source/statistics/R/book/DAAG/data/cuckoos.R")
> cuckoos
length breadth species id
1 21.7 16.1 meadow.pipit 21
...
120 21.0 16.0 wren 238
> boxplot(length ~ species, data=cuckoos)
>
ちなみに,外れ値はレンジで指定するが,デフォルトでは range = 1.5 となっている。詳細は『データサイエンス入門』p.14
またrug() で,y軸右(side=4)ないし左(side=2)に,プロットに対応したバーコードを表示できる。
ラグプロットについてはここを参照
http://www.okada.jp.org/RWiki/index.php?%A5%E9%A5%B0%A5%D7%A5%ED%A5%C3%A5%C8
ラグプロットについては[[Rjp Wiki:http://www.okada.jp.org/RWiki/index.php?%A5%E9%A5%B0%A5%D7%A5%ED%A5%C3%A5%C8]] を参照せよ
なお boxplot と split, rug を併用した例は [[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.225
* リストの先頭要素を取る [#r796e7ac]
> x > x[1:2]
$string
[1] "a"
$integer
[1] 1 2
> x["string"]
$string
[1] "a"
> x[-1]
$integer
[1] 1 2
$float
[1] 3.14
* qt下側確率 [#uf69c824]
構文は qt(下側確率,自由度) 坪田 p.29
例えば qt(0.05,10) とすると,qt()は分位点関数なので,正規曲線の総面積の累積が5%となる x の座標点
> qt(0.05,10)
[1] -1.812461
を与える。上側は
> qt(0.95,10)
[1] 1.812461
* Excel データの読み込み [#va762f1e]
RODBCパッケージを利用する。
以下は,excelファイルを読み込むだけでなく,更新なども行なう。
library(RODBC)
connExcel
このあと
data
などとクエリーを行なえる。使い終われば
odbcClose(connExcel)
* 新しいグラフィックデバイス [#t51cebd3]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] , p.22,35
X11() を実行。サイズを指定するには X11(width=7.5,height=4)
現在アクティヴなグラフィックデバイスを閉じるには
dev.off()
特定のデバイス, 例えば 3 番を閉じるには
dev.off(3)
デバイスの変更, 例えば 2 番に切替えるなら
dev.set(2)
* 特定の行の取り出し [#l372d554]
例えば [[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] , p.179 の砂糖の平均を,コントロール群だけ取り出すなら
> sugar
weight trt
1 82.0 Control
2 97.8 Control
3 69.9 Control
4 58.3 A
...
12 48.9 C
> mean(sugar$weight[sugar$trt == "Control"])
[1] 83.23333
>
あるいは
> splitplot[1,]
Block Insect Mollusc Rabbit Lime Competition Nutrient Biomass
1 A Sprayed Slugs Fenced Unlimed Control N 7.95395
Block Insect Mollusc Rabbit Lime Competition
1 A Sprayed Slugs Fenced Unlimed Control
...
のようなデータフレームがあるとして,Block が A の項目は
splitplot[splitplot$Block=="A",]
として得られる。
~/mysplus/crawley.s , p.352
次の例は,term.cos で,行名が Berg である行の各列から,0.999 以上の項目があれば取り出す
berg >= 0.999]
# あるマトリックスの,ある名前の行の (1列目の) 数値を見る
stif.keller.without.svd.Doc3[rownames(stif.keller.without.svd.Doc3)=="Gouverneur", 1]
stif.keller.without.svd.Doc3
[rownames(stif.keller.without.svd.Doc3)=="Gouverneur", 1]
* 図における曲線,座標設定などの詳細 [#j0fca1af]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.182
なお plot で引数に type="n"を指定すると,点は刻印されない。これに続いて
points() を実行する。
二つのカテゴリについて,変数 Y と 変数 X の対応をプロットする。[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.134
* aggregate の使い方 [#cbfa9ae1]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.43 例えば
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.43
例えば
yield block shade plot
101 north none north.none
108 north none noth.none
のようなデータがあった時,ブロックとシェードをまとめた平均を作成する場合
aggregate(yield, by=list(block,shade), mean)
block shade meanOFyield
east none 99
他に Maindonals p.225
* rank 落ち [#s5b1c832]
// 例えば一つの水準に三つの項目があり,どれか一つだけを選択する場合,
// 任意に選んだ二つの水準のそれぞれについて,どちらかが選択されているかどうかが分かれば,
// 残り一つの水準について選択されているかどうかは自動的に分かる。
//
// つまり一つの水準の値は,残り2水準の値によって計算される。
// すなわちある水準のベクトルは,残り2水準のベクトルの和で表され,
// それらに従属している。
* ニューラルネットワークその2 [#l4142b36]
豊田「非線形多変量解析」87ページを実行するには
data(iris)
library(nnet)
iris.2 # このままだと元のデータフレムの情報として,Species 変数のレベルが三つになっている。
levels(iris.2$Species)
#[1] "setosa" "versicolor" "virginica"
そこで三つ目のレベルを欠損値とする。これによりレベルは二つとして扱われる。
levels(iris.2$Species)[3]
iris.nnet iris.nnet.pre table(iris.2$Species, iris.nnet.pre)
summary(iris.nnet)
* 決定木でラベルを表示する [#hdf800ef]
text 関数が有効な時と,有効でない時がある。これは,データフレームの作成方法に問題がある。
有効
senkei senkei.tree plot(senkei.tree,type="u")
text(senkei.tree)
summary(senkei.tree)
無効
base base1 <- base.tree + man + mit + nicht
+noch+nun+nur+oder+schon+sich+so+und+zu, data=base1)
plot(base.tree,type="u")
text(base.tree)
summary(base.tree)
ところが,一度
text(base.tree,labels=col.names(base.tree))
Error in text(xy.coords(x, y, recycle = TRUE), labels, adj, pos, offset, :
Error in
text(xy.coords(x, y, recycle = TRUE), labels, adj, pos,
offset, :
invalid pos value
In addition: Warning message:
NAs introduced by coercion
を実行 (エラーで無表示となる)後,再度
text(base.tree)
を行なうと,ラベルが付与された。
* 多重共線性の発見 [#p762e5ab]
朝野 p.108より
説明変数の相関行列 R について R の固有値を求める。このとき固有値の積は,R の行列式に一致する。偏回帰係数の分散は,固有値の逆数の和と一致する。
* 自己組織化マップ [#pffef85e]
http://www.okada.jp.org/RWiki/index.php?cmd=read&page=R%A4%C7SOM%28%BC%AB%B8%CA%C1%C8%BF%A5%B2%BD%A5%DE%A5%C3%A5%D7%29&word=som
[[Rjp Wiki:http://www.okada.jp.org/RWiki/index.php?cmd=read&page=R%A4%C7SOM%28%BC%AB%B8%CA%C1%C8%BF%A5%B2%BD%A5%DE%A5%C3%A5%D7%29&word=som]] を参照しました.
#
library(som)
library(class)
ex gr#ex[1,]
testplot(test)
# 六角形配置にしたがって円を配置する (下記の 12*8は xdim, ydimに対応)
symbols(test$grid$pts[,1],test$grid$pts[,2],circles=rep(0.5,8*12),inches=F,add=T)
symbols(test$grid$pts[,1],test$grid$pts[,2],
circles=rep(0.5,8*12),inches=F,add=T)
# knn1を使って ex 中のデータが SOMで割り当てた test$code (8*12ある)のどれに近いのかを調査
bins # exから抜粋した値がどこに割り当てられるのかを示す。
# 全てをプロットすると収集がつかなくなるので seq(101, 1000, by=25)だけをプロットしてみる
# 全てをプロットすると収集がつかなくなるので
seq(101, 1000, by=25)だけをプロットしてみる
text(test$grid$pts[bins[seq(101,1000,by=25)],]
+ rnorm(36,0,0.2),col="blue",as.character(seq(101,1000,by=25) ))
+ rnorm(36,0,0.2),col="blue",
as.character(seq(101,1000,by=25) ))
* データフレームの操作 [#mf1618ef]
stifstom4[stifstom4
stifstom4[,stifstom4[,c(4:16)]
stifstom4[,c(4:16)][stifstom4[,c(4:16)] #stifstom4[,c(4:16)][stifstom4
stifstom4[,c(4:16)][stifstom4[,c(4:16)]
#stifstom4[,c(4:16)][stifstom4
stifstom4[stifstom4 > 1]
* Dalgaard の本のデータ解析 [#c1ad686c]
research/statistics/Intro.R.R
* matrixの作り方 [#n6b7dd23]
例えば自然科学の統計学 p.38 の最小二乗法の計算
x A B X t(X) %*% X
* 行列式を使った方程式の解 [#l7fd71d4]
自然科学の統計学 p.67
3x - 2y = 7
x + 3y = -5
は R で以下のように解く
x1 X #X = matrix(c(3,-2,1,3),ncol=2,byrow=T) でももちろん良い。
Y = c(7,-5);Y
solve(X) %*% Y
# あるいは
solve(X,Y)
* 松原望 蟻が黒い確率 [#g145d398]
松原望『実践としての統計学』 p.16, p.163, p.222
B1 = 100% 蟻は黒い, とする。
B1 = 100% 蟻は黒い, とする。
B2 = 99 % の蟻は黒い, とする。そしてそれぞれの確率を
p(B1) = p(B2) = 0.5
B2 = 99 % の蟻は黒い, とする。そしてそれぞれの確率を
p(B1) = p(B2) = 0.5
すると
p(D|B1) = 1, 蟻は100%黒いという仮定が成立して,その時に黒い蟻を見つける確率 。
p(D|B2) = 0.99, 蟻は99%黒いという仮定が成立して,その時に黒い蟻を見つける確率。
p(D|B1) = 1, 蟻は100%黒いという仮定が成立して,その時に黒い蟻を見つける確率 。
p(D|B2) = 0.99, 蟻は99%黒いという仮定が成立して,その時に黒い蟻を見つける確率。
このとき p(B1|D) , 黒い蟻を見つけた時に,B1 が正しい確率は,
p(B1|D) = p(B1 * D) / p(D)
= p(B1) * p(D|B1) / p(B1) * p(D|B1) + p(B2) * p(D|B2)
p(B1|D) = p(B1 * D) / p(D) = p(B1) * p(D|B1) / p(B1) * p(D|B1) + p(B2) * p(D|B2) = 0.5 * 1 / ( 0.5 * 1 + 0.5 * 0.99)
= 0.5 * 1 / ( 0.5 * 1 + 0.5 * 0.99)
と計算される。
* 作業ディレクトリにあるすべてのオブジェクトの削除 [#u8b09aa4]
remove(objects()) # S-Plus
rm(list = ls()) # R
* 図のサイズ調整 [#ve59356c]
# dev.off()
# plot.new() 場合によっては描画前に必要となる
par.old par.old plot(x,y)
par(par.old)
Dalgaard p. 28, 30, 71
Venables p. 84
これに外周を加えるのが
oma
* ブラウザからヘルプを見る [#je7d86ba]
help.start()
* R のライブラリ類の場所 [#f343fc64]
/usr/local/lib/R/library/
* データテーブルを並び替える stab [#u850d32b]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.37 以下のようなデータがあった場合
> jobs
BC Alberta Prairies Ontario Quebec Atlantic Date
1 1752 1366 982 5239 3196 947 95.00000
2 1737 1369 981 5233 3205 946 95.08333
3 1765 1380 984 5212 3191 954 95.16667
...
Jobs
によって,次のようなデータに変更できる。
> Jobs
values ind
1 1752 BC
2 1737 BC
3 1765 BC
...
142 944 Atlantic
143 943 Atlantic
144 942 Atlantic
* abline と spline, lines の違い [#p65d45d0]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] Chapter3, p.53, p.54, p.55
abline(x,y) は切片が x 傾きが y の直線を引く
splineは lines と組み合わせて,曲線
lines(spline(x,y))
他に
lines(lowess(x,y),) p.35
も使われる。
* pretty, axis の使い方 [#n74c2833]
pretty は,第一引数をもとに,第二引数で指定された数のベクトルを作成する。
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.59, p.117
* set.seed [#peb6a616]
set.seed(x) は,R起動には,x をランダムな値に設定して生成される乱数のリストである。
したがって,同じ x の値で実行すれば,同じ乱数のセットが得られるので,
結果として,同じ結果が得られる。[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.64
* split [#s1d4876e]
第一引数で指定したベクトルを,第二引数で指定したカテゴリーで,リストに分ける。
Maindpnald p. 134, p.213
* text関数の使い方 [#a0c82837]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.134 より
plot(weight.split$hb ~ volume.split$hb,
pch=16, xlim=range(volume), ylim = range(weight),
ylab="Weight (g)", xlab="Volume (cc)")
text(weight.split$hb ~ volume.split$hb, labels=c(1:7), adj=c(1.5,-1.5))
text(weight.split$hb ~ volume.split$hb, labels=c(1:7),
adj=c(1.5,-1.5))
ここで adj は(x,y)点に対して x がマイナスなら,左に,また y がマイナスなら上にテキストが付記される。
* 回帰分析で,変数間の相関係数を出すオプション [#f7ea1c56]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] # p.137
allbacks0.lm summary(allbacks.lm, corr=T)
また個々のサンプルを抜いた場合の影響度を調べるには [[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.139
round(coef(allbacks.lm0), 2)
round(lm.influence(allbacks.lm0)$coef, 2)
* 変数間の線型性を求める alias [#j5f121ed]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.166
* 分散分析,回帰分析で base ラインを変更する relevel [#sc3be186]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.90 p.178 p.210
* option の使い方 [#e595e701]
Maindonals p.178
* 散布図の外にプロットを打つ points(, ..., xpd =T) [#cf96f320]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.202
* nlme マルチレベルでの固定効果と,ランダム効果 [#w367daae]
[[Maindonald 旧版:http://wwwmaths.anu.edu.au/~johnm/r-book.html]] p.226
science.lme summary(science.lme)$tTable
* カイ二乗検定における有意確率(両側) [#teb7b8ff]
青木先生のサイト
http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/one-two.html
* 浜田知久馬 ロジスティック回帰分析 [#rebda9b4]
hamada.R を参照 p.141
x y z # z
# x y
# [1,] 95 5
# [2,] 90 10
#
fac # fac.z fac.z gl(2,1,2,fac); fac.z
# fac.z
# [1] A B
# Levels: A B
test.glm glm(z ~ fac.z, family=binomial)
summary(test.glm)
summary(test.glm)$coef[1,3]^2 # χ二乗
summary(test.glm)$coef[2,3]^2 # χ二乗
#exp(abs(summary(test.glm)$coef[2,1]))
exp(summary(test.glm)$coef[2,1])
anova(test.glm, test="Chisq")
fisher.test(z)
# p.143
x y z #> z
# x y
#[1,] 5 95
#[2,] 2 48
#[3,] 8 42
fac fac.z #> fac.z
#[1] A B C
#Levels: A B C
test.glm summary(test.glm)
summary(test.glm)$coef[1,3]^2 # χ二乗
summary(test.glm)$coef[2,3]^2 # χ二乗
summary(test.glm)$coef[3,3]^2 # χ二乗
exp(summary(test.glm)$coef[2,1])
exp(summary(test.glm)$coef[3,1])
anova(test.glm, test="Chisq")
# p.144
x y z
fac
test.glm summary(test.glm)
summary(test.glm)$coef[1,3]^2 # χ二乗
summary(test.glm)$coef[2,3]^2 # χ二乗
anova(test.glm, test="Chisq")
* array の作り方 [#p6acf9ec]
Meyer English Corpus Linguistics p.134
Type Form 1-4 Words 5 or more Words
PT Simple NP 216 23
PT Gen. NP 0 0
PT Post.Mod. 1 7
APOS Simple NP 52 10
APOS Gen. NP 18 9
APOS Post.Mod. 12 97
Meyer array(c(
216, 0, 1,
23, 0, 7,
52, 18, 12,
10, 9, 97),
dim = c(3,2, 2),
dimnames =
list(
Form = c("SimpleNP", "GenNP", "PostMed"), # = c(1)# = c(1)
Length = c("lessWords","moreWords"), # = c(2)
Type= c("PT", "AP") # = c(3)
Form = c("SimpleNP", "GenNP", "PostMed"),
# = c(1)# = c(1)
Length = c("lessWords","moreWords"),
# = c(2)
Type= c("PT", "AP")
# = c(3)
))
class(Meyer) ftable(Meyer)
c(3, 2, 2) で 3 行 2 列 2 層,入力順に,層(行→列)→層(行→列)と埋める
> Meyer
, , Type = PT
Length
Form lessWords moreWords
SimpleNP 216 23
GenNP 0 0
PostMed 1 7
, , Type = AP
Length
Form lessWords moreWords
SimpleNP 52 10
GenNP 18 9
PostMed 12 97
> ftable(Meyer)
Type PT AP
Form Length
SimpleNP lessWords 216 52
moreWords 23 10
GenNP lessWords 0 18
moreWords 0 9
PostMed lessWords 1 12
moreWords 7 97
>
####################
Meyer array(c(
216, 23,
0,0,
1,7,
52,10,
18,9,
12,97),
dim = c(2,3, 2),
dimnames =
list(
Length = c("Less", "More"),
Form = c("SNP", "GNP","PMD"),
Style= c("PT", "AP")
))
c(2, 3, 2) で2行3列,入力順に行→列と埋める
2*3 を埋め尽くすと,次に次元に移り,2 * 3 を再度埋めていく
> Meyer
, , Style = PT
Form
Length SNP GNP PMD
Less 216 0 1
More 23 0 7
, , Style = AP
Form
Length SNP GNP PMD
Less 52 18 12
More 10 9 97
class(Meyer) # "array"
class(Meyer)<- "table"
class(Meyer) # "table"
アレイをテーブルに変更する
> ftable(Meyer)
Style PT AP
Length Form
Less SNP 216 52
GNP 0 18
PMD 1 12
More SNP 23 10
GNP 0 9
PMD 7 97
* ログリニア分析 [#q5ce84c6]
始めに[[ここ>#matsuda121]]を参照.[[ここ>#loglin2]と[[ここ>#loglm]]も.[[ここ>#social.mobility2]も.さらにMeyer.Rを参照。
Meyer.Howa
ここで list(c(1,2,3)) は list(1:2:3)としても同じで,三次交互作用までを含んだモデル。
list(c(1,3), 2) ならば,1,3 相互の交互作用を含めるが,
2 については,1,3 とは独立の因子とみなす。
list(1,2,3) とすれば,すべてが独立のモデルである。
なお階層モデルで三次の交互作用までを含むということは,2 次,また単独の効果を含む。柳井/緒方『統計学-基礎と応用』,p.150
飽和モデルの結果をみる
# meyer p.135 表,3次の効果を含む飽和モデル,自由度0で説明力は無い
Meyer.Howa$lrt # 尤度比
1-pchisq(Meyer.Howa$lrt,Meyer.Howa$df) # 有意度
Meyer.Howa$pearson# χ二乗値
1-pchisq(Meyer.Howa$pearson,Meyer.Howa$df) # 有意度
Meyer.Howa$df # 自由度
Meyer.Howa$margin # 選択されたモデル。この場合は飽和モデル
#[[1]]
#[1] "Form" "Length" "Type"
###################
# meyer p.135 表,3次の効果を除いた場合
# meyer p.135 表,3次の効果を除いた場合
# K = 2
Meyer.123<- loglin(Meyer, list(c(1,2),c(2,3),c(1,3)), param=T)
#c(1,2,3) を除いたモデルの適合度は 0.926 ,つまり有意でないので,3次の交互作用を除いたモデルは適合している。
Meyer.123<- loglin(Meyer, list(c(1,2),c(2,3),c(1,3)),
param=T)
#c (1,2,3) を除いたモデルの適合度は 0.926 ,つまり有意でないので,3次の交互作用を除いたモデルは適合している。
すなわち3次の適合度は省いて構わない。
Meyer.123$lrt #0.1530465
1-pchisq(Meyer.123$lrt,Meyer.123$df) #0.9263314
1-pchisq(Meyer.123$pearson,Meyer.123$df)
Meyer.123$pearson
Meyer.123$df # 2
Meyer.123$margin
#[[1]]
#[1] "Form" "Length"
#[[2]]
#[1] "Length" "Type"
#[[3]]
#[1] "Form" "Type"
############ meyer p.135 頁の表, 3次に加えて,さらに2次を全て省いた場合
# meyer p.135 頁の表, 3次に加えて,さらに2次を全て省いた場合
# K = 2
Meyer.1.2.3<- loglin(Meyer, list(1,2,3), param=T)
Meyer.1.2.3$lrt # 488.0099
1-pchisq(Meyer.1.2.3$lrt,Meyer.1.2.3$df) # 0
1-pchisq(Meyer.1.2.3$pearson,Meyer.1.2.3$df)
Meyer.1.2.3$pearson
Meyer.1.2.3$df # 7
Meyer.1.2.3$margin
#[[1]]
#[1] "Form"
#[[2]]
#[1] "Length"
#[[3]]
#[1] "Type"
* loglm によるログリニア,対数線形分析 [#ge2b6b48]
&aname(loglm);
始めに[[ここ>#matsuda121]]を参照.[[ここ>#loglin2]]も.[[ここ>#social.mobility2]]も
loglm 使うためにMASSパッケージを取り込み
library(MASS)
初めに飽和モデルを分析する。
Meyer.loglm<- loglm(~Length*Form*Type, data=Meyer)
次に,AIC が最小になるモデルを選び出す。
# 飽和モデルから,効果を減らしてく
Meyer.loglm<- loglm(~Length*Form*Type, data=Meyer)
anova(Meyer.loglm)
Meyer.loglm2<- update(Meyer.loglm, .~. -Form:Type)
anova(Meyer.loglm2)
stepAIC(Meyer.loglm, ~.^2, data=Meyer)
#######
Start: AIC= 24
~Length * Form * Type
Df AIC
- Length:Form:Type 2 20.153# Length:Form:Type を省いた方が小さい
- Length:Form:Type 2 20.153
# Length:Form:Type を省いた方が小さい
<none> 24.000
Step: AIC= 20.15
~Length + Form + Type + Length:Form + Length:Type + Form:Type
Df AIC
- Length:Type 1 19.978# Length:Type を省いた方が小さい
- Length:Type 1 19.978
# Length:Type を省いた方が小さい
<none> 20.153
+ Length:Form:Type 2 24.000
- Length:Form 2 145.147
- Form:Type 2 153.044
Step: AIC= 19.98
~Length + Form + Type + Length:Form + Form:Type
Df AIC
<none> 19.978 # これ以上 AIC は小さくならない
+ Length:Type 1 20.153
- Length:Form 2 255.045
- Form:Type 2 262.943
Call:
loglm(formula = ~Length + Form + Type + Length:Form + Form:Type,
loglm(formula = ~Length + Form + Type +
Length:Form + Form:Type,
data = Meyer, evaluate = FALSE)
Statistics:
X^2 df P(> X^2)
Likelihood Ratio 1.977911 3 0.577004
Pearson NaN 3 NaN
>
#####x よって最適なモデルは
# ~Length + Form + Type + Length:Form + Form:Type
#####
別データによる分析
それぞれの効果の推定値には,ダミーコーディングによる場合と,ANOVAコーディングによる場合がある。
rocket<- array(data=c(5,7,8,9,3,21,7,9,6), dim=c(3,3))
dimnames(rocket)<- list(c("A1","A2","A3"),c("B1","B2","B3"))
rocket
# モデル選択
model0<- loglin(rocket, list(c(1, 2)), param=TRUE)
model1<- loglin(rocket, list(1, 2), param=TRUE)
model0
model1
p0<- 1-pchisq(model0$lrt, model0$df)
p1<- 1-pchisq(model1$lrt, model1$df)
p0
p1
AIC0<- model0$pearson-2*model0$df
AIC1<- model1$pearson-2*model1$df
AIC0
AIC1
# ここでは飽和モデルを採用し分析してみる
rocket.df<- as.data.frame.table(rocket)
colnames(rocket.df)<- c("kozoku","yoko","dosu")
> loglin(rocket,margin=list(c(1,2),c(1),c(2)),param=TRUE)
2 iterations: deviation 0
$lrt
[1] 0
$pearson
[1] 0
$df
[1] 0
$margin
$margin[[1]]
[1] 1 2
$margin[[2]]
[1] 1
$margin[[3]]
[1] 2
$param
$param$"(Intercept)"
[1] 1.990005
$param$"1"
A1 A2 A3
-0.07248058 -0.24275578 0.31523636
$param$"2"
B1 B2 B3
-0.11174159 0.12344831 -0.01170672
$param$"1.2"
B1 B2 B3
A1 -0.1963447 0.1562521 0.04009266
A2 0.3104027 -0.7720850 0.46168230
A3 -0.1140580 0.6158330 -0.50177496
# ダミーコーディングによる効果の推定値
glm0<- glm(dosu ~ kozoku * yoko, data = rocket.df, family = poisson)
glm0<- glm(dosu ~ kozoku * yoko, data = rocket.df,
family = poisson)
anova(glm0, test = "F")
summary(glm0)
#########
> summary(glm0)
Call:
glm(formula = dosu ~ kozoku * yoko, family = poisson, data = rocket.df)
glm(formula = dosu ~ kozoku * yoko, family = poisson,
data = rocket.df)
Deviance Residuals:
[1] 0 0 0 0 0 0 0 0 0
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.60944 0.44721 3.599 0.000320 ***
kozokuA2 0.33647 0.58554 0.575 0.565538
kozokuA3 0.47000 0.57009 0.824 0.409689
yokoB2 0.58779 0.55777 1.054 0.291970
yokoB3 0.33647 0.58554 0.575 0.565538
kozokuA2:yokoB2 -1.43508 0.88730 -1.617 0.105800
kozokuA3:yokoB2 0.37729 0.69551 0.542 0.587492
kozokuA2:yokoB3 -0.08516 0.77254 -0.110 0.912227
kozokuA3:yokoB3 -0.62415 0.79657 -0.784 0.433303
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 2.0874e+01 on 8 degrees of freedom
Residual deviance: -4.4409e-16 on 0 degrees of freedom
AIC: 52.681
Number of Fisher Scoring iterations: 3
>
#######
# ANOVA コーディング効果の推定値
loglm(dosu ~ kozoku * yoko, data = rocket.df, family = poisson)$param
loglm(dosu ~ kozoku * yoko, data = rocket.df,
family = poisson)$param
loglin(rocket,margin=list(c(1,2),c(1),c(2)),param=TRUE)
#######
> loglm(dosu ~ kozoku * yoko, data = rocket.df, family = poisson)$param
> loglm(dosu ~ kozoku * yoko, data = rocket.df,
family = poisson)$param
$"(Intercept)"
[1] 1.990005
$kozoku
A1 A2 A3
-0.07248058 -0.24275578 0.31523636
$yoko
B1 B2 B3
-0.11174159 0.12344831 -0.01170672
$kozoku.yoko
yoko
kozoku B1 B2 B3
A1 -0.1963447 0.1562521 0.04009266
A2 0.3104027 -0.7720850 0.46168230
A3 -0.1140580 0.6158330 -0.50177496
########
> loglin(rocket,margin=list(c(1,2),c(1),c(2)),param=TRUE)
2 iterations: deviation 0
$lrt
[1] 0
$pearson
[1] 0
$df
[1] 0
$margin
$margin[[1]]
[1] 1 2
$margin[[2]]
[1] 1
$margin[[3]]
[1] 2
$param
$param$"(Intercept)"
[1] 1.990005
$param$"1"
A1 A2 A3
-0.07248058 -0.24275578 0.31523636
$param$"2"
B1 B2 B3
-0.11174159 0.12344831 -0.01170672
$param$"1.2"
B1 B2 B3
A1 -0.1963447 0.1562521 0.04009266
A2 0.3104027 -0.7720850 0.46168230
A3 -0.1140580 0.6158330 -0.50177496
なおこのデータ,またコーディングについては
http://www.sci.kagoshima-u.ac.jp/~ebsa/matsuda01/pdf/ch03-01.pdf
の表3.2「ロケットの発射試験」
この例題の飽和モデルによる推定値は
http://www.sci.kagoshima-u.ac.jp/~ebsa/matsuda01/pdf/ch03-04.pdf
の表3.11にダミーコーディング、表3.12にANOVAコーディング
なお SPSS で出力される Partial association は「標準化係数(標準効果)」のこと。
http://www.okada.jp.org/RWiki/index.php?
cmd=read&page=%A3%D1%A1%F5%A3%C1%20%28%BD%E9%B5%E9%BC%D4%A5%B3%A1%BC%A5%B9%29&word=loglin
以上は[[Rjp Wiki:http://www.okada.jp.org/RWiki/index.php?cmd=read&page=%A3%D1%A1%F5%A3%C1%20%28%BD%E9%B5%E9%BC%D4%A5%B3%A1%BC%A5%B9%29&word=loglin]]を参照しました
* LaTeX でテーブル 1 [#h6be20ef]
library(xtable)
x<- matrix(1:24,4,6)
mytable<- xtable(x)
print(mytable)
* LaTeX でテーブル 2 [#s319ea2e]
http://www.okada.jp.org/RWiki/index.php?cmd=read&page=LaTeX&word=TeX%20#content_1_0
* 行列のランクを求める。 [#s806caeb]
qr(X)$rank # 舟尾 p.61
* ベクトルのノルム [#b92c3db0]
渋谷 柴田 p.37
norm if(p=="inf") return (max(abs(x)))
sum(abs(x)^p)^(1/p)
}
これは sqrt(t(x) %*% x) に等しい。
* read.csv 読み込み時に変数名を付加する [#o54b5cb7]
例えば,以下のようにする場合
#x<- read.csv("/research/corpus/file/anborgia.nr.csv",header=F,row.names=1);x
# colnames(x)<- c("line");x
以下のように実行しても構わない。ただし元データが2列で,その一列目を行名と指定している。
その関係で,col.namesの引数は二ついる。
x<- read.csv("/home/ishida/research/corpus/file/anborgia.nr.csv",
header=F,row.names=1,col.names=c("","line1"));x
* 生データから頻度表を作成し,適合度の検定を行なう [#zaf0a874]
まず
> jena > jena
freq
1 15
2 10
3 21
4 20
5 30
...
> kanzel > kanzel
freq
1 19
2 38
3 4
4 23
5 29
...
table( factor(cut(buntyo$V1, breaks=c(0, 5, 10, 15, 25, 35, 40))) )
などとする.
ここでは 0 より大きく 5 以下,5 より大きく10以下,などを区間としている.
としてデータを読み込み,これに頻度カテゴリを表す列を追加する。
tb jena$fac
> jena
freq fac
1 15 (11,16]
2 10 (6,11]
3 21 (16,22]
4 20 (16,22]
5 30 (22,31]
...
> kanzel
freq fac
1 19 (16,22]
2 38 (31,92]
3 4 (0,6]
4 23 (22,31]
5 29 (22,31]
ここで table(kanzel$jena)とすれば,各カテゴリの頻度が求める。
さて,ここでこの二つの頻度について適合度の検定を行なうには,
test chisq.test(test)
とする。
* 図に凡例を付記する [#wa609321]
legend(x軸, y軸, ラベルの指定, fill= 色の指定, pch = シンボル | lty = 線種)
labs cols mypch
legend(7, 10, labs, pch = mypch, col=cols)
x,y 軸は locator(1)として調べれば良い。あるいは引数として与える。
[[John Fox:http://socserv.mcmaster.ca/jfox/]], p.138
legend(locator(1), c('high', 'low'), lty = c(1,3), lwd =c(3,3), pch = c(19,1))
Wood, p.36
legend("topright", legend = levels(water$location), pch = c(1,2), bty = "n")
S-Plus であれば,marks 。
* 重複を取る [#l940a327]
例:/home/ishida/research/corpus/file.old/bak/file/writers19.R を参照
ここで unique は重複を取る。
legend(-4.3, 4.5, unique(writers.name),
fill=(as.integer(unique(writers.name))), text.width=1)
* 行列・配列の特定の次元を軸にあるベクトルを順に操作する、関数 sweep() [#x7d39075]
> x = matrix(1:16, 4,4)
> x
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> y= 1:4 # sweep されるベクトル
> sweep(x,1,y) # x の各列から y を引き去る(既定動作)
[,1] [,2] [,3] [,4]
[1,] 0 4 8 12
[2,] 0 4 8 12
[3,] 0 4 8 12
[4,] 0 4 8 12
> sweep(x,2,y) # x の各行から y を引き去る(既定動作)
[,1] [,2] [,3] [,4]
[1,] 0 3 6 9
[2,] 1 4 7 10
[3,] 2 5 8 11
[4,] 3 6 9 12
> sweep(x,1,y, "*") # x の各列に y を掛ける
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 4 12 20 28
[3,] 9 21 33 45
[4,] 16 32 48 64
* updateの使い方 2005 /06 /04 [#l829ce4d]
例えば
writers.lda table(writers$writer,predict(writers.lda)$class)
と解析した結果と,und を取り除いた結果
writers.lda.und table(writers$writer,predict(writers.lda.und)$class)
を比較する。なお以下はエラーとなる
#writers.lda.step #anova(writers.lda , writers.lda.und)
* 判別分析における交差妥当化 2005/06/04 [#ub22b09e]
例えば
writers.lda #table(writers$writer,writers.lda$class) エラー
table(writers$writer,predict(writers.lda)$class)
#cross validation
writers.lda.cv CV=T)
table(writers$writer,writers.lda.cv$class)
#table(writers$writer,predict(writers.lda.cv)$class) エラー
* グラフに直線を引く 2005 / 06 / 14 [#j93a5c1d]
plot(x ~ y)
kaiseki.lm(x ~ y)
abline(kaiseki.lm[1,1], kaiseki.lm[3,1])
として切片,傾きを指定しても,また
abline(kaiseli.lm)
とするのも可能。
* 分散分析の結果に summary.lm を実行 2005/06/15 [#ff0ccd41]
Crawely p.163
分散分析で,平均値に差があるかを確認し,さらに,要因レベルの効果差を見るには,
summary.lm(aov(ozone ~ garden))
などを実行する。
* quartile と quantile percentile の使い分け 2005/06/15 [#odf1c97d]
Dalgaard p.58
//0.25, 0.5, 0.75 点の三つを three quartile といい,
//これに min, max を含めてそれぞれを quantile という。
Crawely p.197
//50% - 75% quartile と範囲を指定
//75% quantile などと分位点を指定
//
//quantile は,四分位点を一般化した p分位点,すなわち,100pパーセント点(0
* Boxplot での notch=T オプション 2005/06/15 [#aee66ae1]
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.167
//ノッチは,メディアンの中心線から,上下に同じ長さの裾を伸ばすが,それぞれの限界値で折り曲がることによって,幅を示す。
* treatment.control の見方 2005/06/16 [#i78e2ed7]
[[Crawley Statistics Using R:http://www.amazon.co.jp/Statistics-Introduction-Michael-J-Crawley/dp/0470022981/]] p.174, [[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.287
treatment.control では,各要因の各レベルの効果を,
その要因の切片(基軸)であるレベルと比較して判断する。
したがって,基軸以外のレベルの相互の有意差は表示されていない。
基軸以外のレベル相互の比較
要因Aと他要因 BCD全体との差,BCD 内の差を一度に検定 2006 03 20
[[John Fox:http://socserv.mcmaster.ca/jfox/]], p.142 - 143.
他に[[ここ>#ContrastsMatrix]]
* loglin2 2*2 分割表の Likelihood ratio を求める [#u3b5389d]
&aname(loglin2);
始めに ここを参照
こことここも
またここも
meyer p.132 の例より
lessWords moreWords
USA 57 2
Phil 71 12
NZ 66 16
GB 23 0
meyerP.132 dimnames(meyerP.132)
model0 summary(model0)
# anova(model0) # これは用意されていない
model1 summary(model1)
model1$lrt
#P値は
1- pchisq(model1$lrt, model1$df)
1- pchisq(model1$pearson, model1$df)
* コレスポンデンス分析 [#q882e6d5]
R multiv パッケージのコレスポンデンス分析で出力される
行座標 $rproj, 列座標 $cproj はデフォルトでは,求められた x,y に単相関係数を乗じている。(言い方を変えると,固有値を平方根を乗じている)
参照 高橋信「Excelによるコレスポンデンス分析」, p.127
/home/research/statistics/correspondence.R を参照
#高橋信「Excelによるコレスポンデンス分析」
Z 13,8,15,16,
18,11,14,8), ncol=4, byrow=T)
#行ラベルとして使用する第1列をrowvarに代入
Z.rowvar<- c("M","H","C")
#rowvarの値を行ラベルとして読み込む
Z.colvar
rownames(Z) colnames(Z)
> Z
A B C D
M 10 19 13 5
H 13 8 15 16
C 18 11 14 8
Z.diagC #> Z.diagC
# [,1] [,2] [,3] [,4]
#[1,] 41 0 0 0
#[2,] 0 38 0 0
#[3,] 0 0 42 0
#[4,] 0 0 0 29
#>
Z.diagR #> Z.diagR
# [,1] [,2] [,3]
#[1,] 47 0 0
#[2,] 0 52 0
#[3,] 0 0 51
#>
Z.diagR.sqrt # [,1] [,2] [,3]
#[1,] 6.855655 0.000000 0.000000
#[2,] 0.000000 7.211103 0.000000
#[3,] 0.000000 0.000000 7.141428
#>
Z.solve Z.eigen
#$values
#[1] 1.00000000 0.07629421 0.01828369
#$vectors
# [,1] [,2] [,3]
#[1,] -0.5597619 0.74374060 0.3653992
#[2,] -0.5887841 -0.66725782 0.4561802
#[3,] -0.5830952 -0.04021102 -0.8114081
#>
# [,1] [,2] [,3]
# [1,] 0.3579767 0.2947642 0.3186919
# [2,] 0.2947642 0.3844402 0.3385965
# [3,] 0.3186919 0.3385965 0.3521610
# 固有値 1 と,対応する固有ベクトルは仮定
# 平均0,分散1に反する
# p.121 # x, y が求まる,以下はxのみ
Z.kai.X [,1] [,2] [,3]
[1,] -1 1.32867325 -0.6527762
[2,] -1 -1.13328105 -0.7747835
[3,] -1 -0.06896133 1.3915534
# 以下は Y のみ
Z.kai.Y # [,1]
# [1,] -0.23728726
# [2,] 1.46910930
# [3,] -0.05964337
# [4,] -1.50318462
Z.kai.Y # [,1]
# [1,] 1.5238380
# [2,] -0.6410599
# [3,] -0.1102451
# [4,] -1.1547168
# 固有値の平方根 は単相関係数
sqrt(Z.eigen$values)
# [1] 1.0000000 0.2762141 0.1352172
# p.127
Z.kai[,2] * sqrt(Z.eigen$values)[2]
# [1] 0.36699824 -0.31302816 -0.01904809
Z.kai[,3] * sqrt(Z.eigen$values)[3]
# [1] -0.08826657 -0.10476405 0.18816195
#(solve(Z.diagR.sqrt, sqrt(150) * Z.eigen$vectors)) %o% sqrt(Z.eigen$values)
> library(multiv)
> Z.results> Z.results
$evals
[1] 0.07629421 0.01828369
$rproj
Factor1 Factor2
[1,] 0.36699824 -0.08826657
[2,] -0.31302816 -0.10476405
[3,] -0.01904809 0.18816195
$cproj
Factor1 Factor2
[1,] -0.06554208 0.20604911
[2,] 0.40578865 -0.08668233
[3,] -0.01647434 -0.01490704
[4,] -0.41520073 -0.15613757
$rcntr
Factor1 Factor2
[1,] 0.553150080 0.1335166
[2,] 0.445232993 0.2081003
[3,] 0.001616926 0.6583831
$ccntr
* 図の保存 eps 形式 2005 06 24 [#o1d0f24b]
dev.copy2eps(file="log.eps")
* 対数尤度比をコーパスで求める場合 2005 07 01 [#j65238fa]
Dunning の式は,Oakes p.172 にまとめられている。必要となるのは a,b,c,d,と
当該コーパスにおける総語数 N (結局 a+b+c+d に等しい)。
a = あるキーワードにたいして設定したスパンの内部に,その共起語が現れた回数
b = キーワードにたいして,その共起語以外の語がスパンに現れた回数
c = キーワード以外の語にたいして,その共起語がスパンに現れた回数
d = キーワード以外の語にたいして,その共起語以外の語が現れた回数
* 東大「人文社会科学の統計学」,飽和モデル,独立モデル 2005 07 13 [#rc7b5e81]
始めに ここを参照
こことここも
またここも
&aname(social.mobility2);
データは東大「人文社会科学の統計学」 p.277
social.mobility2<-
array(c(
517, 244, 250,
152, 351, 328,
7, 13, 140,
441, 159, 272,
130, 227, 351,
24, 21, 268
),
dim = c(3,3, 2),
dimnames =
list(
father = c("white","blue","agri" ), # = c(1)
child = c( "white","blue","agri"), # = c(2)
year= c("1985", "1975") # = c(3)
)
)
class(social.mobility2 )<- "table"
ftable(social.mobility2)
library(MASS)
# 以下は,3次の効果を外した同時独立モデルだが,ここに有意差は無い。すなわち year の効果は無い。
# 3次の効果を含めた飽和モデルは,自由度ゼロなので必ず適合する。p. 271
social.mobility2.loglm3<- loglm(~father + child + year + father:child + father:year + child:year, data=social.mobility2)
anova(social.mobility2.loglm3, test="Chisq")
同じことだが,以下でもよい
social.mobility2.loglm3<- loglm(social.mobility2, list(c(1), c(2), c(1,2), c(2,3), c(1,3)))
1 -pchisq(kekka$lrt,kekka$df)#
1 -pchisq(kekka$pearson,kekka$df)#
# 東大「人文社会の統計学」 p.276
# log m = u... + ui.. + u.j. + u..k + uij. + ui.k + u.jk (9.33)
# ここで uij. ui.k u.jk がそれぞれ,father:child, father:year, child:year
# を表しているが
# uijk (p.276下から12行目), すなわち father:child:year
# は含まれていないモデル
# なお u... は全体平均 grandmean は暗黙のうちに含まれる
# ui.. 行平均 u.j. 列平均 u..k 軸平均は それぞれ要因 father, child, year
# を指定して含まれる
* 分散分析での母数モデル,変量モデル,混合モデル(豊田秀樹) 2005 07 27 [#h688e93f]
S-Plus での混合モデルの構築
[[Crawley:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.673 -
ちなみに
# p.678
lmedata3.model2 で。
random=~1|Genotype
は Genotype の intercepts をランダム要因と見なす指定, p.678
# 豊田秀樹 違いを見抜く統計学 p.120, p.127, toyoda.Bunsan.R を参照
p120<- data.frame(type = rep(c("sea","mount"), each = 8),
develop = rep(rep(c("old","new"), c(4,4)),2) ,
region = rep(c("izu","kuju","karui","yatsu"), each=4),
price = c(18.0, 15.0, 12.0, 20.7, 7.6, 12.3, 15.0, 15.2, 11.7,
11.6, 14.5, 15.4, 7.8, 7.5, 4.2, 6.4))
#p120<- data.frame(type = rep(c("sea","mount"), each = 8),
develop = rep(rep(c("old","new"), c(4,4)),2) ,
price = c(18.0, 15.0, 12.0, 20.7, 7.6, 12.3, 15.0, 15.2, 11.7,
11.6, 14.5, 15.4, 7.8, 7.5, 4.2, 6.4))
#> p120
# type develop region price
#1 sea old izu 18.0
#2 sea old izu 15.0
#3 sea old izu 12.0
#4 sea old izu 20.7
#5 sea new kuju 7.6
#6 sea new kuju 12.3
#7 sea new kuju 15.0
#8 sea new kuju 15.2
#9 mount old karui 11.7
#10 mount old karui 11.6
#11 mount old karui 14.5
#12 mount old karui 15.4
#13 mount new yatsu 7.8
#14 mount new yatsu 7.5
#15 mount new yatsu 4.2
#16 mount new yatsu 6.4
attach(p120)
交互作用を含んだモデル,交互作用棄却後のプーリングモデル
p120.aov<- aov(price ~ type * develop)
summary(p120.aov)
p.123と同じ出力# 豊田秀樹 違いを見抜く統計学 p.120, p.127
type develop の結果だけ見れば,プーリングした結果と同じ(p.123下)
Df Sum Sq Mean Sq F value Pr(>F)
type 1 84.181 84.181 10.1788 0.007769 **
develop 1 115.026 115.026 13.9084 0.002877 **
type:develop 1 8.556 8.556 1.0345 0.329170
Residuals 12 99.242 8.270
summary.lm(p.120.aov)
> 84.181 / 8.270# AB の平均平方ではなく,誤差の平均平方で割っている, p.108
[1] 10.17908
> 115.026 / 8.270
[1] 13.90883
> 1 - pf(10.1788, 1, 12)
[1] 0.007769413
交互作用を変量としたモデル,反復測定
p121.aov = aov(price ~ type + develop + Error(type/develop))
summary(p121.aov)
p.121 と同じ出力
母数因子だが,一つの標本から繰り返し測定した
すなわち,交互作用は変量モデル
Error: type:develop
Df Sum Sq Mean Sq F value Pr(>F)
type 1 84.181 84.181 9.8392 0.1965
develop 1 115.026 115.026 13.4444 0.1695
Residuals 1 8.556 8.556
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 12 99.242 8.270
ネストを仮定したモデル
p127.aov summary(p127.aov)
p.127 と同じ出力
すなわち,地域はタイプにネストしている
Error: region:type
Df Sum Sq Mean Sq F value Pr(>F)
type 1 84.181 84.181 1.3624 0.3635
Residuals 2 123.581 61.791
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 12 99.242 8.270
ここで
> 61.791 / 8.270
> 1 - pf(7.471705 , 2, 12)
[1] 0.007804986
三段のネストを仮定したモデル
これは上の2段ネストと同じ結果になっている
p.157 とは異なり,残差が二つに分離されていないx
p.157.aov > summary( p.157.aov )
Error: region:type
Df Sum Sq Mean Sq F value Pr(>F)
type 1 84.181 84.181 1.3624 0.3635
Residuals 2 123.581 61.791
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 12 99.242 8.270
また crawley, S-Plus, p.213下を参照。
p120.aov # = aov(price ~ type/develop)
# = aov(price ~ type/develop + Error( type/develop))
summary(p120.aov)
#
# p.127 と同じ出力
#
# Df Sum Sq Mean Sq F value Pr(>F)
#type 1 84.181 84.181 10.1788 0.007769 **
#type:region 2 123.581 61.791 7.4715 0.007806 **
#Residuals 12 99.242 8.270
#anova(p120.aov) #Error
#
# Df Sum Sq Mean Sq F value Pr(>F)
#type 1 84.181 84.181 10.1788 0.007769 **
#develop 1 115.026 115.026 13.9084 0.002877 **
#type:develop 1 8.556 8.556 1.0345 0.329170
#Residuals 12 99.242 8.270
#summary.lm(p120.aov)
#> 84.181 / 8.270 # AB の平均平方ではなく,誤差の平均平方で割っている, p.108
#[1] 10.17908
#> 115.026 / 8.270
#[1] 13.90883
#> 1 - pf(10.1788, 1, 12)
#[1] 0.007769413
# エラ−モデル 1
p120.aov summary(p120.aov)
#
# p.121 と同じ出力
#
#Error: type:develop
# Df Sum Sq Mean Sq F value Pr(>F)
#type 1 84.181 84.181 9.8392 0.1965
#develop 1 115.026 115.026 13.4444 0.1695
#Residuals 1 8.556 8.556
#Error: Within
# Df Sum Sq Mean Sq F value Pr(>F)
#Residuals 12 99.242 8.270
# エラ−モデル 2
p120.aov summary(p120.aov)
#
# p.127 と同じ出力
#
#Error: region:type
# Df Sum Sq Mean Sq F value Pr(>F)
#type 1 84.181 84.181 1.3624 0.3635
#Residuals 2 123.581 61.791
#Error: Within
# Df Sum Sq Mean Sq F value Pr(>F)
#Residuals 12 99.242 8.270
# ネストモデル
p120.aov summary(p120.aov)
#
# p.127と同じ出力
#
# Df Sum Sq Mean Sq F value Pr(>F)
#type 1 84.181 84.181 10.1788 0.007769 **
#type:region 2 123.581 61.791 7.4715 0.007806 **
#Residuals 12 99.242 8.270
#anova(p120.aov) #Error
* 対数尤度を求める関数 2005 08 01 [#o1feec7a]
logLik, (crawley, S-Plus, p.121)
* リストへのアクセス 2005 08 03 [#r8e750c9]
test
> test
Error: factory
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 6 260.70 43.45
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
treats 4 8.324 2.081 0.4637 0.7617
Residuals 24 107.704 4.488
以上のリストで,Error の F value にアクセスするには
summary(aov(rate ~ treats + Error(factory)))[[2]][[1]]$"F value"[1]
と実行する。
Crawely.S.plus.R を参照
>
d for(j in 1:1000){
treats for(i in 1:7) treats treats d[j] }
* グラフィックス表示を一枚ずつ見る 2005 08 05 [#d0392771]
par(ask=TRUE)
* 共分散分析, Ancova モデル式におけるアスタリスク 2005 08 08, 2006 01 11 [#hc1a7d93]
difference in the slop は 交互作用の項を見る。
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.295
covariate については p.293
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.216, p.341
w が sex カテゴリーの変数,x が連続量の変数の場合
y ~ w * x
は,w の二つのカテゴリそれぞれに回帰式(intecept と slope) regression slope を推定しろという命令となる。
[[John Fox:http://socserv.mcmaster.ca/jfox/]] p.126
// S-plus
* [S] EES の評価途中にスペースがある [#yb52040f]
式に改行やスペースが挟間っていると,そこで処理が止まってしまう。
* [S] ESS で操作中で画像の選択がある [#t7d79e80]
例えば plot を含めて,式を一括評価する時
par(ask=T)
と設定した後だと,yes か no の答えを得ることができないので,そこで止まってします。
* データの並び替え [#q9c7bb32]
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.417のデータならば
> fishery
xv yv
1 13.9885004 4.56836585
2 89.7028342 0.29710071
3 9.3151971 3.90699292
4 9.2132163 4.38109971
5 34.7017719 1.85936367
のようなデータフレームならば
fishery[order(fishery$xv),]
とすれば,xv の昇順にデータが整列する。
* [S] 内積とノルム 2005 08 23 [#f3b0090e]
a b
内積は
t(a) %*% b
としても
sum(a * b)
としても良い。
ノルムは
vecnorm(a), vecnorm(b) で求めるか
mynorm if(p=="inf") return(max(abs(x)))
sum(abs(x)^p)^(1/p))
}
で求める。
* adj の設定 2005 08 25 [#ub65cb39]
research/tex/p2005/2005/dunne.R より
text(E.normalized.B.dunne2[1, E.normalized.B.dunne2[2,] > 0.0],
E.normalized.B.dunne2[2, E.normalized.B.dunne2[2,] > 0.0],
adj=c(1.5,-.5), labels=( colnames(
E.normalized.B.dunne2[, E.normalized.B.dunne2[2,]
adj=c(X,Y) X を正にすると,点は左に,Yを正にすると点は下に移動
* 負の2項分布 2005 08 30 [#w1336322]
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.483
例えば
成功率 0.6, 成功までの試行数が 5 として(すなわち6回目に成功),
100回の試行を行なう。
count
table(count)
0 1 2 3 4 5 6 7 8 9
8 13 20 19 18 7 9 3 2 1
この場合 失敗無しで5回の成功が出た試行が 8 回
失敗 1 で5回の成功が出た試行が 13 回
あるのを意味する。
# 2006 07 24 追加
工学のためのデータサイエンス, p.49 - p.50
R の関数 _nbinom の引数 size, prob は
平均 mean が 'size * (1 - prob)/prob' を満たし,また
確率 prob が 'scale/(1 + scale)' を満たすように取られる
d p(0, 1612), rep(1,164), rep(2,71), rep(3,47), rep(4,28), rep(5,17),
rep(6,12), rep(7,12), rep(8,5), rep(9,7), rep(10,6), rep(11,3), rep(12,3),
rep(13, 13))
mean(d) # = 0.6005
var(d) # = 3.262531
prob = 0.1155 * (1 - 0.1553) / 0.1553# = 0.6282218 = size *(1 - prob)/prob
scale = 0.1838523 / ( 1 + 0.1838523)# = 0.1553 = scale/ (scale + 0.1553)
* lm, glm オブジェクトの summary における t 検定,z 検定 2005 09 02 [#t54cd3ab]
S-Plus では t 値が,R では z 値がデフォルト
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.534
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] S-plus.R, p.534
また S-Plus では,lm の出力は Pr(|t|) を出力するが,glm ではデフォルトでは出力されない。
* rgl.bbox の引数 2005 09 02 [#s091d17e]
rgl.bbox(color="#999999", emission="#FFA500",specular="#FFF0F5",
shinines=5,alpha=0.8)
color="#999999" は座標の数値ラベル色
emission="#FFA500" はボックスの壁の色
specular="#FFF0F5" は明るさ,数値が大きいほど明るい
shinines=5 は反射の具合
* 関数グラフの書き方 2005 09 19 [#q2e33709]
x y plot(x,y,type="l")
同じことだが
curve((x^2 - 6*x + 10), 0,6)
* 2項分布を Poisson 分布で近似する 2005 09 28 [#h5577017]
例えば2項分布で,0.00001 で成功する賭けを 100000 回行なった時,
ちょうど20回成功する確率は
pbinom(20, 100000, .0001) - pbinom(19, 100000, .0001)
[1] 0.001865335
これをポアソン分布で近似するには
ppois(20, 10) - ppois(19, 10)
[1] 0.001866081
* データフレームのコピー 2005 10 08 [#s5f3e4ac]
[[John Fox:http://socserv.mcmaster.ca/jfox/]] p.63 - 64
> search()
[1] ".GlobalEnv" "package:car" "package:methods"
[4] "package:stats" "package:graphics" "package:grDevices"
[7] "package:utils" "package:datasets" "Autoloads"
[10] "package:base"
> cooperation
エラー:オブジェクト "cooperation" は存在しません
> attach(Guyer) # Guyerデータには変数 operationがある
> objects()
[1] "Guyer" "hump.data" "hump.model" "last.warning"
> cooperation
[1] 49 64 37 52 68 54 61 79 64 29 27 58 52 41 30 40 39 44 34 44
> cooperation > objects()新たに変数 cooperation が作成されている
[1] "Guyer" "cooperation" "hump.data" "hump.model" "last.warning"
> rm(cooperation)# 新たに作成された cooperation を消し
> cooperation[1] Guyer変数のcooperation[1]を変更したつもりでも
> objects()実際にはコピーができている
[1] "Guyer" "cooperation" "hump.data" "hump.model" "last.warning"
> rm(cooperation)
> objects()
[1] "Guyer" "hump.data" "hump.model" "last.warning"
* png などの画像への保存 2005 11 09 [#b2a9096e]
始めに
png(file="gazo.png") #として device を平き
polt(y ~ x) # として画像を作成し
dev.off() # として device を閉じる。
ここで始めて保存される。
* 標準誤差 2005 12 02 [#zdcdd38c]
標準誤差とは,平均値の推定値の範囲
標準偏差とは,データが平均を中心にどれだけばらついているかの目安
* Boxplot の notch の解釈 2005 12 23 [#mcf9c930]
Boxplot の箱は 75 - 25 %タイルを示しているが,あるデータのこの範囲が,他のデータの平均値と重なっていない場合,二つのmedian は有意に異なる。Tukey による
[[Crawley Statistics Using R:http://www.amazon.co.jp/Statistics-Introduction-Michael-J-Crawley/dp/0470022981/]] p.167
* [S] 関数内で式を表示させない 2005 12 24 [#e11ee55f]
関数内では,付置の式以外は表示される。
特に print 文では注意が必要である。
これを防ぐため,invisibleを使う。
[[Crawley S-PLUS:http://www.bio.ic.ac.uk/research/mjcraw/statcomp/]] p.35
渋谷,柴田 p.34
* [S] S-plus + ESS 環境でのヘルプ 2005 12 24 [#d40dc98b]
キーワードにカーソルを合わせ,C-c C-v で表示させる。
?キーワードでは表示されない
// <<- はグローバル変数への代入
//
// 舟尾 p.183