对比度中的错误<-`(`*tmp*`,value=control.funs[1+;isOF[nn]]:对比度只能应用于具有2个或更多级别的因子

对比度中的错误<-`(`*tmp*`,value=control.funs[1+;isOF[nn]]:对比度只能应用于具有2个或更多级别的因子,r,function,csv,optimization,regression,R,Function,Csv,Optimization,Regression,我使用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 <-

我使用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)
}

sum.abs.dev这里有几个问题:


  • 您将变量指定为字符串,因此此行(
    fit删除
    tlad
    中的默认参数,然后在调用该函数时指定不带引号的变量。在
    lm
    调用中指定了
    dat
    而不是
    data
    。您的意思是将其更改为
    tlad,因为我正在接收此?
    >tlad(农场、土地、数据)=“FarmLandArea.csv”)在eval(expr、envir、enclose)中显示带调试错误的回溯重新运行:找不到对象“farm”
    请查看我编辑的注释。如果这是作业,请将其标记为这样。。。
    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 <- function(y, x){      
      fit <- lm(y~x)
      beta.out <- optim(fit$coefficients, sum.abs.dev)
      return(beta.out)
    }
    
    dat <- read.csv("FarmLandArea.csv")
    tlad(dat$farm, dat$land)