今まで、私は「abline」を以下のように用いていた。
obj<-lm(y~x)
plot(x,y)
abline(obj)
では、具体的に回帰係数の切片項と傾きが既知であるときは
plot(x,y)
abline(切片,傾き)
で描画可能みたいです。知らなんだ。
いつも忘れてしまう、引数。
plot(shape, border="red")
T先生からお借りしている「R graphics」(Murrell;2006)。非常に役立つ「R」のグラフィクス例。あと、前回セミナーで発表した内容(Rのグラフィクスマージンの設定)が、図解で詳しく載っています。
実際の出力画像とRのコードが章ごとにセットで載せてある公式サイトも充実。
組合せ(combination)を返してくれる関数。
combn(n,m)で与える。nはベクトルか数値,mは数値。長さmの組合せすべてを返す。
#例combn(5,2)
S-PlusとRでは「par()」での返り値が違うところがあります。 ・S-Plusでは、今描いている図の1座標(X方向、Y方向)が、何インチか返してくれます。「uin」
・Rでは、自分で計算しないといけません。
#計算法ゼミ資料の2月4日のtextファイルを参照。
Rで「xtable」という、データフレームを「TEXの表のコマンド」にして返す関数があります。 summary同様に、桁数指定をする引数があります。 例えば、 xtable(データフレーム,digits=6)
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」で返されるGWRモデルのAICの値は非常に複雑です。
このAIC値はHuich(1998)の論文「Smoothing parameter selection in nonparametric regression using an improved Akaike Information Criterion.」の考え方を参考にしているものと思われます。
重み付き回帰式を行っている関数「lm.wfit」があります。
この関数、実はFortranのプログラムを使っているのです。
もっと詳しく言うと、回帰式の係数のt統計量を計算するのに必要なデザイン行列Xの重み付き分散共分散行列の逆行列を計算するのにFortranのプログラムを使っています。
そのFortranのソースはどこにあるどんな名前のファイルかと言うと・・・、
フォルダ「R-2.6.1\src\appl」の中にある「dqrls.f」です。
僕はFortranのプログラムはさっぱり分かりませんでした。
ls(package:"パッケージ名")でパッケージに入っている関数名が見れる。結構使えます◎
こんな関数を知りました。一時的にファイルを置くディレクトリの作成をしてくれます。関数に組み込ませたり応用ができそう。
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」は便利!
こんなに便利な関数があるのを知りませんでした。
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」のデータでした
上記の「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では表を作るのに、かなり手間がかかります。そこで、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 |
#(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}
卒論のとき、このコマンドを知っていれば・・・
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の名前)
以上で完成です。
例えば、日本地図から岡山だけ取り出したいときなど便利です
国勢調査のデータを処理する際にすごく便利。
(例)
以下のname1,name2に重複文字列(大阪)があるのに注意。
name1<-c("岡山","広島","大阪","倉敷","大阪")
name2<-c("大阪","岡山","倉敷","広島","大阪")
pmatch(name1,name2)
[1] 2 4 1 3 5
name2[1],name[5]で重複している「大阪」を区別して、結果を返してくれています◎
空間データの解析に非常に助けとなる「spdep」。少し変更点があります。
「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の中で計算してくれるようになっています。