裏 RjpWiki

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

いろんなサイコロを何個も振る

2012年09月27日 | ブログラミング

以前ダメ出ししたけど,もっとまともなプログラムを書いたので

RPubs も参照

program

    dice <- function(m, n) {
        me0 <- 1
        for (i in 1:n) {
            me <- numeric(m * i)
            l <- length(me0) - 1
            me[i:(i + l)] <- me0
            for (j in 1:(m - 1)) {
                me[(i + j):(i + j + l)] <- me[(i + j):(i + j + l)] + me0
            }
            me0 <- me[me != 0]
        }
        return(list(freq = me0, min = n, max = m * n))
    }

examples

    a <- dice(4, 10)
    barplot(a$freq, names.arg = a$min:a$max, main = "sum of 10 unbiased 4-sided dice")

 

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

ダメ出し:確かめようと思えば,確かめることができるんだよ

2012年09月25日 | ブログラミング

rbinomのprob引数は複数評価してくれるっぽい とか言ってるんだけど

「してくれるっぽい」ではなく,「してくれる」んだ
ちょっと確かめれば分かることだ

> set.seed(123)
> x <- rbinom(900, 10, prob = seq(0.001, 0.9, 0.001))
> set.seed(123)
> y <- sapply(seq(0.001, 0.9, 0.001), function(x) rbinom(1, 10, prob = x))
> all(x==y)
[1] TRUE

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

by がエライことになっている(^_^)

2012年09月20日 | ブログラミング

mean(データフレーム) と sd(データフレーム) が deprecated になったので,by がとばっちりを受ける。

> by(iris[,1:4], iris[,5], mean)
iris[, 5]: setosa
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       5.006        3.428        1.462        0.246
--------------------------------------------------
iris[, 5]: versicolor
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       5.936        2.770        4.260        1.326
--------------------------------------------------
iris[, 5]: virginica
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       6.588        2.974        5.552        2.026
 警告メッセージ:
1: mean() is deprecated.
 Use colMeans() or sapply(*, mean) instead.
2: mean() is deprecated.
 Use colMeans() or sapply(*, mean) instead.
3: mean() is deprecated.
 Use colMeans() or sapply(*, mean) instead.

警告を出さないためには当然だが,colMeans か sapply を以下のように使う。

> by(iris[,1:4], iris[,5], colMeans)
iris[, 5]: setosa
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       5.006        3.428        1.462        0.246
---------------------------------------------------------
iris[, 5]: versicolor
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       5.936        2.770        4.260        1.326
---------------------------------------------------------
iris[, 5]: virginica
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       6.588        2.974        5.552        2.026


> by(iris[,1:4], iris[,5], sapply, mean)
iris[, 5]: setosa
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       5.006        3.428        1.462        0.246
---------------------------------------------------------
iris[, 5]: versicolor
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       5.936        2.770        4.260        1.326
---------------------------------------------------------
iris[, 5]: virginica
Sepal.Length  Sepal.Width Petal.Length  Petal.Width
       6.588        2.974        5.552        2.026


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

あらーー,lisp までいっちゃった

2012年09月19日 | 雑感

言語はなんでもいいのだよね

英語はうまく話せないから,イタリア語だったらうまくいくかも...

たぶん,うまくいかない...

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

数学の学び方? なにかねえ,ベースラインが違うような。

2012年09月16日 | 統計学

 特定の目的を持つ分野において,「数学を学ぶ必要はあるのだろうか?」

その分野において,数学を用いている件について学べばよいのではないか?

例えば,ある検定法について,どのようにその検定法が構築されたとかいう数学部分は不要だろう。理論背景から出てくる,制約(どのようなデータでなければならないか)とか解釈法(結果を現実の事象に置き換えて・引き替えて解釈する方法)を理解・了解すればよいのだろう。

ryamada さんてば,新天地を目指して色々やってるんですかね。私にはよく分からないってことは,天才ってことでしょうね。

> 弟子:数学って,理系分野の基本だよね~,数学できないとなかなか先に進めないよね~.

