2014-04-15 32 views
0

下面是代碼:錯誤的反差

data_complete<-read.delim("D:/Work/output_java_head.txt") #complete data set #working 
modelfn<-function(data_complete){ 
    model<-lm(mctr~price+age_group+gender+brand+product_typeid+google_product_category,data=data_complete) 
    data_complete$predicted<-predict(model,data_complete) 
    return(data_complete$predicted) 
    sink() 
    write.csv("D:/Work/output",i,".csv") 
    rm(model) 
    gc(TRUE) 
} #working 

然後使用這個命令:

by(data_complete,data_complete$google_product_category,modelfn) 

我得到這個錯誤:

Error in contrasts<- (*tmp* , value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels

請注意,在117個水平data_complete$google_product_category並且在data_complete中共有22列。

我也用於測試:

by(data_complete,data_complete$google_product_category,summary) 

它給了我正確的答案。

所以我想在我創建的功能modelfn中有一些問題。

+0

非常簡單的錯誤:你只有一個變量只有水平。我想這可能是由於缺失,但不知道沒有看數據是不可能的。 – Thomas

+0

@Thomas正如我上面提到的那樣,我爲它建模的變量有117個級別,並且我已經在R控制檯中使用「級別」和「彙總」對它進行了測試。至於數據部分,我不能分享它,因爲它是保密的。但我可以告訴你,數據已經徹底清理並測試了好幾次。 – heybhai

回答

3

我不確定你是否在我寫評論時相信我,但這是一個非常直接的錯誤,與你的一個變量只有一個觀察值有關。這裏有一個簡單的例子來演示它:

> x <- factor(rep(1,100), levels=1:20) 
> y <- rnorm(100) 
> lm(y~x) 
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
    contrasts can be applied only to factors with 2 or more levels 

確保您的數據實際上看起來是您認爲他們做的方式。即使有多個因子水平附加到一個變量,也很可能是這個變量缺少多於一個水平的實際觀測值。再說一遍,如果你不能共享數據,我們不能真正幫助你,所以你必須尋找自己發生的地方。

+0

嘿托馬斯,當我用你的例子,並使用它的彙總函數爲: **摘要(x)** 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0這表明在其他19個層次上沒有數據或足夠的數據來構建線性模型,我猜想在我的數據集中它可能是錯誤的根本原因。你怎麼看? – heybhai

+0

是的,這正是錯誤 - 即使有因素的水平,也沒有任何觀察到這些水平。 – Thomas

+0

非常感謝@Thomas!現在你可以建議我如何對付這個問題了。我在考慮2個選項:1)使用我不知道如何實現的嘗試抓住2)跳過錯誤的級別我是否正確地朝着正確的方向前進? – heybhai