■google

■最近のコメント
■最近のトラックバック
■最近の記事
■月別アーカイブ
■ブログランキング
■ブログ検索

■ブロとも申請フォーム
■リンク
■RSSフィード
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | --:--:--
置換 replace
いつ必要になるかはわかりませんが、
いつかきっと使える、知っていて損しない関数を紹介する、
「使える関数」カテゴリを新たに設けました。

置換の関数

replace()

replace(対象とするオブジェクト,何番目か,置き換える数字or文字)

「何番目か」というのは条件を与えて、抽出することができます。
例:4を10に置換
x<-c(1,3,2,4,4,5)
replace(x,which(x==4),10)
x
[1] 1 3 2 4 4 5

スポンサードリンク


スポンサーサイト
使える関数 | 23:30:32 | Trackback(0) | Comments(0)
UCINET・NETDRAWを用いたネットワーク図の描画
Rではネットワーク分析関係は、igraphを使いますが、
分析をせずに、ただ単に、描画したいというのであれば、
UCINETのサブパッケージであるNetDrawが便利です。

そこで、今回はUCINETのインストールから描画までを説明します。

実は、別のところで説明する機会があったので、こちらには、
転記する形です。
1. UCINETのインストール
インストール先:http://www.analytictech.com/downloaduc6.htm
a) 下の方に表示されている“Latest version.”のDownloadをクリックする。

1

b) クリックすると、「ファイルのダウンロード」の画面が出てくるので、「実行」を選択し、あとはウィザードに従ってインストールを進める。
2


2. UCINETの起動
a) 「スタート」→「すべてのプログラム」→「Analytic Technologies」→「Ucinet 6 for Windows」 を選択する。
3

b) 試用版の場合、以下のようなエラーメッセージが出てくるので、OKをクリックする。
4

c) 起動画面
5

3. データの入力
a) ネットワーク図に使おうと思っているエクセルシートで準備しておく。
6

b) UCINETを起動し、SpreadSheetのアイコンをクリックする。すると、以下のような画面が表示される。
7

c) エクセルの該当する箇所をコピーし、UCINETの「Edit」→「paste」を選択。(ただし、スプレッドシートの左上のセルが選択されている状態で行う)
<エクセルの画面>
8


9

d) データの保存
Edit→Save as を選択し、適当な場所に名前を付けて保存しておく。


4.ネットワーク図の描画
a) NetDrawの起動
「スタート」→「すべてのプログラム」→「Analytic Technologies」→「NetDraw」を選択する。
10

b) 起動画面
11

d) ネットワーク図の描画
UCINETのファイルを開くコマンド をクリックして、先ほど作ったファイル(拡張子は##h)を選択し、File formatは「Ucinet」、Type of Dataは「1-Mode Network」にしたままで、OK。
12

ネットワーク図の例

こんな感じでざっとかけます。
あとは、ノードをドラッグして、図を調整したり、
雷のマーク(?)で自動調整もできます.

スポンサードリンク


ネットワーク分析 | 22:30:08 | Trackback(0) | Comments(0)
共起性尺度
共起尺度について説明します。

共起とは、まさに
ある一組の「共に起きる」程度を表したものです。

例えば、
amazonで本を検索するときに、
この商品を買っている人は、この本も買っています
と紹介されますが、それは、過去の購買データから、
共起が高い商品を勧めているのです。

共起尺度として、
主なものは、
共起頻度、Jaccard係数Simpson係数コサイン距離があります。

これらの指標について、「X」と「Y」という一組の共起性がどう測られるか示します
「X」と「Y」の単独での出現数を|X|、|Y|、
どちらか一方が出現した回数を|X∪Y|、
両方が出現した回数を|X∩Y|とします。

A)共起頻度
共起の回数であり、 |X∩Y|で計算される。

B)Jaccard係数
どちらかが出現したうち、何回同時に出現するかで、
|X∩Y|/|X∪Y|で計算される

C)Simpson係数
Jaccard係数の場合、多くと共起している場合、
小さくなってしまいます。(分母が大きくなる)
そういったときには、分母にminを使っているSimpson係数が便利
計算は、
|X∩Y|/min(|X|,|Y|)です

