Rの使いかた
保持している変数の表示,削除
ls()
[1] "A" "R" "S" "U" "V"
rm(A)
ls()の結果,
[1] "R" "S" "U" "V" Aが削除されている.
連続して削除したい場合はrm(A,B,・・・)とコロンで区切る
ファイルからの読み出し,書き込み
Rを起動して,ファイルを指定する.
hensuu <- read.delim("samplefile.txt");
※ header=F とすると,
1行目に列名が書かれている場合はTを指定する.
1行目から値が書かれている場合にはFを指定する
今回も hensuu <- read.delim("samplefile.txt",F); とした
readで読み込む.delimがTAB区切りで読み込む.
write.table(OBJECT ,"writefile.txt", row.names = F, col.names=F, quote=F)
指定されたオブジェクトをファイルへと書き出す.
その際,行列など上や左についている添字を表示させたくあい場合は,row.nameやcol.name=Fとしておく.また,全ての値に""が付かないようにquote=Fとする.
行列を扱うとき
R <-svd(X)
で特異値分解できる!
特異値分解が正しくできているかを確認する.
R$u %*% diag(R$d) %*% t(R$v);
それぞれ, R = USVtとなることから
R(m×n行列):
R$u m×l行列
diag(R$d) l×l行列で,特異値を対角行列とする単位行列
t(R$v) n×l行列となる転置行列
行数,列数の求めかた
x の行数(データ数)を求める.
nrow(x)
x の列数(項目数)を求める.
ncol(x)
行列Aが存在し,消したい行(最終行,最終行-1)を指定する場合
A1 <- A[c(-(nrow(A)),-(nrow(A)-1)),, drop=F]
行列Aが存在し,消したい列(最終列,最終列-1)を指定する場合
A2 <- A[,c(-(ncol(A)),-(ncol(A)-1)),drop=F]
- 主に指定した行をループ文のように指定する方法(推奨)
行列Aが存在し,1行目から行数−2行目までを取得する
A3 <- A[1:(nrow(A)-2),,drop=F]
行列Aが存在し,1列目から列数−1列目までを取得する
A4 <- A[,1:(ncol(A)-1),drop=F]
それぞれの列の名前の付け方
ベクトルbの1列目を名前に置き換える
rownames(b)<-b[,1]
1列目は名前なので削除する
b[,-1]
rankの求めかた
qr(X)$rank
QR分解を用いた方法である.
vd() を利用してsingular valueの数を数えても求まる。
Rにおける関数
aa <- function(xx){
xx*xx*xx;
}
実行例
aa(3)
[1] 27
aa <- function(xx=1){
xx*xx*xx;
}
実行例
aa(3)
[1] 27
aa()
[1] 1
クラスタリングアルゴリズム
#クラスター分析に必要なパッケージ
stats を読み込む
library(stats)
#データの読み込みから整形
#主成分分析の場合と同じ
dat <- read.delim( “ファイル名”)
rowvar <- matrix(dat[,1])
rownames(dat) <- rowvar
datclust <- as.matrix(dat [,-1])
#クラスター分析を実施
(ここでは,個体間の距離測定に,「標準化ユークリッド距離」,クラスター間の
#距離の定義には
「最長距離法(complete linkage method)」を使うこととする)
#「標準化ユークリッド距離」は「標準化したデータ」の個体間の「ユークリッド距離」を求めたもの。
#色彩語頻度表を標準化
(平均0,分散を1に変換)するためにscale()コマンドを使用している。
#データを標準化することで高頻度の色彩語が過大評価されたり
,低頻度語が過小評価されたりするのを防ぐ
#ことができる
results <- hclust(dist(scale(datclust), method=”euclidean”))
#結果をdendrogram
(樹状図)として表示
plot(results)
クラスタ数を指定する.
new1 <- new[28:53,] ある行からある行を抽出する.
hc <- hclust(dist(new1),method = "complete")
完全
リンク法を用いて,クラスタリングした結果をhcに保持する
cutree(hc,k=5)
保持しているhcの各要素に対して,クラスタの数(k=5)を指定して各要素をグループわけする
文と単語の行列から単語の頻度を求める
行が文,列が単語となっている場合を仮定する
まず単語を行にもってきたいので転置して,単語ごとに行の総数を求める
(使われている単語の頻度を求める)
B <- t(A)
plot(rowSums(B),type="h")
文ごとのtf-idf単語頻度を合計して単語ごとにクラスタリング
単語のソート用に単語のインデックス用行列を作る(469×1行列)
x <- matrix(0:468,nrow=469,ncol=1)
SVDを用いた行圧縮ベクトルnewを生成する(列数の単語数は不変)
それを転置して置き換える
word <- t(new)
sumword <- rowSums(word)
s <- matrix(sumword,nrow=469,ncol=1)
x <- cbind(x,s)
x[order(x[,2]),] #2列目に対して全体を昇順にソートする
単語のクラスタリング
特定の行から行を抽出したベクトルをAとして,その転置行列をTとする
T <- t(A)
sumword <- rowSums(T)
s <- matrix(sumword,nrow= 469,ncol=1)
x <- matrix(0:468,nrow=469,ncol=1)
x <- cbind(x,s)
x[order(x[,2],decreasing = TRUE) ,] #1列目羽単語名,2列目は値,
#降順に表示
画像のプリント方法
results <- hclust(dist(scale(datclust),method="euclidean"))
plot(results)
png(filename = "cluster.png",width=500,height=500) #PNG形式で出力
plot(results) #出力したいオブジェクトをplot
dev.off() #デバイスを閉じます
最終更新:2007年11月16日 21:24