課題説明

第13回のテキスト・データの回帰分析の結果に基づいて、以下の分析を行ってください。

ハミルトンとマディソンの共著論文について、以下のように回帰モデルの予測値を計算する。 用語頻度行列「tfm」からハミルトンとマディソンの共著論文(第18、19、20篇)の用語頻度行列「tf.hm」を作成(抽出)する。 「tf.hm」を「newdata」として「predict()」関数を用いて予測値を計算する。 ジョン・ジェイの著した論文(第2、3、4、5、64篇)についても同様に回帰モデルの予測値を計算する。 ジョン・ジェイの緒した論文の用語頻度行列を「tf.jj」とする。 以下の「***」から下をコピーし、計算した予測値に基づいて(  )内に適切な語句を入れて、完成した文章をインラインにコピー・ペーストして提出してください。ただし、3については結果について自分なりの解釈を記述してください。

また、末尾にRの出力結果もコピー・ペーストして提出してください。

解答

  1. ハミルトンとマディソンの共著論文の予測値が負となる割合は(100)%である。

  2. ジョン・ジェイの論文の予測値が負となる割合は(100)%である。

  3. 上記の結果から次のことがわかる。

    ハミルトンとマディソンの共著論文は、マディソンの特徴が強く出ている。また、ジョン・ジェイの論文は、マディソンと同様の特徴を持つ。

===== Rの出力結果 =====

> ## 必要な2つのパッケージを読み込む
> library(tm, SnowballC)
 要求されたパッケージ NLP をロード中です 

> ## 未加工のコーパスを読み込む
> corpus.raw <- VCorpus(DirSource(directory = "federalist", pattern = "fp"))

> ## 小文字にする
> corpus.prep <- tm_map(corpus.raw, content_transformer(tolower)) 

> ## スペースを取り除く
> corpus.prep <- tm_map(corpus.prep, stripWhitespace) 

> ## 句読点を取り除く
> corpus.prep <- tm_map(corpus.prep, removePunctuation)

> ## 数字を取り除く
> corpus.prep <- tm_map(corpus.prep, removeNumbers) 

> ## 操作のため行列へ文書-用語行列行列を行列へ変換
> dtm1 <- as.matrix(DocumentTermMatrix(corpus.prep)) 

> tfm <- dtm1 / rowSums(dtm1) * 1000 # 1000語あたりの用語頻度

> ## 関心のある単語
> words <- c("although", "always", "commonly", "consequently",
+            "considerable", "enough", "there", "upon", "while", "whilst")

> ## これらの単語のみを選択
> tfm <- tfm[, words]

> ## ハミルトンによって書かれた論文(再掲)
> hamilton <- c(1, 6:9, 11:13, 15:17, 21:36, 59:61, 65:85)

> ## マディソンによって書かれた論文
> madison <- c(10, 14, 37:48, 58)

> author <- rep(NA, nrow(dtm1)) # 欠損値をもつベクトル

> author[hamilton] <- 1  # ハミルトンであれば1

> author[madison] <- -1  # マディソンであれば-1

> ## 回帰分析のためのデータフレーム
> author.data <- data.frame(author = author[c(hamilton, madison)], 
+                           tfm[c(hamilton, madison), ])

> hm.fit <- lm(author ~ upon + there + consequently + whilst, 
+              data = author.data)

> hm <- 18:20 # ハミルトンとマディソンの共著論文

> tf.hm <- as.data.frame(tfm[hm, ])

> ## ハミルトンとマディソンの共著論文の予測
> pred.hm <- predict(hm.fit, newdata = tf.hm)

> pred.hm # 予測値
  fp18.txt   fp19.txt   fp20.txt 
-0.3853885 -0.6102727 -0.1250502 

> jj <- c(2:5, 64) # ジョン・ジェイの著した論文

> tf.jj <- as.data.frame(tfm[jj, ])

> ## ハミルトンとマディソンの共著論文の予測
> pred.jj <- predict(hm.fit, newdata = tf.jj)

> pred.jj # 予測値
   fp02.txt    fp03.txt    fp04.txt    fp05.txt    fp64.txt 
-0.13624854 -1.35995768 -0.04175293 -0.26288400 -0.19032925