ページ

2016年9月20日火曜日

【R】 文章量を支配する統計

テキストにおける情報量
文の長さ分布から見た文生成のメカニズム

文章には長さがある。すごく短い文章ばかり書く人もいれば、長々とまるで寿限無寿限無・・・のように書く人もある。

どちらが良いというわけではない。しかし、文章量にも一定の確率的法則性がある、ということは認めてもらってもいいだろう。上のリンクは一番目のものは、文章の長さは対数正規分布(ジブラ分布とも言う)もしくはポアソン分布に従っているのではないか、と主張しており、さらに対数正規分布の方がポアソン分布より真の分布に近似していると結論している(赤池の情報量基準AICを使って)。二番目のリンクは、計量文献学において、やはり対数正規分布とガンマ分布を分布の候補に挙げており、文節数についてやはり赤池の情報量基準で比べて、どちらでもほぼ同じという結論を導いている。

(文章の長さを文字数で測るべきか、文節数で測るべきか、は悩ましい問題だ。文節数とする場合は、辞書の出来不出来にも左右される。)



ヒストグラム

冒頭の図は復興ウォッチャー調査データについて文章量(単純に文字数で見た)の統計を調べたものだ(Rソースコードは以下のとおり)。0字のデータ(未回収、未回答)を除外している。大半が100字未満であるが、なかには400字を超える大作も含まれている。

# 文書量統計

# データ読み込み
wdata <- read.csv("watcher20160726data.csv",header = TRUE)

# 属性読み込み
atrdata <- read.csv("watcher20160726atr.csv",header = TRUE)

# データ統合
totaldata <- merge(wdata[,c(1,5:16)],atrdata[,c(1,2,4,6,7)],by="ID")

# 文書統計 Histgram
nclr <- apply(data.matrix(totaldata[,"LR"]),1,nchar)
hist(nclr[nclr[] > 0],main="Length of Sentences",xlab="length")

分布のあてはめ

これについて、対数正規分布、ポアソン分布、ガンマ分布の3種のあてはまりを調べてみよう。RのMASSパッケージにあるfitdistr関数を使えば、とてもお手軽に分布のフィットが出来る。

# 分布あてはめ
library(MASS)

res1 <- fitdistr(nclr[nclr[] > 0],densfun="lognormal")
res2 <- fitdistr(nclr[nclr[] > 0],densfun="Poisson")
res3 <- fitdistr(nclr[nclr[] > 0],densfun="gamma")

AIC(res1)
AIC(res2)
AIC(res3)

まず推定値は以下のようになる。ポアソン分布はパラメータ数が少ないので不利だ。

> res1
    meanlog       sdlog   
  4.05633241   0.75602567 
 (0.07413442) (0.05242095)
> res2
     lambda  
  76.6634615 
 ( 0.8585736)
> res3
      shape         rate    
  1.915330716   0.024981175 
 (0.245552091) (0.003654809)

AICの計算結果は次のようになる。ポアソン分布のAICが最も大きく、予想に違わずダメだった。対数正規分布が最も良いあてはまりであるが、ガンマ分布も似たようなものである。

> AIC(res1)
[1] 1084.683
> AIC(res2)
[1] 5088.749
> AIC(res3)
[1] 1093.022

まとめ

我々人間はたくさん文章を書いているが、その長さは確率法則(対数正規分布)が支配している。

そのことと、書いている人の特徴(性別とか年齢)で、長さが異なるのかどうか、ということはまた別のことだ。それを判定するのもAICを使えば出来る。これについては、別記事で取り上げよう。