#content
例えば以下のようなデータで (Maindonald 旧版 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
例えばカッコーの巣であれば,
> 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
なお boxplot と split, rug を併用した例は Maindonald 旧版 p.225
> 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(下側確率,自由度) 坪田 p.29
例えば qt(0.05,10) とすると,qt()は分位点関数なので,正規曲線の総面積の累積が5%となる x の座標点
> qt(0.05,10) [1] -1.812461 を与える。上側は > qt(0.95,10) [1] 1.812461
RODBCパッケージを利用する。
以下は,excelファイルを読み込むだけでなく,更新なども行なう。
library(RODBC) connExcel
このあと
data
などとクエリーを行なえる。使い終われば
odbcClose(connExcel)
Maindonald 旧版 , p.22,35 X11() を実行。サイズを指定するには X11(width=7.5,height=4)
現在アクティヴなグラフィックデバイスを閉じるには
dev.off()
特定のデバイス, 例えば 3 番を閉じるには
dev.off(3)
デバイスの変更, 例えば 2 番に切替えるなら
dev.set(2)
例えば Maindonald 旧版 , 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 が 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]
Maindonald 旧版 p.182
なお plot で引数に type="n"を指定すると,点は刻印されない。これに続いて points() を実行する。
二つのカテゴリについて,変数 Y と 変数 X の対応をプロットする。Maindonald 旧版 p.134
[[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
豊田「非線形多変量解析」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)
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, : invalid pos value In addition: Warning message: NAs introduced by coercion
を実行 (エラーで無表示となる)後,再度
text(base.tree)
を行なうと,ラベルが付与された。
朝野 p.108より
説明変数の相関行列 R について R の固有値を求める。このとき固有値の積は,R の行列式に一致する。偏回帰係数の分散は,固有値の逆数の和と一致する。
# 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)
# knn1を使って ex 中のデータが SOMで割り当てた test$code (8*12ある)のどれに近いのかを調査
bins # exから抜粋した値がどこに割り当てられるのかを示す。
# 全てをプロットすると収集がつかなくなるので 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) ))
stifstom4[stifstom4 stifstom4[,stifstom4[,c(4:16)] stifstom4[,c(4:16)][stifstom4[,c(4:16)] #stifstom4[,c(4:16)][stifstom4 stifstom4[stifstom4 > 1]
research/statistics/Intro.R.R
例えば自然科学の統計学 p.38 の最小二乗法の計算
x A B X t(X) %*% X
自然科学の統計学 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)
松原望『実践としての統計学』 p.16, p.163, p.222
B1 = 100% 蟻は黒い, とする。
B2 = 99 % の蟻は黒い, とする。そしてそれぞれの確率を
p(B1) = p(B2) = 0.5
すると
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)
= 0.5 * 1 / ( 0.5 * 1 + 0.5 * 0.99)
と計算される。
remove(objects()) # S-Plus rm(list = ls()) # R
# dev.off() # plot.new() 場合によっては描画前に必要となる par.old par.old plot(x,y) par(par.old)
Dalgaard p. 28, 30, 71 Venables p. 84
これに外周を加えるのが
oma
help.start()
/usr/local/lib/R/library/
Maindonald 旧版 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
Maindonald 旧版 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 は,第一引数をもとに,第二引数で指定された数のベクトルを作成する。
Maindonald 旧版 p.59, p.117
set.seed(x) は,R起動には,x をランダムな値に設定して生成される乱数のリストである。 したがって,同じ x の値で実行すれば,同じ乱数のセットが得られるので, 結果として,同じ結果が得られる。Maindonald 旧版 p.64
第一引数で指定したベクトルを,第二引数で指定したカテゴリーで,リストに分ける。 Maindpnald p. 134, p.213
Maindonald 旧版 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))
ここで adj は(x,y)点に対して x がマイナスなら,左に,また y がマイナスなら上にテキストが付記される。
Maindonald 旧版 # p.137
allbacks0.lm summary(allbacks.lm, corr=T)
また個々のサンプルを抜いた場合の影響度を調べるには Maindonald 旧版 p.139
round(coef(allbacks.lm0), 2) round(lm.influence(allbacks.lm0)$coef, 2)
Maindonald 旧版 p.166
Maindonald 旧版 p.90 p.178 p.210
Maindonals p.178
Maindonald 旧版 p.202
Maindonald 旧版 p.226
science.lme summary(science.lme)$tTable
青木先生のサイト http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/one-two.html
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")
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) )) 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
始めにここを参照.ここ>#loglin2]と[[ここも.[[ここ>#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次の効果を除いた場合 # 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次の交互作用を除いたモデルは適合している。 すなわち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次を全て省いた場合 # 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"
始めにここを参照.ここも.[[ここ>#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 を省いた方が小さい <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 を省いた方が小さい <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, 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) anova(glm0, test = "F") summary(glm0) ######### > summary(glm0)
Call: 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 loglin(rocket,margin=list(c(1,2),c(1),c(2)),param=TRUE)
####### > 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
library(xtable) x<- matrix(1:24,4,6) mytable<- xtable(x) print(mytable)
http://www.okada.jp.org/RWiki/index.php?cmd=read&page=LaTeX&word=TeX%20#content_1_0
qr(X)$rank # 舟尾 p.61
渋谷 柴田 p.37
norm if(p=="inf") return (max(abs(x))) sum(abs(x)^p)^(1/p) }
これは sqrt(t(x) %*% x) に等しい。
例えば,以下のようにする場合
#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
まず
> 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)
とする。
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 。
例:/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)
> 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
例えば
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)
例えば
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) エラー
plot(x ~ y) kaiseki.lm(x ~ y)
abline(kaiseki.lm[1,1], kaiseki.lm[3,1])
として切片,傾きを指定しても,また
abline(kaiseli.lm)
とするのも可能。
Crawely p.163 分散分析で,平均値に差があるかを確認し,さらに,要因レベルの効果差を見るには,
summary.lm(aov(ozone ~ garden))
などを実行する。
Dalgaard p.58
Crawely p.197
Crawley S-PLUS p.167
Crawley Statistics Using R p.174, Crawley S-PLUS p.287 treatment.control では,各要因の各レベルの効果を, その要因の切片(基軸)であるレベルと比較して判断する。 したがって,基軸以外のレベルの相互の有意差は表示されていない。
基軸以外のレベル相互の比較 要因Aと他要因 BCD全体との差,BCD 内の差を一度に検定 2006 03 20
John Fox, p.142 - 143.
他にここ
始めに ここを参照 こことここも またここも 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)
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
dev.copy2eps(file="log.eps")
Dunning の式は,Oakes p.172 にまとめられている。必要となるのは a,b,c,d,と 当該コーパスにおける総語数 N (結局 a+b+c+d に等しい)。
a = あるキーワードにたいして設定したスパンの内部に,その共起語が現れた回数 b = キーワードにたいして,その共起語以外の語がスパンに現れた回数 c = キーワード以外の語にたいして,その共起語がスパンに現れた回数 d = キーワード以外の語にたいして,その共起語以外の語が現れた回数
始めに ここを参照 こことここも またここも &aname: Invalid ID string: 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 # を指定して含まれる
S-Plus での混合モデルの構築 Crawley 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
logLik, (crawley, S-Plus, p.121)
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] }
par(ask=TRUE)
difference in the slop は 交互作用の項を見る。
Crawley S-PLUS p.295
covariate については p.293
Crawley S-PLUS p.216, p.341
w が sex カテゴリーの変数,x が連続量の変数の場合
y ~ w * x
は,w の二つのカテゴリそれぞれに回帰式(intecept と slope) regression slope を推定しろという命令となる。
John Fox p.126
式に改行やスペースが挟間っていると,そこで処理が止まってしまう。
例えば plot を含めて,式を一括評価する時
par(ask=T)
と設定した後だと,yes か no の答えを得ることができないので,そこで止まってします。
Crawley S-PLUS 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 の昇順にデータが整列する。
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)) }
で求める。
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を正にすると点は下に移動
Crawley S-PLUS 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)
S-Plus では t 値が,R では z 値がデフォルト Crawley S-PLUS p.534
Crawley S-PLUS S-plus.R, p.534
また S-Plus では,lm の出力は Pr(|t|) を出力するが,glm ではデフォルトでは出力されない。
rgl.bbox(color="#999999", emission="#FFA500",specular="#FFF0F5", shinines=5,alpha=0.8)
color="#999999" は座標の数値ラベル色 emission="#FFA500" はボックスの壁の色 specular="#FFF0F5" は明るさ,数値が大きいほど明るい shinines=5 は反射の具合
x y plot(x,y,type="l")
同じことだが
curve((x^2 - 6*x + 10), 0,6)
例えば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
John Fox 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(file="gazo.png") #として device を平き polt(y ~ x) # として画像を作成し dev.off() # として device を閉じる。
ここで始めて保存される。
標準誤差とは,平均値の推定値の範囲 標準偏差とは,データが平均を中心にどれだけばらついているかの目安
Boxplot の箱は 75 - 25 %タイルを示しているが,あるデータのこの範囲が,他のデータの平均値と重なっていない場合,二つのmedian は有意に異なる。Tukey による
Crawley Statistics Using R p.167
関数内では,付置の式以外は表示される。 特に print 文では注意が必要である。 これを防ぐため,invisibleを使う。
Crawley S-PLUS p.35 渋谷,柴田 p.34
キーワードにカーソルを合わせ,C-c C-v で表示させる。 ?キーワードでは表示されない