我喜欢拟合一个非线性方程(g 和 h 是参数):
q = g * (h**age)/(1 + g * (h**age));
当年龄 = 50 时限制 q = .05:即 g * (h* 50)/(1 + g (h**50)= .05。
这意味着当年龄 = 50 时,预测值 q 等于数据中的 q。
谢谢你的帮助。
我喜欢拟合一个非线性方程(g 和 h 是参数):
q = g * (h**age)/(1 + g * (h**age));
当年龄 = 50 时限制 q = .05:即 g * (h* 50)/(1 + g (h**50)= .05。
这意味着当年龄 = 50 时,预测值 q 等于数据中的 q。
谢谢你的帮助。
看看 nls()
和/或包装BB
。但是为了真正的乐趣:-),花一点时间在 Eureqa,http://creativemachines.cornell.edu/eureqa。您将获得比您想象的更多的解决方案!
#define function
qfun <- function(age,h){
#the constraint can be added using algebra
g <- 0.05/0.95/h^50
g * (h^age)/(1 + g * (h^age))
}
#create data
age <- 1:75
h <- 0.75
q <- qfun(age,h)
plot(q~age)
#add noise
q <- q+rnorm(length(q),sd=0.02)
plot(q~age)
#fit
fit <- nls(q~qfun(age,h),start=list(h=1))
summary(fit)
Formula: q ~ qfun(age, h)
#Parameters:
# Estimate Std. Error t value Pr(>|t|)
#h 0.749644 0.001678 446.7 <2e-16 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 0.01865 on 74 degrees of freedom
#
#Number of iterations to convergence: 5
#Achieved convergence tolerance: 1.735e-06
ttt<- function(x) qfun(x,coef(fit)[1])
curve(ttt,from=1,to=75,add=TRUE)