9/27 都市がすきだということ

集団としての人が好きで,でも個別的に好きな人はそんなに多くはないの,不思議な感じがする.わたしは性善説を無意識に信じているんだろうか.それとも顔を持たない集団としての社会に惹かれているというそのもの自体になにかあるんだろうか.

都市の世界では地理が好きなこと,空間が好きなことが一番にあって,それで都市が好きな人が多いような気がしている.わたしは「粒子」「重層」「ダイナミクス」「人間」「意思」みたいなことが好きでここにいるので,ちょっと珍しいのかなという気もしている.

 

数値計算

f(x)=0を満たす解を求める.

対象の関数を定義→uniroot(関数名,範囲の最小値,範囲の最大値)→出力$root

多項式ならpolyroot(昇順で多項式係数)

微分

対象の関数を定義→D(数式,微分する変数)

このDという関数では,微分したあとの式が出るが,これを関数にしてさらに計算はできない.結果の数式を使って計算を行いたいときには,

deriv(~数式,微分する変数,func=T)

因数にhessian=Tを与えるとhessianも求められる.

積分

integrate(被積分関数積分範囲下限,積分範囲上限)

多次元もパッケージをインストールすれば積分可能.

最大化・最小化,数理計画法

www.okadajp.org

ここが詳しくてよい.optim().

  • par
目的関数のベクトル因数に対する初期値.この設定の仕方は上記HP参照に頑張るしかない模様.
  • fn
最小化or最大化する目的変数.
  • method
最適化手法を選ぶ."Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN".
  • gr
"BFGS", "CG", "L-BFGS-Bに対して与える一階微分
  • lower, upper
"L-BFGS-B"法に対して与える変数の下限と上限.
  • control
制御パラメータのリスト.trace=非負整数.途中結果が表示される度.fnscal=最適化途中でfnとgrに適用される比例定数.通常optim()は最小化を行うのだが,最大化にしたいときは因数control内のリストfnscaleに負の値を与える(-1とか).parscale=パラメータの変化の誇張・抑制ができる.
  • hessian
T or F.数値的に計算したへシアンの値を返すべきかどうか.
 

出力は$par:結果,$value:対数尤度

 

データフレーム

クラスがdata.frameのリストのこと.数値ベクトル,文字ベクトル,因子ベクトルなど異なる型のデータをまとめて一つの変数にしているというイメージ.

行列とはすべての行・列がラベルを持っているという点で異なる.

行→観測値,列→変数(項目)

data.frame(列名1=ベクトル1, 列名2=ベクトル2, ...)でデータフレーム作成できるほか,read.table()で外部ファイルの読み込みもできる.

データフレームの形にすることで,例えばsummary()を使えば列ごと(つまり変数ごと)の特徴量が表示される.数値ベクトルなら最小値・4分位点・中央値・平均・4分の3位点,最大値,因子ベクトルなら頻度が表示される.plot()で対散布図も描ける.

  • データフレーム集計

apply(データ[,範囲指定],1or2, 関数):1なら行,2なら列ごとに関数を適用

split(データ,データ$列名):指定列のカテゴリごとにデータを分割

split(データ,データ$列名>0など条件式):条件式でデータを分割

by(データ[,範囲指定],データ$列名, 関数):指定範囲に,列名のカテゴリごとに関数を適用

このほかaggregateを使うと,カテゴリで分割したあとそれぞれに対して別カテゴリの平均を求める,といったことができる.

データ編集では単に並べて結合したり,追加したり削除したりができるほか,mergeを使うと共通する変数(例えばID)の値が同じもの同士を結合してくれる.引数をall=TRUEと指定しておけばすべての行を残してくれる.

そのほか,as.matrixを使うとデータフレームを行列に変換できる.

  •  データの読み込み

外部データを読み込んだ時,文字だと自動的に因子型(要するにカテゴリ)とされることがある.これを防ぐためには,引数stringAsFactorsにFALSEを指定するか,引数colClassesに読み込む列の方を指定すればよい.

回帰分析

y=Xβ+ε

y:目的変数,X:説明変数

関数lm()で線形モデルのあてはめを行うことができる.

  • 単回帰モデル記述

引数として書くとき,切片項(β0.定数項)は書かなくてもいい.

y~x 

y~1+x

は同じ「y=切片+ⅹ」を指す.1にのかわりに0や-1を入れた場合はどちらも「切片項を除外する」ということを意味し,つまり「原点を通る」回帰モデルということになる.

乱数の生成

単に0~1の間の乱数:runif

特定の分布に従う乱数も生成できる.正規分布に従うrnorm(個数,mean=平均,sd=標準偏差)など.

 

あと残っているのは統計の詳細とグラフィックスになったのでひとまずR-Tipsは終わりにして統計のRの本のほうに移ろうかなと.

 

以下「R統計解析パーフェクトマスター」の勉強.

 

データ型

基本データ型(モード型)とクラス型の二種.

  • 基本データ型:生データ(リテラル)をプログラムで扱えるように種類分けしたもの.mode()で調べられる

numeric(実数),character(文字列),logical(理論値),complex(複素数),row(バイナリ)※,list(リスト)

※00 00 00 とか

  • クラス型:独自の仕組みによって作られた型.class()で調べられる

matrix(行列),array(配列),factor(因子),data.frame(データフレーム)

行列と配列の違い→行列が二次元,配列が多次元(複数の数列をまとめて管理).

因子は要素を整数値に置き換えて管理するもの.データサイズが大きくてもメモリの消費量が少ないという特徴がある

[注]データ型を特定のものかどうかチェックする関数がセットされているのは,TRUE or FALSEで判断してそれ以降の処理につなげたい時があるから.

データフレームからのデータの取り出しの注意

・行データはリストとしてのみ取り出せる

・列データはリスト名[インデックス]で書くと,リストで取り出されてベクトルとして扱えないので注意

文字コード

RのデフォルトはUTF-8

windowsで作成したファイルはSHIFT-JISを拡張したCP932が標準.

便利な関数:データを読み込んでx1, x2, …に順番に代入していく

  • sprintf(fmt, 組み合わせる要素)

fmt:書式付きの文字列.x1, x2, …とか.「x%d」とすると「%d」の部分に整数値が埋め込まれる.

組み合わせる要素:mtに渡す値.実数,整数,文字列,論理値が設定できる.

x:ベクトルの名前

value:ベクトルに代入する値

>j <- length(data[1,])

>for(i in c(1:j)){

 assign(

 sprintf("x%d", i),

 data[,i]

 )

}