R 打印功能输出正确
我编写这个函数是为了找到非线性回归的起始值。我已经测试了其中的循环,它可以完美地工作,同时搜索列表中最小的RSS。但是,当我将所有代码放入一个函数中时,打印的结果是第一次迭代的结果,而不是我需要的结果 有人知道为什么会这样吗?我不知道这是否与在函数末尾打印列表有关R 打印功能输出正确,r,function,loops,printing,output,R,Function,Loops,Printing,Output,我编写这个函数是为了找到非线性回归的起始值。我已经测试了其中的循环,它可以完美地工作,同时搜索列表中最小的RSS。但是,当我将所有代码放入一个函数中时,打印的结果是第一次迭代的结果,而不是我需要的结果 有人知道为什么会这样吗?我不知道这是否与在函数末尾打印列表有关 LSTR1_val <- function(series, linear, nonlinear, trans){ linear <- c (0,linear) linear_list <-
LSTR1_val <- function(series, linear, nonlinear, trans){
linear <- c (0,linear)
linear_list <- lapply (linear, function(i) lag(series, k=-i))
linear_dat <- na.omit(do.call(cbind, linear_list))
colnames(linear_dat) <- paste0 ("lag_",linear)
nonlinear_list <- lapply (nonlinear, function(i) lag(series, k=-i))
nonlinear_dat <- do.call(cbind, nonlinear_list)
colnames(nonlinear_dat) <- paste0 ("nl.lag_",nonlinear)
nonlinear_dat <- window (nonlinear_dat, start=start(linear_dat),end=end(linear_dat))
trans <- window (trans, start=start(linear_dat),end=end(linear_dat))
scale <- sqrt (var(trans))
grid <- list()
lin_eq <- paste0("lag_0 ~", paste(paste(colnames(linear_dat)[-1]), sep="",collapse='+'))
nonlin_eq <- paste0("transition + ",paste("I(transition*",paste(colnames(nonlinear_dat),")"), sep="",collapse='+'))
for (c1 in seq(0.97*min(trans), 0.97*max(trans), mean(trans)/5)){
for (gamma in seq(1,100,2)) {
transition <- (1+exp(-(gamma/scale)*(trans-c1)))^-1
grid.regre <-lm(paste0(lin_eq,"+",nonlin_eq),data=data.frame(linear_dat,nonlinear_dat,trans))
coef <- grid.regre$coefficients
RSS <- sum(grid.regre$residuals^2)
grid[[length(grid)+1]] <- c(RSS,gamma,c1,coef)
}
}
Small_RSS <- which.min(sapply(grid, "[[", 1))
Start_val <- grid[[Small_RSS]]
names(Start_val) <- c("RSS","gamma","c1",c("intercept",colnames(linear_dat)[-1],"nl_intercept",colnames(nonlinear_dat)))
Resultados <- list(Recomendacion= "Use los valores iniciales:",Ini_val=Start_val)
print(Resultados)
}
我不熟悉您的上下文,但从您的代码来看,这里很可能出了问题:
grid.regre <-lm(paste0(lin_eq,"+",nonlin_eq),data=data.frame(linear_dat,nonlinear_dat,trans))
此处的trans是否应指定为您在上一步中计算的transition?请注意,由于外循环中的变量c1发生变化,因此每次迭代的转换都会发生变化。因此,试着找出data.frame对于每个迭代是否不同。Hi alittleboy。谢谢你的帮助。我可以告诉你,这个循环工作得很好。如果我从线性的定义中获取代码,开始运行它,我会得到最小的rss。我在尝试将代码放入函数并尝试打印结果时遇到了问题。
data.frame(linear_dat,nonlinear_dat,trans)