2014-05-01 8 views
6

मेरे पास निम्न कोड है optim() का उपयोग कर beta0 और beta1 को खोजने के लिए विचलन का योग कम से कम, लेकिन मैं निम्नलिखित त्रुटियाँ प्राप्त कर रहा मैं मैं गलत क्या कर रहा हूँ यकीन नहीं है:'विरोधाभास <-` (`* tmp *`, value = contr.funs [1 + isOF [nn]] में त्रुटि): विरोधाभास केवल 2 या अधिक स्तर वाले कारकों पर लागू किया जा सकता है

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 

enter image description here

+0

'tlad' में डिफ़ॉल्ट तर्क निकालें और जब आप फ़ंक्शन को कॉल करें तो उद्धरण चिह्नों के बिना चर निर्दिष्ट करें। आपके 'एलएम' कॉल में निर्दिष्ट 'डेटा' के बजाय आपके पास 'डेटा 'भी है। – Thomas

+0

आप 'tlad <करने के लिए इसे बदलने मतलब - समारोह (y = खेत, एक्स = भूमि, डेटा =" FarmLandArea.csv ") { Dat <- read.csv (डेटा) #fit <-lm (डीएटी $ फार्म ~ डेट $ भूमि) फिट <-lm (y ~ x, data = dat) beta.out = optim (फिट $ coefficients, sum.abs.dev) वापसी (beta.out) } '? –

+0

जिसके साथ मुझे यह प्राप्त हो रहा है? '> Tlad (खेत, भूमि, डेटा =" FarmLandArea.csv ") दिखाएँ Traceback डीबग साथ को पुन: चलाएं eval में त्रुटि (expr, माहौल, enclos): ऑब्जेक्ट 'खेत' नहीं मिला' –

उत्तर

5

वहाँ कई समस्याओं यहां हैं:

  1. आप चरित्र स्ट्रिंग के रूप में चर निर्दिष्ट करते हैं, तो इस लाइन (fit<-lm(y~x,data=dat)) fit<-lm("farm"~"land",data=dat) के रूप में आर द्वारा व्याख्या की है।
  2. स्कॉइंग समस्याओं के कारण आपके फ़ंक्शन में डिफ़ॉल्ट चर निर्दिष्ट नहीं करना आसान है।

मैं निम्नलिखित बजाय पर विचार करेंगे:

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) 
संबंधित मुद्दे