アットウィキロゴ

abline

今まで、私は「abline」を以下のように用いていた。

obj<-lm(y~x)
plot(x,y)
abline(obj)

では、具体的に回帰係数の切片項と傾きが既知であるときは

plot(x,y)
abline(切片,傾き)

で描画可能みたいです。知らなんだ。

Rで地図表示・・・境界線の色変更

いつも忘れてしまう、引数。

plot(shape, border="red")

R graphics

T先生からお借りしている「R graphics」(Murrell;2006)。非常に役立つ「R」のグラフィクス例。あと、前回セミナーで発表した内容(Rのグラフィクスマージンの設定)が、図解で詳しく載っています。

実際の出力画像とRのコードが章ごとにセットで載せてある公式サイトも充実。

「combn」

組合せ(combination)を返してくれる関数。

combn(n,m)で与える。nはベクトルか数値,mは数値。長さmの組合せすべてを返す。

#例

combn(5,2)

「par()」のこと

S-PlusとRでは「par()」での返り値が違うところがあります。 ・S-Plusでは、今描いている図の1座標(X方向、Y方向)が、何インチか返してくれます。「uin」

・Rでは、自分で計算しないといけません。

#計算法

ゼミ資料の2月4日のtextファイルを参照。

「xtable」で返す値の桁数

Rで「xtable」という、データフレームを「TEXの表のコマンド」にして返す関数があります。 summary同様に、桁数指定をする引数があります。 例えば、 xtable(データフレーム,digits=6)

「summary」で返す値の桁数

Rで「summary」という、要約等計量を返す関数があります。 次の例を考えます。xは下記のように小数点以下6桁のデータ5つです。 x <- c(-0.765043 0.134542 1.678039 0.972267 1.992811) summary(x)

  Min.   1st Qu.    Median      Mean    3rd Qu.      Max. 
-0.7650    0.1345    0.9723    0.8025    1.6780    1.9930

と返されます。返された要約等計量は小数以下4桁です。小数以下6桁で要約等計量を返すには

summary(x, digits =6)

と、digitsで指定する必要がある。

パッケージ「spgwr」の関数「gwr」で返されるAICの値

パッケージ「spgwr」の関数「gwr」で返されるGWRモデルのAICの値は非常に複雑です。

このAIC値はHuich(1998)の論文「Smoothing parameter selection in nonparametric regression using an improved Akaike Information Criterion.」の考え方を参考にしているものと思われます。

lm.wfit

重み付き回帰式を行っている関数「lm.wfit」があります。

この関数、実はFortranのプログラムを使っているのです。

もっと詳しく言うと、回帰式の係数のt統計量を計算するのに必要なデザイン行列Xの重み付き分散共分散行列の逆行列を計算するのにFortranのプログラムを使っています。

そのFortranのソースはどこにあるどんな名前のファイルかと言うと・・・、

フォルダ「R-2.6.1\src\appl」の中にある「dqrls.f」です。

僕はFortranのプログラムはさっぱり分かりませんでした。

ls(package:"パッケージ名")

ls(package:"パッケージ名")でパッケージに入っている関数名が見れる。結構使えます◎

tempdir

こんな関数を知りました。一時的にファイルを置くディレクトリの作成をしてくれます。関数に組み込ませたり応用ができそう。

textConnection

tryoさんより、「textConnection」を教えてもらいました。

#Rjpwikiより、「textConnection」の使用例

x <- "123, 12.3, 1.23, 1.23e-1, 1.23e1" # 数値列を表す文字列

scan(textConnection(x), sep=",")

[1] 123.000 12.300 1.230 0.123 12.300

今まで、"123, 12.3, 1.23, 1.23e-1, 1.23e1"の「,」をエディタで一つ一つ消したりしてて非常にめんどくさいと思ってたが、「textConnection」は便利!

which.minとwhich.max

こんなに便利な関数があるのを知りませんでした。

x<-sample(10)

x

[1] 3 2 6 4 7 10 9 1 5 8

which.min(x)

[1] 8

which.max(x)

[1] 6

今までは

which(x==min(x))とかwhich(x==max(x))

なんてことしてた・・・。

アメリカ合衆国オハイオ州コロンバス市犯罪データについて

空間統計学の手法を用いる際、論文やRでよくサンプルデータとして見かけるのが「アメリカ合衆国オハイオ州コロンバス市犯罪データ」です。自分も犯罪データを用いて解析しているので参考にしていますが、Rの中に2種類のコロンバスデータがあるのを確認しました。

