裏 RjpWiki

文字通り,RjpWiki の裏を行きます
R プログラム コンピュータ・サイエンス 統計学

暗号を解けというのだが(何回目かな?)

2015年06月22日 | ブログラミング

原文が英語というが,アルファベット出現頻度を頼りにするにはちょっと無理がある。
どうせ,換字式だろうとたかをくくって,しらみつぶしに検索。

tbireazrag bs gur crbcyr, ol gur crbcyr, sbe gur crbcyr, funyy abg crevfu sebz gur rnegu

======

以下のプログラムで

s = "tbireazrag bs gur crbcyr, ol gur crbcyr, sbe gur crbcyr, funyy abg crevfu sebz gur rnegu"
a = unlist(strsplit(s, ""))
table(a)
for (b in 1:26) {
  x = chartr(paste(letters, collapse=""), paste(letters[c(b:26,1:(b-1))], collapse=""), s)
  cat(letters[b], " ", x, "\n")
}
# tbireazrag bs gur crbcyr, ol gur crbcyr, sbe gur crbcyr, funyy abg crevfu sebz gur rnegu
# government of the people, by the people, for the people, shall not perish from the earth

コメント

本格的なデータ処理の前にすべきこと

2015年06月18日 | ブログラミング

データの不備を統計的に見抜く」において

> 同様に、黒人についての係数の時系列プロットを見てみましょう。

> 1964 年についてだけ、係数の誤差範囲が異常に広いです。

                  Estimate   Std. Error     z value     Pr(>|z|)
(Intercept)     0.10298445    0.2868289  0.35904485 7.195615e-01
Raceblack     -16.85751152  398.9746539 -0.04225209 9.662977e-01
Raceother      -0.41127679    1.2486182 -0.32938555 7.418643e-01
  :                 :

> なんと、1964 年だけ、誤差範囲が 100 倍以上広くなっています。

> これは一体なぜでしょうか?

> 各年のアンケートに答えた黒人の数を確認してみます。

   Year   n
1  1948  15
2  1952  48
3  1956  49
4  1960  42
5  1964  92
6  1968  85
    :

> 1964 年だけサンプルサイズが特に小さい、ということはないようです。

> 本書「みんなのR」では、この原因は "underrepresented"、すなわち、サンプルが母集団をうまく代表できていないためと結論づけています。

多分そういうことなんだろうけど,直接的には,この92名がどのような投票行動をしたのかを見ればわかる。

                 Vote
Race              democrat republican
  white                649        356
  black                 92          0
  other                  2          1

そう,92 名全てが democrat に投票しているのだ。これは係数の推定に大きく影響を及ぼす(誤差がとてつもなく大きくなる)。

> Unknown や Others などの係数は誤差範囲が広い

というのも,同じ原因だ。

試しに,92 名のうちのひとり(92 番目)の Vote を republican にして分析してみると,

                  Estimate  Std. Error     z value     Pr(>|z|)
(Intercept)     0.09357939   0.2861826  0.32699185 7.436741e-01
Raceblack      -3.86524356   1.0100227 -3.82688778 1.297736e-04
Raceother      -0.40824969   1.2483453 -0.32703267 7.436432e-01

のようになり,誤差が大きすぎるということはなくなる。

おかしなことが起きた原因は,「サンプルが母集団をうまく代表できていないため」ではあるが,正確にいえば「サンプルサイズが小さく,極端な現象が生じていたため」ということではないかな?このようなことが起きていたのは 1964 年のみだ。

> xtabs(~Race+Vote+Year, ideo)


, , Year = 1948

                 Vote
Race              democrat republican
  white                184        166
  asian                  0          0
  black                  9          6
  hispanic               0          0
  native american        0          0
  other                  0          0
  Unknown                8          1

, , Year = 1952

                 Vote
Race              democrat republican
  white                447        665
  asian                  0          0
  black                 38         10
  hispanic               0          0
  native american        0          0
  other                  2          0
  Unknown               24         31

, , Year = 1956

                 Vote
Race              democrat republican
  white                472        721
  asian                  0          0
  black                 31         18
  hispanic               0          0
  native american        0          0
  other                  3          0
  Unknown                0          0

, , Year = 1960

                 Vote
Race              democrat republican
  white                405        432
  asian                  0          0
  black                 31         11
  hispanic               0          0
  native american        0          0
  other                  2          1
  Unknown                0          0

, , Year = 1964

                 Vote
Race              democrat republican
  white                649        356
  asian                  0          0
  black                 92          0
  hispanic               0          0
  native american        0          0
  other                  2          1
  Unknown                0          0

, , Year = 1968

                 Vote
Race              democrat republican
  white                316        461
  asian                  0          0
  black                 82          3
  hispanic               0          0
  native american        0          0
  other                  2          5
  Unknown                0          0

, , Year = 1972

                 Vote
