ロジスティック回帰分析
Rでロジスティック回帰分析を行うには最初から実装されているnls()という関数を使用します。この場合,パラメータを推定するための初期値はユーザが試行錯誤しながら考えなければなりません。そのような手間を省くための方法を紹介します。
まず手始めに群馬大学の青木先生のwebサイトに置いてあるシンプレックス法のソースコードを拝借してください。このソースを貼り付けるなり,読み込むなりしておくことを前提として以降の説明をします。
ロジスティック曲線を描く関数は以下のように定義されます。このときα,βが推定するパラメータです。なお、次式において分子は1になっているが、これをγとして、γの値を推定することもできる(比率データのように上限値が1と定まっている場合は、γとするより1とするべきである)。
手順1 以下のソースコードを貼り付けてください(読み込んでも良いですが)。
ln.dat<-function(dat,gamma){
n<-length(dat[,1])
Y<-c()
x.data<-1:n
for(i in 1:n){
Y[i]<-log(gamma/dat[i,2])
}
result<-lm(Y~x.data)
kaiki<-summary(result)
return(coefficients(kaiki))
}
K.logistic<-function(dat,gamma,alpha,beta){
x<-dat[,1]
y<-dat[,2]
my.model<-function(x, p){
return(p[1]/(1+exp(p[2]+p[3]*x)))
}
simplex(my.model,c(gamma,alpha,beta),x,y,plot.flag=TRUE)
}
手順2 ln.dat()を使ってαとβの初期値を見つける
この関数の引数であるdatはデータ行列,gammaは推定するパラメータγの初期値です。出力される切片(Intercept)をαの初期値として,また回帰係数(x.data)をβの初期値と考えてよいでしょう。
> my.dat #1列目はx(説明変数),2列目はy(=目的変数)
[,1] [,2]
[1,] 1.691 0.06779661
[2,] 1.724 0.16666667
[3,] 1.755 0.30645161
[4,] 1.784 0.55357143
[5,] 1.811 0.82539683
[6,] 1.837 0.89830508
[7,] 1.861 0.96774194
[8,] 1.884 1.00000000
> ln.dat(my.dat,1) #γ=1と仮定する
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.4982329 0.3193529 7.822796 0.0002303444
x.data -0.3721354 0.0632413 -5.884373 0.0010679569
手順3 K.logistic()を使ってパラメータを推定する
この関数の引数であるdatはデータ行列(上で用いたのと同じもの),gammaはγの初期値,alphaはαの初期値,betaはβの初期値です。図は自動的に描かれます。
> K.logistic(my.dat, 1, 2.4982329, -0.3721354) #γ=1,α=2.4982329,β=-0.3721354 $converge [1] TRUE $parameters #推定されたパラメータ [1] 1.027154 61.098532 -34.381595 $residuals [1] 11.57737

以上のものは完全なものではありません。場合によってはこの方法でもうまくいかないことがあります。