そんなことはない。理論を再構築しようとしているのではないのだから,その理論を理解できるかどうか(細かい部分は分からなくても差し支えないと思うけど?)

> 弟子:数学ってどうやって勉強するの?

> 高2生:定理の証明ができるようになればいいんじゃない?練習問題とかはする必要ないよ.

定理の証明なんて,できる必要はない。
できて当たり前だし,正しいことを正しいと再認識して,何になる。

> 弟子:具体的にどうやったらいいの?

> 高2生:教科書の定理の証明を理解したら,自分で白紙から証明できるようになるまで繰り返すことかな.

そんなこと,意味ない。それは,大学入試レベルの話(もっとも,センター試験ではそんな能力さえも評価されない)。高校生(大学生)レベルで追試できる定理証明ができても,偉くもないし,何の役にも立たない。できて,当たり前だし,できなくても,なんの不都合もない。数学者や,数理統計学者になるのでもならないのなら,不要。

> 弟子:はじめは,定理の証明を読んでいいの?

> 高2生:あたりまえじゃん,そうしなかったら偉人たちが何百年もかかったんだから,どのくらい時間がかかると思ってるの?終わるわけないじゃん.

> 高2生:それから,数IAから始めるでしょ?結局,数IAも数IIBも数IIICのためにあるんだからね.

> 高2生:数IAとIIBの定理は数IIICにつながるように理解していかないとね,ばらばらに覚えていてもしょうがないから,数学って覚えることを少なくすることがポイントだね

系統だって覚えることは大切かも知れないが,「そのようにすること自体がひつようか?」と考えると,そうねえ,数学者や統計数理学者になるんなら,必要かも知れないけど,そうでなければ必要ではないし,数学者や統計数理学者になれるかどうかは,保証できないなあ。ということでは?

> 弟子:でも,教科書にはそれぞれの定理がどの定理につながっているかとか書いてないよ.どうしたらいいの?>

> 高2生:先生が説明してくれるよ.でも先生によるけどね.大学の教科書には書いてあるからそれ読めば!

ううむ。この,高2生君は,天才なんだろうなあ。

> この後,サイン・コサインとかは覚える必要がないこと,それらは,単位円のy座標,x座標を意味していること.

> ベクトル内積は・・・(忘れた・・・)を意味することなど

ギャグなんだろうか??

  • 確か,ある先生が「もっと抽象的にわかりやすく説明したまえ」と言っていたことがあった.

私は言いたい,もっと,現実的に,具体例でもって説明したまえ!と

実質的概念が理解できない人は,抽象的概念はもっと理解できないと思うよ。

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

Mac の RStudio で,png に日本語を使うことについて

2012年09月13日 | ブログラミング

面倒くさいことこの上ないけど以下のようにしている

"base64_images" を使わない,つまり,以下のようにする。

options(markdown.HTML.options=c("hard_wrap", "use_xhtml", "smartypants"))

つまり,できあがる html ファイルに base64 エンコーディングしたものを含めない。画像ファイルは figure フォルダの下に作る。それを参照するということ。

