忍者ブログ
×

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

前に描いた3要因グラフ (記事) を微調整した。-> 微調整後

c1m <- c(1,4)
c1n <- c(3,2) ## Condition 1
c2m <- c(5,3)
c2n <- c(1,4) ## Conditon 2
c1dat <- cbind(c1m, c1n)
rownames(c1dat) <- c("a", "b")
c2dat <- cbind(c2m, c2n)
rownames(c2dat) <- c("a", "b")
xlm <- c(0.8, 2.2)
ylm <- c(0, 6)

# 作図の領域を指定
par(mfrow = c(1, 2), mar = c(4,0,4,0), oma = c(4,6,2,4), bty = "l", lwd = 2)

## Condition 1のグラフ描画
matplot(c1dat, type = "b", pch = 1:2, col = 1, xlim = xlm, ylim = ylm, xaxt = "n", xlab = "Condition 1", cex = 1.5, cex.axis = 1.5, cex.lab = 1.5, lwd = 2, yaxp = c(0, 6, 12))
axis(1, at = 1:2, labels = c("a", "b"), cex.axis = 1.5)

## Condition 2のグラフ描画
matplot(c2dat, type = "b", pch = 1:2, col = 1, xlim = xlm, ylim = ylm, axes = F, xlab = "Condition 2", cex = 1.5, cex.axis = 1.5, cex.lab = 1.5, lwd = 2)
axis(1, at = xlm, tck = 0, labels = F, lwd = 2, cex.axis = 1.5)
axis(1, at = 1:2, c("a", "b"), cex.axis = 1.5, lwd = 2)

## 凡例描画
legend("topright", legend = c("m", "n"), lty = 1:2, pch = 1:2, box.lty = 0,cex = 1.2, pt.cex =1.2)

## 軸タイトル
mtext("OUT CONDITION", outer = T, side = 1, line =1, cex = 1.5)
mtext("Dep.Var. (Time)", outer = T, side = 2, line = 3, cex = 1.5)



PR
R-tips
田中先生のページを参照しつつ、覚書

デバイス領域 (作図ウィンドウの大きさ指定)
win.graph(...)
## 幅, 高さの順で指定。単位はインチ
win.graph(7, 7)

基本的に、太くしたいときはparの中のlwdをいじる。
par(lwd = 3)
折れ線の線、目盛り線はなぜか太くならないので個々に指定する。なぜか棒グラフの線は太くなる
matplot(1:5, type = "b", lwd = 3) # グラフ線を太くした
目盛り線を太くするには、あとからaxisで指定する
par(lwd = 3)
plot(1:10)
axis(1, lwd.ticks = 3)

文字等を大きくするときはplot関数内で指定する。
あとからaxisをつけると、目盛ラベルの文字がかぶるので、xaxt = "n", yaxt = "n"としておく
par(lwd = 3)
plot(1:10, cex = 2, cex.lab = 1.5, cex.axis = 2, xaxt = "n", yaxt = "n")
axis(1, lwd.ticks = 3, cex.axis = 2)
axis(2, lwd.ticks = 3, cex.axis = 2)

par(cex=...)  テキスト、記号。これでやると大体うまくいかない
以下をplot関数やaxis関数で指定する
cex plot   関数で使うとプロット文字 (白丸とか黒丸とか) のみを大きくする
cex.axis   軸目盛りの数値など
cex.lab    x,y軸ラベル
cex.main   mainタイトル
cex.sub    副タイトル

legend関数のパラメータ
cex             文字もポイントも大きくなる。これが一番いい気がする
pt.cex=1, cex=2 文字だけ大きくするにはpt=cex=1を指定し、その上でcexを指定する
pt.cex          凡例の中のポイント文字。文字じゃない
pt.lwd          線が太くなる
title           凡例にタイトルがつく。凡例タイトルのみを大きくすることは (たぶん) できない

text関数
cex 文字が大きくなる


目盛の調整
目盛の刻みを変更するにはxaxpを使う。c(最小値、最大値、何個に区切るか)
plot(1:10, xaxp = c(1, 10, 20))
より細かい指定
plotでxaxt = "n"として線だけ描くようにし、
axisのlab = c(...) で目盛を細かく書き、このときlabels = Fにしておく
それから再びaxisを使って任意に目盛ラベルをかく。
目盛ラベルがついたところの目盛を線を長くしたい場合はtck = -0.035 などとする
plot(1:10, xaxt = "n")
axis(1, at = c(1:10)-0.5, labels = F)
axis(1, at = 1:10, tck = -0.035)
## plot内のlabでも同じような指定ができる

