2013-12-23 87 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()的头文件。已经更新了我的原始文件来解释这一点。 –