Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels
39,544
There are several problems here:
- You are specifying variables as character strings, so this line (
fit<-lm(y~x,data=dat)
) is interpreted by R asfit<-lm("farm"~"land",data=dat)
. - It is easier to not specify default variables in your function because of scoping issues.
I would consider the following instead:
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)
Author by
Mona Jalal
contact me at [email protected] I am a 5th-year computer science Ph.D. Candidate at Boston University advised by Professor Vijaya Kolachalama in computer vision as the area of study. Currently, I am working on my proposal exam and thesis on the use of efficient computer vision and deep learning for cancer detection in H&E stained digital pathology images.
Updated on August 25, 2020Comments
-
Mona Jalal over 3 years
I have the following code for minimizing the sum of deviation using optim() to find beta0 and beta1 but I am receiving the following errors I am not sure what I am doing wrong:
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) }
Here's the error and warnings are receive:
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