2013-12-23 88 views
5

我新的R和嘗試使用cv.lm() 做K-折交叉驗證參見:http://www.statmethods.net/stats/regression.htmlK-倍交叉驗證使用cv.lm()

我正在錯誤指示的長度我的變量是不同的。事實上,在使用length()進行驗證期間,我發現其大小實際上相同。

的下面是最小的數據集複製問題,

X Y 
277 5.20 
285 5.17 
297 4.96 
308 5.26 
308 5.11 
263 5.27 
278 5.20 
283 5.16 
268 5.17 
250 5.20 
275 5.18 
274 5.09 
312 5.03 
294 5.21 
279 5.29 
300 5.14 
293 5.09 
298 5.16 
290 4.99 
273 5.23 
289 5.32 
279 5.21 
326 5.14 
293 5.22 
256 5.15 
291 5.09 
283 5.09 
284 5.07 
298 5.27 
269 5.19 

用下面的代碼做交叉驗證

# K-fold cross-validation, with K=10 
sampledata <- read.table("H:/sample.txt", header=TRUE) 
y.1 <- sampledata$Y 
x.1 <- sampledata$X 
fit=lm(y.1 ~ x.1) 
library(DAAG) 
cv.lm(df=sampledata, fit, m=10) 

在終端上的誤差,

Error in model.frame.default(formula = form, data = df[rows.in, ], drop.unused.levels = TRUE) : 
    variable lengths differ (found for 'x.1') 

驗證,

> length(x.1) 
[1] 30 
> length(y.1) 
[1] 30 

以上確認的長度是一樣的。

> str(x.1) 
int [1:30] 277 285 297 308 308 263 278 283 268 250 ... 
> str(y.1) 
num [1:30] 5.2 5.17 4.96 5.26 5.11 5.27 5.2 5.16 5.17 5.2 ... 

> is(y.1) 
[1] "numeric" "vector" 
> is(x.1) 
[1] "integer"    "numeric"    "vector"    "data.frameRowLabels" 

對上述數據集的進一步檢查表明一個數據集是整數,另一個是數字。但是即使當數據集被轉換數字爲整數或整數數字,相同的誤差指示與數據長度問題屏幕彈出。

你能指導我該怎麼做才能糾正錯誤?

自2天前我未成功處理此問題。使用互聯網進行研究沒有得到任何好的結果。

Addional相關查詢:

我看到,如果我們使用的數據的屬性進行設置的頭配合工作,

fit=lm(Y ~ X, data=sampledata) 

一)什麼是上面的語法與差異,

fit1=lm(sampledata$Y ~ sampledata$X) 

認爲它是一樣的。在下面的,

#fit 1 works 
fit1=lm(Y ~ X, data=sampledata) 
cv.lm(df=sampledata, fit1, m=10) 

#fit 2 does not work 
fit2=lm(sampledata$Y ~ sampledata$X) 
cv.lm(df=sampledata, fit2, m=10) 

的問題是在DF = sampleData在作爲標題 「的sampleData $ Y」 根本不存在,但只有$ Y存在。試圖manupulate cv.lm低於它不工作過,

cv.lm(fit2, m=10) 

二)如何,如果我們想要操縱的變量,如何使用它在cv.lm()用於如

y.1 <- (sampledata$Y/sampledata$X) 
x.1 <- (1/sampledata$X) 

#fit 4 problem 
fit4=lm(y.1 ~ x.1) 
cv.lm(df=sampledata, fit4, m=10) 

有沒有一種方法,我可以參考,而不是頭Y〜X在功能Y.1和X.1?

謝謝。

回答

2

我不確定爲什麼發生這種情況,但我發現你沒有爲lm()指定數據參數,所以這是我的第一個猜測。

fit=lm(Y ~ X, data=sampledata) 

由於錯誤消失,這可能是一個足夠的答案。

enter image description here

UPD:的原因的錯誤是Y.1和X.1不的sampleData,其作爲DF論據cv.lm提供存在,使式Y.1 〜x.1在cv.lm環境中沒有意義。

+0

感謝您的回覆。它在我們使用cv.lm()中的頭部時起作用。有沒有一種方法可以在cv.lm()中使用y.1和x.1,因爲大部分時間我都會操作用於執行cv.lm()的頭文件。已經更新了我的原始文件來解釋這一點。 –