[掲示板へもどる]
一括表示

  [No.1029] クラスター分析の描画エラーについて 投稿者:kinjo  投稿日:2012/08/21(Tue) 15:45:18

樋口先生

こんにちは。またご教示いただきたいことがあり書き込みいたしました。

現在、「動詞のて形+くれる/もらう/やる」の頻度が小説中にどのくらいあるのかを調べております。コーディングルールを書き、[ツール→コーディング→章・節・段落ごとの集計」ではうまい具合に各作品ごとに現れる「てくれる」「てもらう」・・・などの頻度が得られました。

しかし、同じように
ツール→コーディング→階層的クラスター→コーディングルールファイルを指定をし、「コーディング単位」で「段落」を指定すると、「てくれる」「てもらう」などがクラスターに分けられてしまいます。今回はは、このコードをつかって、10の作品(=小説)をクラスター分析したいのですが、コーディング単位をH1にすると、次のエラーメッセージが現れrます:

Rを用いた推定または描画に失敗しました
<simpleError in matrix(seg_cl,byrow = T, ncol = 5): attempt to set an attribute on NULL>

これは対処のしかたがございますでしょうか。
お手すきの際で結構ですので、ご教示いただければと存じます。
どうぞよろしくお願いいたします。


  [No.1030] Re: クラスター分析の描画エラーについて 投稿者:HIGUCHI Koichi  投稿日:2012/08/21(Tue) 16:12:26

こんにちは、樋口です。書き込みありがとうございます。

「ツール」→「コーディング」→「階層的クラスター分析」では、コードの
クラスター化を行います。したがって、文書のクラスター化を行うためには
別の方法をとる必要があります。

しかし、エラーが出ているのが気になりますね。本来は同様にコードのクラ
スター分析の結果が表示されるはずなのですが...

ここで、「ツール」→「コーディング」→「対応分析」の画面で、
 ・左の「コーディング単位」を「文」に
 ・右の「集計単位」を「H1」に
設定して実行しますと、結果がでますでしょうか、それともエラーになります
でしょうか。

もしここでエラーになりますと、クラスター分析に進めませんので原因を追及
する必要があります。この場合には、以下のような手順で.rファイルを作成し、
メールでお送りいただくことは可能でしょうか?

----------------------------------------------------------------------
0. KH Coderを終了する
1. KH Coderをインスト-ルした場所の「config」フォルダ内にある、
「coder.ini」ファイルを開き、「r_plot_debug 0」という箇所の「0」
を「1」に変更して上書き保存 ※「coder.ini」はメモ帳等のテキスト
エディタで開くことができます。
2. KH Coderを起動してエラーが出る操作(クラスター分析 or 対応分析)
をもう一度行う
3. 分析対象ファイルがある場所の「coder_data」フォルダ内に、「分析
対象ファイル名_cod_corresp_1.r」といった、「.r」で終わる名前の
ファイルが(場合によっては複数)作成されているので、これらのファイ
ルを添付
----------------------------------------------------------------------

なにとぞよろしくお願いいたします。

※次の返信は夜遅めになってしまうかと思います。ご容赦ください。


  [No.1031] Re: クラスター分析の描画エラーについて 投稿者:kinjo  投稿日:2012/08/21(Tue) 16:22:12


> ここで、「ツール」→「コーディング」→「対応分析」の画面で、
>  ・左の「コーディング単位」を「文」に
>  ・右の「集計単位」を「H1」に
> 設定して実行しますと、結果がでますでしょうか、それともエラーになります
> でしょうか。
>

ご指示のとおりにいたしましたところ、対応分析の結果が描画されました。こちらはうまくいっております。

文書のクラスター化には別の方法をとらねばならぬとのこと、お時間のあるときでかまいませんのでご教示よろしくお願いいたします。


  [No.1032] Re: コーディング結果を使っての、文書のクラスター分析 投稿者:HIGUCHI Koichi  投稿日:2012/08/21(Tue) 20:45:45

こんにちは、樋口です。ご返信ありがとうございます。

コーディングの結果、それも「章・節・段落ごとの集計」の結果を使って、文
書(小説)のクラスター分析をされるということですね。コーディングによっ
て、分析者が「てくれる」のような注目したいポイントを指定し、そのポイン
トにもとづいて文書をクラスター化するという機能。そういえば、KH Coderに
はこの機能がありませんでしたね(汗。

文書のクラスター分析を行う機能がまったく無いわけでは無いのですが、「ツ
ール」→「文書」→「クラスター分析」では自動抽出した語を使っての分析に
なります。コーディング結果(「章・節・段落ごとの集計」結果)を使って分
析を行うためには、別途、以下のような手順が必要になります。

(1)「ツール」→「コーディング」→「対応分析」の画面で、
 ・左の「コーディング単位」を「文」に
 ・右の「集計単位」を「H1」に
設定して実行します。

(2)下記スライドの5枚目の手順まで進め、R上で対応分析を実行します。
http://www.slideshare.net/khcoder/r1kh-coder

ここでR上で「d」と入力してエンターキーを押して見て下さい。「章・節・段
落ごとの集計」結果と同じ内容が表示されるはずです(パーセンテージがなく
度数だけですが)。

(3)この「d」に格納されたデータを使って、クラスター分析を行いましょう。
以下のコマンドをRのコンソールに貼り付けてエンターキーを押して下さい。

#---------------------------------------------------------------------
# クラスター分析
library(amap)
fd <- t( scale( t(d) ) )
cluster <- hcluster( fd, method="euclidean", link="ward")

# プロット
par( mai=c(0,0,0,0), mar=c(1,2,1,0), omi=c(0,0,0,0), oma=c(0,0,0,0) )
plot(cluster,ann=0,hang=-1)
#---------------------------------------------------------------------

これでクラスター分析のデンドログラムが描画されたかと思います。上のコマ
ンドではEuclid距離にもとづくWard法になります。さらに、「3つのクラスタ
ーに分けて、境界線を引きたい」という場合には、次のコマンドを実行します。

#---------------------------------------------------------------------
rect.hclust(cluster, k=3, border="#FF8B00FF")
#---------------------------------------------------------------------

プロット上で右クリックし「Copy as metafile」を選択すれば、Word等に貼り
付けることができます。


以上の手順で、「章・節・段落ごとの集計」結果を使った文書のクラスター分
析を行うことができます。結果としては、おおむね、対応分析で近くに布置さ
れた文書(小説)のペアが、同じクラスターに入っている場合が多いと思いま
す。

もしご不明の点、上手くいかない箇所などございましたらご遠慮なくお知らせ
ください。どうぞよろしくお願いいたします。


  [No.1033] Re: コーディング結果を使っての、文書のクラスター分析 投稿者:kinjo  投稿日:2012/08/21(Tue) 23:53:51

樋口先生

kinjoです。
先生のご指示通り操作を行ったところ、無事クラスター分析が行われました。感謝申し上げます。ありがとうございました。

> 以上の手順で、「章・節・段落ごとの集計」結果を使った文書のクラスター分
> 析を行うことができます。結果としては、おおむね、対応分析で近くに布置さ
> れた文書(小説)のペアが、同じクラスターに入っている場合が多いと思いま
> す。

対応分析とクラスター分析では似たような結果が得られるとのこと。このことも初心者ゆえ全く知りませんでした。勉強させていただきました。ありがとうございました。

望むような結果になったとは言えませんが、今回の結果がきちんとしたペーパーの形になるよう、これから結果について十分考えていきたいと思います。ひとまず、結果がでて一安心しました。


そちらはまだ残暑が厳しいでしょうか。
どうか体調を崩されませんように、お体に気を付けください。

多謝


  [No.1034] Re: コーディング結果を使っての、文書のクラスター分析 投稿者:HIGUCHI Koichi  投稿日:2012/08/22(Wed) 01:00:12

こんにちは、樋口です。書き込みありがとうございます。

分析結果が出ましたようでなによりです。

ただ、ひとつお詫びなのですが、先ほどのコマンドでは、非常に汎用的な標準
化を文書ごとに行ってしまいました。先ほどのコマンドを実行後に「fd」と入
力してエンターを押していただきますと、標準化後の値、すなわちクラスター
分析に使われたデータがでます。どの行(文書)も、すべてのコードの値を足
すと、0になるという形で(平均0に)標準化してしまっています。

これは非常に汎用的に使われる方法で、私もさきほどうっかり使ってしまいま
した。しかし文章データでは「データ100語あたり」とか「データ1000語あた
り」何回出現しているか、という標準化がより多く使用されているように思い
ます。
※「○語あたり」の箇所が100でも1000でも、今回の分析結果は変わりません。

ただしコーディングでは、条件に合致する文の数を数えていますから、今回の
場合は「100文あたりいくつの文に『てもらう』が含まれるか」といった数値
に標準化することになります。この形で標準化して分析するコマンドは以下の
ようになります。

#---------------------------------------------------------------------
# クラスター分析
library(amap)
std <- d
for (i in 1:nrow(std)){
std[i,] <- std[i,] / table(v)[i] * 100
}
cluster <- hcluster( std, method="euclid", link="ward")

# プロット
par( mai=c(0,0,0,0), mar=c(1,2,1,0), omi=c(0,0,0,0), oma=c(0,0,0,0) )
plot(cluster,ann=0,hang=-1)
#---------------------------------------------------------------------

もしも標準化を行わずに、条件に合致した文の数をそのまま使って分析する場
合には、コマンドは以下のようになります。この場合には、長い文書(小説)
では数値が全体に大きめになるでしょうから、長い文書同士、短い文書同士が
同じクラスターに入りやすくなります。標準化を行わない場合、文書の長さも
クラスター化の基準になるということです。

#---------------------------------------------------------------------
# クラスター分析
library(amap)
cluster <- hcluster( d, method="euclid", link="ward")

# プロット
par( mai=c(0,0,0,0), mar=c(1,2,1,0), omi=c(0,0,0,0), oma=c(0,0,0,0) )
plot(cluster,ann=0,hang=-1)
#---------------------------------------------------------------------

先の書き込みの汎用的な標準化よりも、上記の「100文あたり...」という標準
化の方が、もしかすると、より実感に近いクラスターが得られる可能性があり
ます。適宜、お試しいただけましたら幸いです。

こちらも暑いのですが、そちらもさぞやと存じます。御身おいといの上、ご活
躍くださいますよう祈念申し上げます。


  [No.1035] Re: コーディング結果を使っての、文書のクラスター分析 投稿者:kinjo  投稿日:2012/08/22(Wed) 08:51:57

樋口先生

おはようございます。
先生がおっしゃる「標準化」のこと、うっかりしておりました。ご指摘通り、小説等は作品によって長さが異なるため、単語の出現率も粗頻度ではなく、相対頻度で計算するのが通例です。ご指摘ありがとうございました。

>
> ただしコーディングでは、条件に合致する文の数を数えていますから、今回の
> 場合は「100文あたりいくつの文に『てもらう』が含まれるか」といった数値
> に標準化することになります。この形で標準化して分析するコマンドは以下の
> ようになります。
>
> #---------------------------------------------------------------------
> # クラスター分析
> library(amap)
> std <- d
> for (i in 1:nrow(std)){
> std[i,] <- std[i,] / table(v)[i] * 100
> }
> cluster <- hcluster( std, method="euclid", link="ward")
>
> # プロット
> par( mai=c(0,0,0,0), mar=c(1,2,1,0), omi=c(0,0,0,0), oma=c(0,0,0,0) )
> plot(cluster,ann=0,hang=-1)
> #---------------------------------------------------------------------
>

このコマンドで言いますと、5行目にあらわれる「100」という数字で「100文あたりの頻度」を指定することになりますでしょうか。

さっそくこの新しいコマンドを試して見ました。また違った結果が出てきましたが、先のものよりは少し目標に近くなった・・かもしれません(笑)。


今回も丁寧にご回答いただき感謝申し上げます。ありがとうございました。


  [No.1036] Re: コーディング結果を使っての、文書のクラスター分析 投稿者:kinjo  投稿日:2012/08/22(Wed) 09:19:26

樋口先生


何度も申し訳ありません。
新しく100文ごとに計算した頻度表はどのようにすれば得られるでしょうか?また、その頻度表を元に、今度は(教えていただいた手順とは逆に)対応分析の描画をする方法もございますでしょうか。

お時間があるときで構いませんので、ご教示よろしくお願いいたします。


  [No.1037] Re: コーディング結果を使っての、文書のクラスター分析 投稿者:HIGUCHI Koichi  投稿日:2012/08/22(Wed) 10:04:49

こんにちは、樋口です。書き込みありがとうございます。

お書きいただいた通り、5行目の「100」で、「100文あたり」という指定を行
っております。ここは100ではなく、1000にしても1にしても、クラスター分析
の結果は変わらないはずです。

このコマンド実行後に「std」と入力してエンターキーを押すことで、100文あ
たりの頻度表が表示されます。

100文あたりに標準化すると数値が整数では無く、少数になります。この都合
から、対応分析ではなく、その親類(?)の主成分分析を使うことになりまし
て、コマンドは以下のようになります。

#--------------------------------------------------------------------
pc <- prcomp(std)
par( mai=c(0,0,0,0), mar=c(2,2,2,2), omi=c(0,0,0,0), oma=c(0,0,0,0) )
biplot(pc)
summary(pc)
#--------------------------------------------------------------------

どうぞよろしくお願いいたします。

p.s.
これから2日ほど山奥に出かける都合で音信不通になる予定です。ご容赦くだ
さいませ。


  [No.1038] Re: コーディング結果を使っての、文書のクラスター分析 投稿者:kinjo  投稿日:2012/08/22(Wed) 10:26:22

樋口先生


> お書きいただいた通り、5行目の「100」で、「100文あたり」という指定を行
> っております。ここは100ではなく、1000にしても1にしても、クラスター分析
> の結果は変わらないはずです。

はい、わかりました。ありがとうございます。

> このコマンド実行後に「std」と入力してエンターキーを押すことで、100文あ
> たりの頻度表が表示されます。

確認できました。

>
> 100文あたりに標準化すると数値が整数では無く、少数になります。この都合
> から、対応分析ではなく、その親類(?)の主成分分析を使うことになりまし
> て、コマンドは以下のようになります。
>
> #--------------------------------------------------------------------
> pc <- prcomp(std)
> par( mai=c(0,0,0,0), mar=c(2,2,2,2), omi=c(0,0,0,0), oma=c(0,0,0,0) )
> biplot(pc)
> summary(pc)
> #--------------------------------------------------------------------

ご指示の通り実行したところ、描画が上手くいきました。
お忙しい中、ご回答くださりありがとうございました。是非活用させていただきます。