Race              democrat republican
  white                416        968
  asian                  6          3
  black                116         18
  hispanic               8          6
  native american        6         12
  other                  0          0
  Unknown                0          1

, , Year = 1976

                 Vote
Race              democrat republican
  white                517        613
  asian                  2          3
  black                 97          5
  hispanic              10          6
  native american       16         13
  other                  0          0
  Unknown                9          1

, , Year = 1980

                 Vote
Race              democrat republican
  white                256        442
  asian                  0          0
  black                 97          7
  hispanic               9          8
  native american        2          6
  other                  0          0
  Unknown                1          1

, , Year = 1984

                 Vote
Race              democrat republican
  white                397        723
  asian                  3          5
  black                112         15
  hispanic              31         26
  native american       13         12
  other                  0          0
  Unknown                1          5

, , Year = 1988

                 Vote
Race              democrat republican
  white                369        571
  asian                  5          7
  black                109         10
  hispanic              49         20
  native american       20          8
  other                  0          0
  Unknown                2          2

, , Year = 1992

                 Vote
Race              democrat republican
  white                529        476
  asian                  6         14
  black                164          8
  hispanic              41         19
  native american       20         12
  other                  0          0
  Unknown                5         10

, , Year = 1996

                 Vote
Race              democrat republican
  white                409        383
  asian                  9         11
  black                108          1
  hispanic              44         12
  native american       17          8
  other                  0          0
  Unknown                1          1

, , Year = 2000

                 Vote
Race              democrat republican
  white                395        431
  asian                 16          9
  black                100          7
  hispanic              24         18
  native american       10         20
  other                  0          0
  Unknown               11          8

コメント

Excel が面倒くさい(か?)

2015年06月08日 | ブログラミング

=IF(I3<0.001, "c", (IF(AND(I3>0.001, I3<0.01), "b", (IF(AND(I3>0.01, I3<0.05), "a", "")))))

0.001 のときなどはどうなるのかという突っ込みはおいておくとして,これは,はしからやっていけば,AND なんか書かなくてもよいし,余分な括弧もいらない。

if が成り立たないと else なのだから,2番目以降の IF は else if なんだよ。他のプログラムの if;else if; else でもそのように書く。条件式(の否定)を繰り返さない。

=IF(I3<=0.001,"c",IF(I3<=0.01,"b",IF(I3<=0.05,"a","")))

コメント

信頼区間の重なりの有無と有意差の有無

2015年06月03日 | ブログラミング

> 箱ひげ図にノッチ(切れ目)を入れると、各群の中央値の95%信頼区間が表示されます。
> そして、2つの群のノッチがオーバーラップしていなければ、それらの群の間に有意差があるとされます。

逆は真ならず

有意差があってもオーバーラップしていることもあるのだ

 

コメント

ひいきの引き倒しにならぬよう(願)

2015年06月01日 | ブログラミング

> R Recipe: aligned-plot-naive sumo.ly/865O 上下の図の「はば」をそろえるわざの紹介. R 作図でありがちなめんどう,ggplot2 だとわりと簡単に何とかなるみたい… pic.twitter.com/3UeF6qZrFu

ggplot2 を使えば,下の図のように,横幅を揃えるのが簡単といっているのかな?

プログラムは,

data <- data.frame(x = seq(0, 100, 1))
#
data = transform(data,
                 y1 = sin(x * pi / 10),
                 y2 = x**2
                 )
library(ggplot2)
library(gridExtra)
p1 <- ggplot(data, aes(x = x)) + geom_line(aes(y = y1)) + theme_classic()
p2 <- ggplot(data, aes(x = x)) + geom_bar(aes(y = y2), stat = "identity") + theme_classic()
p1
p2

なんだろうか。知らんけど。

一方,基礎的な描画関数を使うと,

x <- seq(0, 100, 1)
data <- data.frame(x, y1 = sin(x * pi / 10), y2 = x**2)
layout(matrix(1:2, 2))
old <- par(mar=c(3, 3, 1, 1), mgp=c(1.8, 0.6, 0))
plot(data$y1 ~ x, type="l")
plot(data$y2 ~ x, type="h")
par(old)

ともなろう。

描かれるのは

どっちが簡単?決まってる,後者。

ggplot2 は呪文みたいだなあ。

それに,図自体のキレイさは誰の意見も一致するだろう。あえて,言及しない。

下のヒストグラムの太さが違うように見えるのは,連続量を離散値に四捨五入して描いているからあんなになる。本来は等間隔の棒グラフが等間隔の隙間で区切られて並んでいるはず。

それは,コンピュータの原理状仕方ないけど,それが目に見えるみっともなさで表現されるのは不都合。plot(..., type="h") のように線で逃げるのが穏当。

もっとも,plot(..., type="h") でも,線の太さが違うように見えるところがあるのは,ご愛敬。

コメント (1)