R_lnre の変更点 - アールメカブ

アールメカブ


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")