0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

複数のGLM, GLMMの係数とAICを、csvファイルに一気に出力する

Last updated at Posted at 2019-07-09

コードの記述

野外の生物調査では、しばしば種ごとの個体数をカウントするような場面があります。
例えば、鳥類の調査では"ラインセンサス法"がしばしば用いられます。
この調査では調査ルートを歩きながら、出現した鳥類の個体数を種ごとに記録していきます。

出現した種の個体数が、どのような環境要因の影響を受けているか、
を解析する際には一般化線形モデルや一般化線形混合モデルが用いられます。
しかし、種ごとにコードを書いていくのはめんどうです。

全ての種に対して、
共通のモデル
「応答変数(e.g., 各種の個体数) ~ 説明変数1(e.g., 土地利用割合) + 説明変数2(e.g., 景観割合)」
により解析したい場合にforループを使って一気に解析し、種ごとにcsvファイルに出力してくれるコードを書いてみました。

ただし、出現個体数の少ない種が多く含まれる場合などは、モデルが収束せず、ループが途中で止まってしまうので、あまり効率よくはありません。
そのような場合は、種を絞って解析するとよいと思います。

コードが汚いですし、もっと効率化できる気がします。
もっときれいなコードを発見できたら更新するかもしれません。



setwd("c:/Users/~~~")                                            #ディレクトリの指定
allt <- read.csv("~~~.csv", header=T)                            #csvファイルの読み込み

x <- allt[,c(11:61)]                                             #csvファイルから応答変数(e.g., 種ごとに整理した個体数)のみ抽出
value <- 1:51                                                   #ループする応答変数の個数を指定
for(y in value){                                 #forループの宣言
	ff <- formula(paste(names(x[y]),                         #paste関数を用いてglmの式を指定、応答変数を列数で指定
	      paste("~ 説明変数1 + 説明変数2",sep=""), sep=""))    #説明変数は列名で指定
fmla <- glm(ff, data=allt, family=poisson)                      #上で指定したオブジェクトffを用いてGLM
        assign(paste("res",y,sep=""),fmla)                      #assign関数を用いてデータフレーム"res1"-"res51"を作成
fmlb <- summary(fmla)$coefficient                  #GLMの係数だけ抽出
        assign(paste("s.ans",y,sep=""),fmlb)             #上で抽出した係数を"s.ans1"-"s.ans51"として格納
fmlc <- AIC(fmla)                                                #モデルのAICを計算
        assign(paste("aic",y,sep=""),fmlc)


mm <- formula(paste(names(x[y]),                           #以下からGLMMの解析
	      paste("~ 説明変数1 + 説明変数2 + (1|ランダム切片)"
                     ,sep=""), sep="")) 	                         
m1 <- glmer(mm, data=allt, family=poisson)                    
      assign(paste("res",y,sep=""),m1)                        
m2 <- summary(m1)$coefficient 
      assign(paste("s.ans",y,sep=""),m2)
m3 <- AIC(m1)
        assign(paste("aic",y,sep=""),m3)

fmld <- cbind(fmlb,fmlc,m2,m3)
        assign(paste("result",y,sep=""),fmld) 
write.table(fmld,paste("フォルダ名/ファイル名",y,".csv",sep=""),       #結果をcsv出力
	append=T,quote=F,sep=",",row.names=T,col.names=T)
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?