【发布时间】:2023-03-23 16:50:01
【问题描述】:
我有以下代码用于使用 optim() 找到 beta0 和 beta1 来最小化偏差总和,但我收到以下错误我不确定我做错了什么:
sum.abs.dev<-function(beta=c(beta0,beta1),a,b)
{
total<-0
n<-length(b)
for (i in 1:n)
{
total <- total + (b[i]-beta[1]-beta[2]*a[i])
}
return(total)
}
tlad <- function(y = "farm", x = "land", data="FarmLandArea.csv")
{
dat <- read.csv(data)
#fit<-lm(dat$farm~dat$land)
fit<-lm(y~x,data=dat)
beta.out=optim(fit$coefficients,sum.abs.dev)
return(beta.out)
}
这是收到的错误和警告:
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels In addition: Warning message:
In model.response(mf, "numeric") : NAs introduced by coercion
【问题讨论】:
-
删除
tlad中的默认参数,然后在调用函数时指定不带引号的变量。您还可以在lm调用中指定dat而不是data。 -
你的意思是把它改成
tlad <- function(y = farm, x = land, data="FarmLandArea.csv") { dat <- read.csv(data) #fit<-lm(dat$farm~dat$land) fit<-lm(y~x,data=dat) beta.out=optim(fit$coefficients,sum.abs.dev) return(beta.out) }? -
我收到这个了吗?
> tlad(farm,land,data="FarmLandArea.csv") Show Traceback Rerun with Debug Error in eval(expr, envir, enclos) : object 'farm' not found -
查看我编辑的评论。
-
如果这是作业,请将其标记为...
标签: r function csv optimization regression