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

Posted

技术标签:

【中文标题】`contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) 中的错误:对比只能应用于具有 2 个或更多级别的因子【英文标题】:Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels 【发布时间】:2014-06-18 08:01:05 【问题描述】:

我有以下代码用于使用 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 &lt;- function(y = farm, x = land, data="FarmLandArea.csv") dat &lt;- read.csv(data) #fit&lt;-lm(dat$farm~dat$land) fit&lt;-lm(y~x,data=dat) beta.out=optim(fit$coefficients,sum.abs.dev) return(beta.out) 我收到这个了吗? &gt; tlad(farm,land,data="FarmLandArea.csv") Show Traceback Rerun with Debug Error in eval(expr, envir, enclos) : object 'farm' not found 查看我编辑的评论。 如果这是作业,请将其标记为... 【参考方案1】:

这里有几个问题:

    您将变量指定为字符串,因此 R 将这一行 (fit&lt;-lm(y~x,data=dat)) 解释为 fit&lt;-lm("farm"~"land",data=dat)。 由于范围问题,在函数中不指定默认变量会更容易。

我会考虑以下内容:

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)

【讨论】:

以上是关于`contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) 中的错误:对比只能应用于具有 2 个或更多级别的因子的主要内容,如果未能解决你的问题,请参考以下文章

“对比”错误中的错误

使用 lm 构建回归模型时出错(`对比<-`中的错误(`*tmp*`...对比只能应用于具有2个或更多级别的因素)[重复]

数组中最小值,及其索引的方法

使用 map() 在 lm 中未识别的因素

传多个id 存入一个容器里,让另一个页面接受并显示数据

compare contrast的区别