その後,

    library(knitr)
    knit2html(File)
    knit(File, tangle=TRUE) # R プログラムを取り出す
      pdf("figure/hoge%03i.png")
      の後に実行する(/figure 以下に,日本語が入った png ファイルができる)
    作られた .html ファイルをいろいろ操作する
       img タグで /figure/*.png ファイルを参照するようにする

もちろん,プログラムしてオートマチックにやりますけどね。

まあ,そんなところ。めんどくさいことこの上ないけど,Windows 環境で操作を引き継ぐとか,Windows の画像ファイルが汚いことを考えると,やむを得ないかなあということ。Windows で全部やる,なんて,考えるだけでイヤダイヤだ。

本当に,Windows は困ったもんだ。



 

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

BEEP !!!

2012年09月13日 | ブログラミング

Macintoshの R では,beep 音を発生するのが困難???

次のような,内容を持つファイル(ファイル名を例えば beep.R とする)を作って,(awk が必要だが)

system("awk 'BEGIN{print \"\a\"}'")

beep が必要なときに

source("beep.R")

などと,面倒なことをする。

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

R にはたくさんのパッケージがあるので

2012年09月13日 | ブログラミング

同じことをするにも,何通りかある。そして,パッケージによっては出力される結果の種類に違いがある(答だって,微妙に違うこともあるけど(^_^)

さて,「多値のロジスティック回帰を復習しておこう&Rで実装しておこう!」で(実装という言葉の意味を間違えているだろうけど)

> 多項ロジスティック回帰には nnet パッケージにある multinom() 関数を使います。
 :
> この関数、問題はp値が算出されないのが問題ですね。

とあるが,当然の所,各群の所属確率なんだろうね。predict で type="probs" を指定すれば,出るよ!

 http://rpubs.com/r-de-r/1651 を参照

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

レポートや宿題の集積場になりはてている RPubs だが

2012年09月12日 | ブログラミング

1, 1, 1, 2, 2, 2, 3, 3, 3

というベクトルを作れというのに,みんな

rep(1:3, c(3, 3, 3))

と答えている(ひとりだけ,以下の解答をしているものがいた)。

rep(1:3, each=3)

とすべきだろうなあ。

1, 1, 1, 2, 2, 3

も,

rep(c(1, 2, 3), c(3, 2, 1))

などと,書いているが,

rep(1:3, 3:1)

としましょうね。


誰も見ることのできる場所にアップさせると,カンニングというより,まねすることは容易になる。

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

RMarkdown の仕様の変更について

2012年09月09日 | ブログラミング

なんとも,シンプルなので,もうちょっと何とかならないかという,リストアップ

タイトルは,センタリング

画像もセンタリング

blockquote の,左の装飾は不要

R のコード,結果はインデントして欲しいなあ

hr はもっと,濃くして欲しいなあ

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

google 謎の人材募集広告 その2

2012年09月08日 | ブログラミング

大学への基礎数学-雑記帳」というところにも,第二問が書いてあってですね,...

> しばらく(といっても結構時間かかりました)悩んでようやくルールには気づきましたが、
> 答を出すには簡単なプログラミングをしないと手作業ではやってられません。ということで
> あっさり断念(笑)。ルール自体は簡単です。
> どなたか正解がわかったらこっそり教えて下さい(笑)

などとあって,脱力。

f(5) = 5966290435 で,f(128) = 9325365880 までもとめて,0.054 秒だった。

まずは,やってみようと思えること,そのためには少しはプログラミングの素養があることが必要。とはいっても,EXCEL は論外(^_^;)

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

どこまで自力で書くかが試されるんだろうなあと

2012年09月08日 | ブログラミング

はてなユーザしかコメントできないなどという,馬鹿げた仕組み のようなので,こちらへ

Googleの入社問題をR解いてみたよ!」だけど,

> 自然対数を文字列として認識して、strsplitで一文字ずつ分割。返り値がlist形式になっているので、unlistしてからas.integerで数値として認識させる必要があります。

なんて,不要でしょう。substring で先頭から順に10文字ずつとって,それを as.numeric して,素数判定をすればよいだけ。素数判定も gmp ライブラリの isprime を使えば, 0.001 秒程度で答えが出る

追記:後になって,プログラムが添付されたが,実質的には substr を使ったものになっている。
strsplit は別の目的で使う(不要だが)ベクトルを作るために使っている。

ちなみに,件のリンク先の divisor の 3 つ上にある,「多倍長精度による計算」で,e を計算することもできる。

この問題は,そんな解があるんだろうか,あるとしても見つけるのは難しいんだろうなあと思うかも知れないが,解は意外と早い内に見つかる。以下に,「n 桁の連続する数字が素数である解を求めよ」として,n=1~50 まで求めて見た結果である。ほとんどが小数点以下 100 桁以内から始まる。そして,全部計算が終わるまで 0.06 秒しかかからない

 n   何桁目から始まる数字か  および,その素数
 1    1 7

 2    1 71
 3    4 281
 4   14 4523
 5   24 74713
 6   12 904523
 7   20 6028747
 8   64 72407663
 9   19 360287471
10   99 7427466391
11   37 75724709369
12   53 749669676277
13    7 8284590452353
14   47 99959574966967
15   39 724709369995957
16   40 2470936999595749
17    8 28459045235360287
18   82 571382178525166427
19  151 5956307381323286279
20   18 53602874713526624977
21   51 957496696762772407663
22    5 8182845904523536028747
23   15 52353602874713526624977
24   65 240766303535475945713821
25    3 8281828459045235360287471
26    3 82818284590452353602874713
27   68 766303535475945713821785251
28   24 7471352662497757247093699959
29   27 13526624977572470936999595749
30    6 182845904523536028747135266249
31   96 6427427466391932003059921817413
32  173 90763233829880753195251019011573
33    3 828182845904523536028747135266249
34   47 9995957496696762772407663035354759
35  126 35966290435729003342952605956307381
36   10 459045235360287471352662497757247093
37   39 7247093699959574966967627724076630353
38   57 69676277240766303535475945713821785251
39   47 999595749669676277240766303535475945713
40   68 7663035354759457138217852516642742746639
41   44 93699959574966967627724076630353547594571
42   39 724709369995957496696762772407663035354759
43   33 2497757247093699959574966967627724076630353
44  118 92181741359662904357290033429526059563073813
45    5 818284590452353602874713526624977572470936999
46    6 1828459045235360287471352662497757247093699959
47   91 52516642742746639193200305992181741359662904357
48   60 762772407663035354759457138217852516642742746639
49    1 7182818284590452353602874713526624977572470936999
50   39 72470936999595749669676277240766303535475945713821

ちなみに,500 けたの素数が,1461 文字目から始まる。500桁までで,110秒かかった。

87211725563475463964479101459040905862984967912874068705048958586717
47985466775757320568128845920541334053922000113786300945560688166740
01698420558040336379537645203040243225661352783695117788386387443966
25322498506549958862342818997077332761717839280349465014345588970719
42586398772754710962953741521115136835062752602326484728703920764310
05958411661205452970302364725492966693811513732275364509888903136020
57248176585118063036442812314965507047510254465011727211555194866850
800368532281831521960037

追記:

その後,google で検索して,出てきたページを斜め読みすると,やれ, Excel だと半日ぐらいでできそうだとか,途中で投げたとかいう記事が。また,自分でやることもなく,さすが google すごい。などという記事が多くて,嘆かわしい。数個読んで,反吐が出そうになったのでやめた。

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

markdown::markdownToHTML が使う markdown.css

2012年09月07日 | ブログラミング

R で knit2html をやると,markdown::markdownToHTML が使う markdown.css は
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/markdown/resources/markdown.css
なのだが,RStudio からやるときに markdown::markdownToHTML が使う markdown.css は
/Applications/RStudio.app/Contents/Resources/resources/markdown.css
のようだ。

箇条書きのときなどに特に行間が狭くなりすぎるのを避けるために
/Library のほうの css をいじって,
body, td {
   font-family: sans-serif;
   background-color: white;
   font-size: 12px;
   line-height: 150%;
   margin: 8px;
}
のように,line-height を付け加えても,どうしても変更できなかったのはそのせいなんだなあ。

これで,問題が一つ片付いた。

後は,出力される HTML ファイルのエンコーディングを UTF-8 でなくする方法がわからない。環境設定では設定できない。

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

*.Rmd ファイルに HTML タグは当然使える

2012年09月07日 | ブログラミング

R Markdown の文法だけだと,よくわからないところがあるのだけど(例えば,3段階以上の箇条書きとか),無精をして HTML タグがあるやつをコピー・ペーストしてても,ちゃんとした html ファイルができるので,いささか拍子抜けしてしまった。

どこか(それも最初の方)に書いてあるんだろうけど。

 

案外知らない人もいるのではないかなあ...

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

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

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