メモ

主にプログラミング系の備忘録

エラーが出るコード

もっとでかいデータで回してもエラーは出ないのに…。
R単体で回してもエラーが出ることが判明。
最近3.1.1にバージョンアップしたのが原因?
3.0.1でもエラーが出るのでデータに問題がありそう。
サンプル数に対してFactorが多すぎるのが問題?

数値部分の欠損はなし。
Factor部分の欠損は「N」を代入しているので欠損はなし。
OS:Windows7 professional Edition +SP1
R:3.1.1

str(d1)
'data.frame':	51 obs. of  20 variables:
 $ ID : Factor w/ 51 levels "P0904","P1047",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ S01: int  6000 2387 3468 10000 6000 6000 215 8191 6000 6000 ...
 $ CV1: num  85 9 118 109 26 73 3 34 81 7 ...
 $ K01: Factor w/ 18 levels : 3 2 11 2 13 5 9 1 6 9 ...
 $ K02: Factor w/ 6 levels : 2 6 4 1 2 1 1 6 2 4 ...
 $ K03: Factor w/ 22 levels : 15 5 19 5 9 20 18 2 20 11 ...
 $ A01: Factor w/ 3 levels "N","いいえ","はい": 2 3 3 3 2 3 3 2 2 2 ...
 $ A02: Factor w/ 3 levels "N","いいえ","はい": 2 2 3 3 2 2 2 2 2 2 ...
 $ A03: Factor w/ 3 levels "N","いいえ","はい": 3 3 3 3 3 2 3 2 3 3 ...
 $ B01: Factor w/ 3 levels "N","いいえ","はい": 2 3 3 3 2 3 3 2 3 3 ...
 $ B02: Factor w/ 3 levels "N","いいえ","はい": 2 2 3 3 2 3 2 2 3 2 ...
 $ B03: Factor w/ 3 levels "N","いいえ","はい": 2 2 2 2 2 2 2 2 2 2 ...
 $ B04: Factor w/ 3 levels "N","いいえ","はい": 2 3 2 3 3 3 2 2 3 2 ...
 $ B05: Factor w/ 3 levels "N","いいえ","はい": 2 3 3 3 3 3 2 3 3 3 ...
 $ B06: Factor w/ 3 levels "N","いいえ","はい": 2 3 3 2 2 3 2 2 2 2 ...
 $ C01: Factor w/ 3 levels "N","いいえ","はい": 2 3 2 3 2 3 2 3 3 2 ...
 $ C02: Factor w/ 3 levels "N","いいえ","はい": 3 2 3 3 2 3 2 2 3 3 ...
 $ C03: Factor w/ 3 levels "N","いいえ","はい": 2 2 2 2 2 2 2 2 2 2 ...
 $ C04: Factor w/ 3 levels "N","いいえ","はい": 2 2 2 2 2 2 2 2 2 2 ...
 $ C05: Factor w/ 3 levels "N","いいえ","はい": 2 2 2 3 2 3 2 2 3 2 ...

#ファイルを取り込み
d1<-read.table(file="data.txt",header=T,sep="\t")
#項目名一覧を取得
tmp<-colnames(d1)
#必要なパッケージを入れる
require(MASS)
require(glmmML)
require(AER)
require(pscl)

#項目名確認
tmp
#Rに取り込まれた項目名は以下の通りです。
#目的変数・randomEffect用変数・二項分布モデル用の試行数の項目名を確認し、「目的変数などを設定」のノードを修正してください。
#変数選択
sName<-"CV1" #CVの項目名を編集
aName<-"S01" #二項分布モデルの場合、試行数の項目名を編集
rName<-"ID" #randomEffectを考慮してIDなどの情報を含む場合項目名を追加

#項目名一覧を取得
tmp<-colnames(d1)

#GLM用の説明変数を作成

#【モデル共通】目的変数を除去
for(i in 1:length(tmp)){
	if((tmp[i]==sName)){
		tmp<-tmp[-i]		
		break
	}
}

#【共通】randomEffect変数を除去
# ToDo:randomEffectは複数設定できるものもあるみたいなので、先々はリスト形式で持たせるようにする。
for(i in 1:length(tmp)){
	if((tmp[i]==rName)){
		tmp<-tmp[-i]		
		break
	}
}

#ポアソン分布用のGLMMモデル式を作成
fpglmm<-paste("d1.pglmm<-glmmML(",sName,sep="")
fpglmm<-paste(fpglmm,"~",sep="")

for(i in 1:length(tmp)){
	fpglmm<-paste(fpglmm , tmp[i],sep="")
	if(i<length(tmp)) fpglmm<-paste(fpglmm,"+",sep="")
}
fpglmm<-paste(fpglmm,",family=poisson,data=d1,cluster=",sep="")
fpglmm<-paste(fpglmm,rName,sep="")
fpglmm<-paste(fpglmm,",start.sigma=2)",sep="")

#ポワソン分布モデルの作成⇒ここで落ちる
eval(parse(text=fpglmm))