(D)コサイン距離
値としては、Jaccard係数Simpson係数の中間くらいです
ベクトル間の距離を測るものです
計算は、
|X∩Y|/sqrt(|X||Y|)です

どれも、0-1の間に収まります。
データによって、どの指標が適しているのかは違いますので
是非比べてみてください。

おすすめの参考文献は
松尾豊,友部博教,橋田浩一, 中島秀之,石塚満(2005)「Web上からの人間関係ネットワークの抽出」人工知能学会論文誌20巻1号
です

さて、これらの指標を計算するプログラムを紹介します。
以前書いたもので
今見るともっともっと簡潔に書けそうではあります。

関数を書くときには、
「後でも修正できるようにわかりやすく!」
「できるだけ早く計算できるように!」
というバランスが結構難しいのですね。。。

Jaccard係数
jaccard.function<-function(x){#jaccard係数を行列で返す関数。
#構造:キーワード毎の個人が要素になる集合を生成し、和集合、積集合を求める。
     for(i in 1:nrow(x)){
for(j in 1:ncol(x)){
if(x[i,j]!=0)x[i,j]<-i # 値が0以外のところに列番号を代入
}
}
J<-matrix(0,nrow=ncol(x),ncol=ncol(x)) #(キーワード数)×(キーワード数)の行列を準備
for(k in 1:ncol(x)){ #Jaccard係数の計算
for(l in 1:ncol(x)){
A<-x[,k] #あるワードに属する個人が要素となる集合A
A<-A[A != 0] #集合Aから0を取り除く。
B<-x[,l] #同様に、集合Bを生成。
B<-B[B != 0] #集合Bから0を取り除く。
J[k,l]<-(length(intersect(A,B))/length(union(A,B))) #積集合/和集合
}
}
rownames(J)<-colnames(x) #行名の付与
colnames(J)<-colnames(x) #列名の付与(行名、列名は同じ)
return(J) #jaccard係数の行列を返す。
}



Simpson係数 simpson.function<-function(x){#シンプソン係数の計算
simpson<-matrix(NA,ncol=ncol(x),nrow=ncol(x)) #Simpson係数を格納する行列
for(i in 1:ncol(x)){
for(j in 1:ncol(x)){ # Simpson係数の算出
simpson[i,j]<-(x[,i]%*%x[,j])/(min(sum(x[,i]),sum(x[,j])))
}
}
rownames(simpson)<-colnames(x) #行名の付与
colnames(simpson)<-colnames(x) #列名の付与(行名、列名は同じ)
return(simpson) #Simpson係数の行列を返す
}



コサイン距離
cosine.function<-function(x){#列ベクトルのコサイン距離の計算
col.similarity<-matrix(NA,ncol=ncol(x),nrow=ncol(x)) #コサイン距離を格納する行列
for(i in 1:ncol(x)){
for(j in 1:ncol(x)){ #コサイン距離の算出
col.similarity[i,j]<-(x[,i]%*%x[,j])/(sqrt(sum(x[,i]^2))*sqrt(sum(x[,j]^2)))
}
}
rownames(col.similarity)<-colnames(x) #列名の付与
colnames(col.similarity)<-colnames(x) #行名の付与
return(col.similarity) #コサイン距離の行列を返す
}



以下に例を示します。
多くの場合
Jacard係数 < コサイン距離 < Simpson係数
という傾向にあります。
共起尺度の例

すみません、クリックで見れます

共著関係の分析、
検索語で同時に検索される言葉、
レストランでの注文、
調理する食材・・・etc
色々な場面で使えそうです


※たいしたものではありませんが、研究等でこのプログラムを使われる際には、
必ず参考文献に入れてくださいね.

スポンサードリンク



プログラム | 23:45:45 | Trackback(0) | Comments(6)
微分
R微分もできます。

使う関数はDです。

例:
>F<- expression( 2+3*X+4*X^2+exp(2*X)+log(x) )
>D(F, "X")
3 + 4 * (2 * X) + exp(2 * X) * 2

Fで関数を定義して、
D(関数,"どの変数で微分するか")となります。
スポンサードリンク



その他 | 23:51:45 | Trackback(0) | Comments(0)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。