如何在R中创建包含参数和循环的函数?
我想创建365个元素的向量,等于如何在R中创建包含参数和循环的函数?,r,R,我想创建365个元素的向量,等于 fCAT[i]<-seasonality[i]+beta0+beta1*exp(-gamma*day[i])+beta2*gamma*exp(-gamma*day[i]) fCAT[i]您可以将功能设置为: f <- function(beta) { gamma <- beta[4] fCAT <- seasonality + beta[1] + beta[2]*exp(-gamma*day) +
fCAT[i]<-seasonality[i]+beta0+beta1*exp(-gamma*day[i])+beta2*gamma*exp(-gamma*day[i])
fCAT[i]您可以将功能设置为:
f <- function(beta) {
gamma <- beta[4]
fCAT <- seasonality + beta[1] +
beta[2]*exp(-gamma*day) +
beta[3]*gamma*exp(-gamma*day)
(sum(fCAT) - 1000)^2
}
如果观察到fCAT和day,那么这只是一个非线性最小二乘问题,您可以使用nls
函数来解决。fCAT
未观察到,定义如上,只知道day
和季节性
。@Hanna,我认为您仍然可以使用nls
,方法是将所有观察值的fCAT设置为1000,因为这是您优化的标准nls
根据预测值(在您的情况下为fCAT)和观察值之间的平方差优化参数,因此使用1000作为观察值会产生与您在问题中所显示的相同的差异。nls
可能是更好的选择,因为它还将为您提供参数不确定性的估计值。我不确定它是否会处理未识别的参数,但我怀疑这实际上不是您想要的。标准是(总和(fCAT)-1000)^2
而不是总和((fCAT-1000)^2)
,因此将fCAT设置为1000没有帮助。起初我没有注意到你代码中的错误,pete,但经过这一小小的修改后,我得到了令人满意的结果。@Hanna,你可能应该“接受”pete的答案,因为它对你有用,你可能应该小心结果-beta1
和beta2
不是由你的目标函数确定的。如果将其分解为fCAT=季节性+beta0+(beta1+beta2*gamma)*exp(-gamma*day)
。
optim(rep(0, 4), f)