R_lnre - RとLinuxと...

RとLinuxと...


R_lnre

R_Baayen

まずtypeのspectram を作成する.これには zipfR パッケージの spc()関数を使う.

library(languageR)# alice データをロードするため
# 253
alice.spc <- spc(m = as.numeric(names(alice.table)),
   Vm = as.numeric(alice.table))

ここで第一引数 m は各 type の頻度,第二引数 Vm はその頻度数の type の数

sum(alice.spc$Vm) # types
sum(alice.spc$m * alice.spc$Vm) # tokens

この spectrum オブジェクトに lnre() 関数を適用する.第一引数は適用するモデル.gigp は the Generalized Inverse Gauss-Poisson モデル.fzm を指定すれば Zipf Mandelbrot モデル.

# p.254
alice.lnre.gigp <- lnre("gigp", alice.spc)
alice.lnre.gigp # summary

summaryの出力の S は,この場合,Lewis Carrol が Alice を執筆するのに適当であると考えていたであろう type 数を意味する.

この結果をプロットするには plot() と lnre.spc() 関数を組み合わせる.

# p.255
plot(alice.spc, lnre.spc(alice.lnre.gigp, 25942))

ここで lnre.spc() 関数の第二引数は spectrum が必要とされる tokes 数.ここでは Alice の token 数.

Interpolation, extrapolation を行う.

# extrapolation
alice.ext.gigp <- lnre.vgc(alice.lnre.gigp,
    seq(N(alice.lnre.gigp), N(alice.lnre.gigp)*2,
     length = 20), m.max = 3)
# interpolation
alice.int.gigp <- lnre.vgc(alice.lnre.gigp,
          seq(0,  N(alice.lnre.gigp), length = 20),
          m.max = 3)

ここで第一引数は lnre オブジェクトであり,第二引数では tokens 数の範囲を指定する.第三引数は全体のtokes数情報に加えて,例えば Alice では頻度 1 の type が 1188個,頻度 2 が 394 個,頻度 3 が 228個 (p.253)あるが,頻度幾つまでを付加するか (the number of requred spectrum)を指定.

成長曲線を描くためには,growth オブジェクトが必要.これを vgc オブジェクトに変更する.

alice.growth <- growth.fnc(alice, size = 648,
        nchunks = 40) #p.245
alice.vgc <- growth2vgc.fnc(alice.growth)

最後に interpolation, extrapolation, サンプルの成長曲線を並べてプロットする.

plot(alice.int.gigp, alice.ext.gigp, alice.vgc,
         add.m = 1:3, main = "")
mtext("Vocabulary Growth: Alice in Wonderland",
         cex = .8, side = 3, line = 2)
lines(c(0, 25942), c(2634,2634), lty = 2)
text(1,2634, "types = 2634", adj=c(0,1), col = "red")
 
Link: R_Baayen(58d) Rの備忘録(1461d)
Last-modified: 2007-10-12 (金) 14:09:34 (3720d)