- この続き
- 理想値からある程度のばらつきを入れてデータをシミュレーションし、回帰式推定をする
- 推定係数がどれくらいばらつくかも見てみよう
par(ask=TRUE)
Niter<-100
Km1<-Km2<-matrix(0,Niter,4)
for(ii in 1:Niter){
minC<--2
maxC<-2
x<-c(2^(seq(from=minC,to=maxC,length=10)))
a<-2
b<-2
U<-5
L<-2
y<-U/(1+(a/x)^b)+L
s<-0.1
y<-y+rnorm(length(y),sd=sqrt(var(y))*s)
X<-log(x)
fr <- function(ks) {
k1 <- ks[1]
k2 <- ks[2]
k3 <- ks[3]
k4 <- ks[4]
sum((y-(k3/(1+(k1/x)^k2)+k4))^2)
}
fr2 <- function(ks) {
k1 <- ks[1]
k2 <- ks[2]
k3 <- ks[3]
k4 <- ks[4]
sum((y-(k3/(1+exp(-k2*(log(x)-log(k1))))+k4))^2)
}
opt.out<-optim(runif(4)*10, fr)
opt.out2<-optim(runif(4)*10, fr2)
Km1[ii,]<-opt.out$par
Km2[ii,]<-opt.out2$par
}
par(mfcol=c(2,2))
boxplot(Km1)
boxplot(Km2)
plot(Km1[,1],Km2[,1])
plot(Km1[,2],Km2[,2])
par(mfcol=c(2,2))
plot(x,y)
t<-2^(seq(from=min(X),to=max(X),length=100))
points(t,opt.out$par[3]/(1+(opt.out$par[1]/t)^opt.out$par[2])+opt.out$par[4],col=2,cex=0.01)
plot(log(x),y)
points(log(t),opt.out$par[3]/(1+(opt.out$par[1]/t)^opt.out$par[2])+opt.out$par[4],col=2,cex=0.01)
plot(X,y)
points(log(t),opt.out2$par[3]/(1+exp(-opt.out2$par[2]*(log(t)-log(opt.out2$par[1]))))+opt.out2$par[4],col=2,cex=0.01)
plot(exp(X),y)
points(t,opt.out2$par[3]/(1+exp(-opt.out2$par[2]*(log(t)-log(opt.out2$par[1]))))+opt.out2$par[4],col=2,cex=0.01)
opt.out
opt.out2
hf1<-function(t){opt.out$par[3]/(1+(opt.out$par[1]/t)^opt.out$par[2])+opt.out$par[4]}
hf2<-function(t){opt.out2$par[3]/(1+exp(-opt.out2$par[2]*(log(t)-log(opt.out2$par[1]))))+opt.out2$par[4]}
integrate(hf1,0,4)
integrate(hf2,0,4)