凡例の調整 pch
プロット文字 (ポイント文字?)  田中先生のページより拝借。
pointcharacter.png


points.png











線のタイプ lty
lines.png






以上、緑のやつはQuick-Rから。感謝


グラフ全体の大きさとか余白とか


各プロットの余白
mar = c(...) # 行単位
mai = c(...) # インチ単位
下、左、上、右の順で作図領域の余白を設定する。左右の余白をなくしたいときはmar = c(2,0,2,0)となる

グラフの外周
oma, omi。外側余白 (outer margin) を行数 (arrows) かインチ (inch) で指定する

上と同じく、田中先生のページの図がわかりやすので拝借
margin.png







複数のグラフを1画面に書く
mfrow = c(2,2)
## 2 x 2、2行2列、4枚のグラフになる。win.graph(...) と組み合わせれば大きなグラフを複数描ける。mfcolは列単位。layoutやsplit.screenで色々な分割が可能
グラフの外に説明書きを入れる
mtext("OUT CONDITION", outer = T, side = 1, cex = 2, line =1)
## side: 下から時計回りで1,2,3,4.line: グラフから何行離すか

Rで3要因 (pdf) のグラフをつくろう (Rjpwikiの情報に感謝)
データは以下みたいな感じ
    a b
条件1 m 1 4
  n 3 2
条件2 m 5 3
  n 1 4


## データ生成。
c1m <- c(1,4)
c1n <- c(3,2) ## Condition 1
c2m <- c(5,3)
c2n <- c(1,4) ## Conditon 2
c1dat <- cbind(c1m, c1n)
rownames(c1dat) <- c("a", "b")
c2dat <- cbind(c2m, c2n)
rownames(c2dat) <- c("a", "b")
# x軸、y軸の幅を同一にするため、オブジェクトにいれておく
xlm <- c(0.8, 2.2)
ylm <- c(0, 6)

# parで作図の領域を指定する

par(mfrow = c(1, 2), mar = c(4,0,4,0), oma = c(4,4,4,4), bty = "l")
# mfrow: 1行2列でグラフをかく。mar: 下左上右の順で各グラフのマージンを指定。左右にくっつけるので、左右のマージンを0にする。oma: 全てのグラフのマージン。とりあえず全部同じに。bty: グラフの枠線指定。"l"はL字型で左と下だけ。"7"だったら右と上だけ (センスあるなぁ…)

## Condition 1のグラフ描画

matplot(c1dat, type = "b", pch = 1:2, col = 1, xlim = xlm, ylim = ylm, xaxt = "n", xlab = "Condition 1")
axis(1, at = 1:2, labels = c("a", "b"))

## Condition 2のグラフ描画。Condition2はy軸を書かないのでaxes = Fでx軸ともども描画しないようにし、x軸は後でaxis関数で付け加える
matplot(c2dat, type = "b", pch = 1:2, col = 1, xlim = xlm, ylim = ylm, axes = F, xlab = "Condition 2")
## まずx軸に線を引き、その上でもう1回axis関数を使って目盛を描く
axis(1, at = xlm, tck = 0, labels = F) # 線の長さはxlmでCondition 1と同じにし、tck, labelで目盛もラベルもない、ただの線を描く
axis(1, at = 1:2, c("a", "b")) # 普通に目盛を描く。Condition 1と全く同じ

## 凡例描画
legend("topright", legend = c("m", "n"), lty = 1:2, pch = 1:2, box.lty = 0)

以下はそのうち調べよう
作画領域、グラフの大きさ、凡例を外に出す、等の操作
locator(10) マウスでカチカチやるとそのたび座標を取得してくれる
Excel 2007のグラフ作成があまりにひどいので、
Rで折れ線グラフ (できあがりpdf) と棒グラフ (できあがりpdf) を描いてみよう。

折れ線グラフを描いてみよう
# データ入力
y1 <- c(1,2,3)
y2 <- c(3,4,1)
gdat <- cbind(y1, y2) #行列にする
rownames(gdat) <- c("a", "b", "c") # x軸の変数名をつけておく