1.1988年にAnselinによって用意されたデータ・・・library(spdep)

2.1995年にAnselinによって用意されたデータ・・・library(spgwr)

今まで「2」の1995年のデータを使って解析をして「論文と結果が違う!」と悩んでましたが、論文が使っているのは「1」のデータでした

#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
#追記

上記の「1」「2」ともに属性値の並びが正しくないと思われます。その理由は「A Family of Geographically Weighted Regression Models」(著:James P. LeSage)のP32,33のコロンバス市の地図の地区番号と上記「1」「2」の地区番号(緯度、経度も)が異なってるのを確認したから。

なので論文の通りに結果を出そうと思うと属性値の並び替えを行う必要があるようです。

僕の大ミス

行列を作ってくれるコマンド「matrix」について

僕の勘違い

matrix((1:9),3,3)

とコマンドを打つと

1 4 7

2 5 8

3 6 9

という行列が作成されます。

僕はこれを転置した行列ができると勘違いしてました。

データのTEXコマンド出力

TEXでは表を作るのに、かなり手間がかかります。そこで、RのデータをTEXの表作成コマンドに変換して出力してくれるすっごく便利なコマンド「xtable」があります(パッケージ「xtable」)。

(例)

(resultcut[1:3,6:8])

s.t s.R s.e
大井 8.604378 7.10345 1.500928
吉宗 19.870682 12.05365 7.817034
牟佐 21.293025 11.49226 9.800770
#library

#(xtable(resultcut[1:3,6:8]))

% latex table generated in R 2.4.1 by xtable 1.4-3 package

% Mon Sep 10 21:03:42 2007

\begin{table}[ht]

\begin{center}

\begin{tabular}{rrrr}

\hline

& s.t & s.R & s.e \\

\hline

大井 & 8.60 & 7.10 & 1.50 \\

吉宗 & 19.87 & 12.05 & 7.82 \\

牟佐 & 21.29 & 11.49 & 9.80 \\

\hline

\end{tabular}

\end{center}

\end{table}

卒論のとき、このコマンドを知っていれば・・・

#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。

shapefileの切り取り⇒新たなshapefileとして保存

#1.shapefileの読み込み

shape<-read.shape("sample.shp")

#2.polygonファイルの作成

shape.poly<-Map2poly(shape)

#3.属性値データの取り出し

shape.df<-shape$att.data

#4.polygonファイルの切り出し、属性値データの切り出し

newpoly<-subset(shape.poly,切り出す条件式(TRUE or FALSE))

newdf<-subset(shape.df,切り出す条件式(TRUE or FALSE))

#5.新たにshapefileとして保存

write.polylistShape(newpoly,newdf,新しいshapefileの名前)

以上で完成です。

例えば、日本地図から岡山だけ取り出したいときなど便利です

#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。

文字列部分マッチング pmatch

国勢調査のデータを処理する際にすごく便利。

(例)

以下のname1,name2に重複文字列(大阪)があるのに注意。

name1<-c("岡山","広島","大阪","倉敷","大阪")

name2<-c("大阪","岡山","倉敷","広島","大阪")

pmatch(name1,name2)

[1] 2 4 1 3 5

name2[1],name[5]で重複している「大阪」を区別して、結果を返してくれています◎

library「spdep」

空間データの解析に非常に助けとなる「spdep」。少し変更点があります。

  • 関数「poly2nb」

「The R Book」の第11章(p253)でも、poly2nbは使われております。

library(spdep)

Ola.poly<-Map2poly(Ola)

Ola.bbs<-Map2bbs(Ola)

Ola.nb<-poly2nb(Ola.poly,Ola.bbs)

Ola.w<-nb2listw(Ola.w,style="W")

と記載されていますが、現在のspdepでは

library(spdep)

Ola.poly<-Map2poly(Ola)

Ola.bbs<-Map2bbs(Ola)

Ola.nb<-poly2nb(Ola.poly,Ola.bbs)

Ola.w<-nb2listw(Ola.w,style="W")   でOKです。

Ola.bbsはpoly2nbの中で計算してくれるようになっています。


名前:
コメント:
  • >>ls(package:パッケージ名) これは使えます!^口^ありがとうございます。 -- tryo (2008-01-28 11:15:36)
  • 一番上の行列を書けないので、分かり次第アップです! -- yohshimo (2007-10-22 21:52:41)
  • コロンバス市のデータについてはまだまだ勉強不足のことが多いので、分かり次第随時メモしていきます。 -- yohshimo (2007-10-01 16:33:34)
最終更新:2008年02月22日 19:13