裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

ダメ出し:オンラインヘルプをよく読もう

2012年01月31日 | ブログラミング

Rな予測 で以下のようにいっているが,predict には,level という引数がある。これで level=0.90 とすれば,90%推定区間が計算される。

予測の話」にあったSEやSD(的なもの)を回帰分析においても計算してやって、信頼区間とか予測区間とかを出しているわけです。

SE、SDの使い分けは

A<-predict(model,new,se.fit=T,interval="confidence")    #推定平均の95%推定区間付き
B<-predict(model,new,se.fit=T,interval="prediction")    #推定データの95%推定区間付き

↑に注目

 predict関数とはその名の通り予測値を返してくれる関数です。se.fit=Tにすると誤差の範囲も出してくれます。ここで、interval="confidence"とinterval="prediction" とに分かれているのですが、これで「データの95%誤差範囲」か「平均の95%誤差範囲」を出してくれるわけです。confidenceのほうは平均の誤差(信頼区間)で、 predictionの方はデータの範囲(予測区間)を表しています。

 もっと詳しい説明です。

 上記のやりかたはとても便利なのですが、95%以外の範囲を指定してやることはできません。そこで、もっと柔軟に計算するためには interval=~~を使わずに、直接SEとかSD(的なもの)を計算することになります。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

基本を勉強しよう

2012年01月31日 | ブログラミング

ifの条件式に関して

> a <- 1 ; if ((0 < a) < 2) print(a)
[1] 1
> a <- 1 ; if ((0 > a) < 2) print(a)
[1] 1
> a <- 1 ; if ((0 < a) > 2) print(a)
> a <- 1 ; if ((0 > a) > 2) print(a)

上2つの式はa2で評価されるようで表示されません。

そもそも他の言語のように

> a <- 1 ; if (0 < a < 2) print(a)
エラー: 予想外の '<' です ( " if (0 < a <" の)

のように書いてエラーとなり、()をつけて&として解釈されないかなーと
上の式をなんとなく書いてみたんですが、
Rでどう評価されてるのかよくわかりませんでした。(素直に0<a & a<2って書けよですね)

よくわからないときは,部分部分を評価してみる。

a <- 1 のとき,(0 < a) は TRUE,(0 > a) は FALSE
R では TRUE/FALSE は数値としては 1/0 として認識される
よって,(0 < a) < 2 は TRUE < 2 そして 1 < 2 なのだから TRUE になる
同様に,(0 > a) < 2 は FALSE < 2 そして 0 < 2 なのだから,この場合も TRUE になる
(0 < a) > 2 は TRUE > 2 そして 1 > 2 なのだから FALSE
(0 > a) > 2 は FALSE > 2 そして 0 > 2 なのだから FALSE

そもそも「他の言語のように (0 < a < 2) のように書いてエラーとなり、()をつけて&として解釈されないかなーと」いうけど,そんなことを許す言語ってあるか?ないと思うぞ。

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ダメ出し:計算の無駄,プログラムの無駄をなくする

2012年01月31日 | 裏 RjpWiki

CX's 'reality distortion' pie-graph (フジTV のステマ円グラフ)

元のプログラムは,無駄なことをしているので,プログラムが長く煩雑で,何をやっているのかわかりにくくなっている。

for (i in 1:length(num)) {
  x <- c(0.5 + dx, 0.5 + 0.5 * sin(rad[i]), 0.5 + 0.5 * sin(seq(rad[i], rad[i+1], length.out=div)), 0.5 + 0.5 * sin(rad[i+1]))
  y <- c(0.5 + dy, 0.5 + 0.5 * cos(rad[i]), 0.5 + 0.5 * cos(seq(rad[i], rad[i+1], length.out=div)), 0.5 + 0.5 * cos(rad[i+1]))
  grid.polygon(x=x, y=y, gp=gpar(fill=colors[i]))
  grid.text(引数省略)
}

grid.polygon を描くところは,以下のようにすればよい。
0.5 * sin(rad[i]),0.5 * sin(rad[i+1]) などを付け加える必要はない。
theta も一度計算しておけばよい。

for (i in 1:length(num)) {
  theta <- seq(rad[i], rad[i+1], length.out = div)
  x <- c(dx, 0.5 * sin(theta))
  y <- c(dy, 0.5 * cos(theta))
  grid.polygon(x = 0.5 + x, y = 0.5 + y, gp = gpar(fill = colors[i]))
  grid.text(引数省略)
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村