# グラフ作成
par(bty="l") # グラフの左と右の軸しかかかない
matplot(gdat, type = "b", pch = 1:length(gdat[,1]), col = 1, lwd = 1, xlim = c(0.8, 3.2), ylim = c(0, 5), xaxt="n", xlab = "abc")
### type = "b": 点と線のプロット、pch: プロット文字。丸とか三角とか。plot character? 。col: 色指定。1は黒。 lwd: 線とポイントの太さ。xlim, ylim: x, y軸の最小値と最大値。デフォルトだと上下左右の余裕がないので大きくした。 xaxt: x軸の変数名を消す。あとで書くので
axis(1, at = 1:3, labels = rownames(gdat))
### x軸の名前をつける。a, b, c
legend("topright", colnames(gdat), lty = 1:length(gdat[,1]), pch = 1:length(gdat[,1]), box.lty = 0)
### 左から、凡例位置、変数名、lty: プロット線の種類。グラフに合わせる。line type? 。pch: プロット文字。グラフに合わせる。box.lty: 0で凡例の枠線を消す

以下、エラーバーの作成

グラフの中に矢印を書こう、というarrows関数のパラメータをいじる。
具体的には、矢印の始点と終点を指定し、矢羽の角度を90度にして、両向きの矢印を描画する。便利なんだかそうでないんだか…
# 標準誤差データをつくる
y1e <- c(0.1, 0.2, 0.15)
y2e <- c(0.02, 0.3, 0.1)
# エラーバーの描画
arrows(c(1, 2, 3), c(y1, y2)-c(y1e, y2e), c(1, 2, 3), c(y1, y2)+c(y1e, y2e), angle = 90, length = 0.05, code = 3)
### 始点と終点をベクトルで指定する。3本引くので3要素。angleで矢羽の角度を90度にして、lengthで矢羽の長さを変える。codeはたぶん両向き矢印
### 下端のx座標: x軸の値と同じ、下端のy座標: y軸の値からエラーを引く、上端のx座標は下端と同じ、上端のy座標はエラーを加算


棒グラフで描いてみよう

データ生成
y1 <- c(1,2,3)
y2 <- c(3,4,1)
bgdat <- rbind(y1, y2)
colnames(bgdat) <- c("a", "b", "c")
### gdatをそのまま使うと列データ (y1, y2) がx軸になるので転置しておく。ちなみにt(gdat)で簡単に転置できる

グラフ作成

barx <- barplot(bgdat, beside = T, ylim = c(0, 5), xlab = "abc")
### beside: Fにすると (= デフォルト) 積み上げ棒グラフ。x軸に線を引くときはaxis.lty = 1 (ただしこれでも中途半端)
### 描画行い、かつbarxというオブジェクトに各バーのx軸の座標が行列として格納される。

## 凡例はbarplot内でlegend = rownames(bgdat) としてもいいが、細かい調整ができない。
## palette関数でグレースケールのパレットを呼び出し、legend内のfillで指定する。マンドクサ...
palette(grey.colors(nrow(bgdat)))
legend("topleft", rownames(bgdat), fill = c(1, 2), box.lty = 0)
### 凡例の位置、行名を使う、fillは変数名の横のボックス、指定しているのは塗りつぶす色、box.ltyは枠線けし

エラーバーのデータも行列にしておく

y1e <- c(0.1, 0.2, 0.15)
y2e <- c(0.02, 0.3, 0.1)
bar.e <- rbind(y1e, y2e)
arrows(barx[,1:3], bgdat[,1:3] - bar.e[, 1:3], barx[,1:3], bgdat[,1:3] + bar.e[, 1:3], angle = 90, length = 0.05, code = 3)


OpenOfficeの方が楽な気がするな…

どうもlinear.hypothesisとかいう関数を使うらしい
http://tolstoy.newcastle.edu.au/R/e2/help/07/09/26498.html
http://tolstoy.newcastle.edu.au/R/e2/help/07/09/26518.html)


検証は面倒なので、重要そうなところだけメモしておこう

linear.hypothesis(diversitylm.ok, c("(Intercept)=CategoryM"), idata=idata.df, idesign=~Season, iterms="Season")

diversitylm.okはlm関数の結果
diversitylm.ok <- lm(cbind(dLluvias, dNortes, dSecas) ~ Category, data=datalm.df)
第2引数で被験者間要因のどの水準で検定するか
idata=idata.dfは被験者内要因の水準名を格納している
idata.df <- data.frame(Season)
idesign...被験者内要因の数式
Season <- factor(c("Lluvias","Nortes","Secas"), levels=c("Lluvias","Nortes","Secas"))
iterms...は被験者内要因の要因名

結果は対比や多変量統計量が出るようだ
ボンフェローニの調整が必要だから、多変量多重比較しろなどと書いてある



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