dummiesパッケージ
"dummies"
ダミー変数を作るためのパッケージ.
endogenous の sampselect が factor に対応していないので導入.
サンプルコード参照
> letters <- c( "a", "a", "b", "c", "d", "e", "f", "g", "h", "b", "b" )
> dummy( as.character(letters) )
as.character(letters)a as.character(letters)b as.character(letters)c
[1,] 1 0 0
[2,] 1 0 0
[3,] 0 1 0
[4,] 0 0 1
[5,] 0 0 0
[6,] 0 0 0
[7,] 0 0 0
[8,] 0 0 0
[9,] 0 0 0
[10,] 0 1 0
[11,] 0 1 0
as.character(letters)d as.character(letters)e as.character(letters)f
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 0 0 0
[5,] 1 0 0
[6,] 0 1 0
[7,] 0 0 1
[8,] 0 0 0
[9,] 0 0 0
[10,] 0 0 0
[11,] 0 0 0
as.character(letters)g as.character(letters)h
[1,] 0 0
[2,] 0 0
[3,] 0 0
[4,] 0 0
[5,] 0 0
[6,] 0 0
[7,] 0 0
[8,] 1 0
[9,] 0 1
[10,] 0 0
[11,] 0 0
> dummy( as.character(letters) )
as.character(letters)a as.character(letters)b as.character(letters)c
[1,] 1 0 0
[2,] 1 0 0
[3,] 0 1 0
[4,] 0 0 1
[5,] 0 0 0
[6,] 0 0 0
[7,] 0 0 0
[8,] 0 0 0
[9,] 0 0 0
[10,] 0 1 0
[11,] 0 1 0
as.character(letters)d as.character(letters)e as.character(letters)f
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 0 0 0
[5,] 1 0 0
[6,] 0 1 0
[7,] 0 0 1
[8,] 0 0 0
[9,] 0 0 0
[10,] 0 0 0
[11,] 0 0 0
as.character(letters)g as.character(letters)h
[1,] 0 0
[2,] 0 0
[3,] 0 0
[4,] 0 0
[5,] 0 0
[6,] 0 0
[7,] 0 0
[8,] 1 0
[9,] 0 1
[10,] 0 0
[11,] 0 0
ベクトルもしくはデータフレームに対して0,1のダミー変数を作ってくれる.
以下,オプションについて.
> l <- as.factor(letters)[ c(1:3,1:6,4:6) ]
> l
[1] a a b a a b c d e c d e
Levels: a b c d e f g h
> l
[1] a a b a a b c d e c d e
Levels: a b c d e f g h
普通に作るとa~eのみでダミーが作られる↓
> dummy(l)
la lb lc ld le
[1,] 1 0 0 0 0
[2,] 1 0 0 0 0
[3,] 0 1 0 0 0 ...
la lb lc ld le
[1,] 1 0 0 0 0
[2,] 1 0 0 0 0
[3,] 0 1 0 0 0 ...
drop = FALSE を入れると,未使用のダミーも残したまま作ってくれる.
(基本的には入れとくべきな気がする)
l の要素は a~e であるが作られたダミーは↓
> dummy(l, drop=FALSE)
la lb lc ld le lf lg lh
[1,] 1 0 0 0 0 0 0 0
[2,] 1 0 0 0 0 0 0 0
[3,] 0 1 0 0 0 0 0 0
[4,] 1 0 0 0 0 0 0 0
[5,] 1 0 0 0 0 0 0 0 ...
la lb lc ld le lf lg lh
[1,] 1 0 0 0 0 0 0 0
[2,] 1 0 0 0 0 0 0 0
[3,] 0 1 0 0 0 0 0 0
[4,] 1 0 0 0 0 0 0 0
[5,] 1 0 0 0 0 0 0 0 ...
sep : ダミーの名前付け.
> dummy(l, sep=":")
l:a l:b l:c l:d l:e
[1,] 1 0 0 0 0
[2,] 1 0 0 0 0 ...
[1,] 1 0 0 0 0
[2,] 1 0 0 0 0 ...
fun:ダミーの型の決定.デフォルトは as.integer
> dummy(l, sep="::", fun=as.logical)
l::a l::b l::c l::d l::e
[1,] TRUE FALSE FALSE FALSE FALSE
[2,] TRUE FALSE FALSE FALSE FALSE ...
l::a l::b l::c l::d l::e
[1,] TRUE FALSE FALSE FALSE FALSE
[2,] TRUE FALSE FALSE FALSE FALSE ...
endogenousパッケージ
endogenousパッケージの
sampselect(outcome, probit, init = NULL, id = NULL, se = "R")
についてのメモ.
・init:初期値はNULLのままでOK.
・probitの被説明変数は,無い時を1,ある時を0にしないと回らない.
サンプルコード参照)
・factorに対応していない(めんどくせえ).
・id:ランダム効果見るためのグループ
data.frameへのアクセス
2通りある.
⓵attach()
data$要素のグループといちいち打つのが面倒な時に使える.
> data = read.csv("Tigers_2018_batting.csv")
> attach(data)
> 選手名
[1] 糸原 健斗 糸井 嘉男 福留 孝介 梅野 隆太郎 大山 悠輔 ロサリオ
[7] 陽川 尚将 北條 史也 鳥谷 敬 中谷 将大 植田 海 ナバーロ
[13] 俊介 伊藤 隼太 髙山 俊 原口 文仁 上本 博紀 西岡 剛
[19] 江越 大賀 板山 祐太郎 森越 祐人 島田 海吏 山崎 憲晴 熊谷 敬宥
[25] 坂本 誠志郎 岡﨑 太一 長坂 拳弥 今成 亮太 小豆畑 眞也 荒木 郁也
[31] 小宮山 慎二 緒方 凌介 西田 直斗
33 Levels: ナバーロ ロサリオ 伊藤 隼太 岡﨑 太一 熊谷 敬宥 原口 文仁 ...
> attach(data)
> 選手名
[1] 糸原 健斗 糸井 嘉男 福留 孝介 梅野 隆太郎 大山 悠輔 ロサリオ
[7] 陽川 尚将 北條 史也 鳥谷 敬 中谷 将大 植田 海 ナバーロ
[13] 俊介 伊藤 隼太 髙山 俊 原口 文仁 上本 博紀 西岡 剛
[19] 江越 大賀 板山 祐太郎 森越 祐人 島田 海吏 山崎 憲晴 熊谷 敬宥
[25] 坂本 誠志郎 岡﨑 太一 長坂 拳弥 今成 亮太 小豆畑 眞也 荒木 郁也
[31] 小宮山 慎二 緒方 凌介 西田 直斗
33 Levels: ナバーロ ロサリオ 伊藤 隼太 岡﨑 太一 熊谷 敬宥 原口 文仁 ...
②with()
専用の環境を作ってその中で作業ができる.
with内の作業が終わればその環境もなくなるので変数名がのちのち被ることもない.
分析するときはこっちのほうが使いやすいかな.
> res = with(data, sampselect( ))
みたいな感じ.
factor を numeric に型変換するとき
型がfactorのものをnumericに型変換するときは
as.numeric(as.character(data))
と必ずas.characterを挟む必要あり.
しなかった場合↓
> data
[1]2015
Levels:2015
> class(data)
[1]"factor"
> as.numeric(data)
[1]1
と,よくわからないことに.
lengthがとられることもあるし,
各数字が足されて(2+0+1+5 = 8)となることもあるみたい.
した場合↓
> data2 = as.numeric(as.character(data))
> data2
[1] 2015
> class(data2)
[1] "numeric"
> data2
[1] 2015
> class(data2)
[1] "numeric"