我是一名新手,正在尝试使用cv.lm()进行K折交叉验证。参考链接:http://www.statmethods.net/stats/regression.html
我收到了错误提示,指示我的变量长度不同。实际上,在使用length()进行验证时,我发现它们的大小是相同的。
以下是最小数据集,可用于复制问题:
使用以下代码进行交叉验证:
终端显示的错误信息:
以上证实长度是相同的。
进一步检查上述数据集表明,一个数据集是整数类型,另一个数据集是数字类型。但即使将数据集从数字类型转换成整数类型或者从整数类型转换成数字类型,屏幕上仍然会显示相同的错误,指示数据长度存在问题。
您能指导我应该如何纠正这个错误吗?
自两天前以来,我一直无法处理这个问题。在互联网上进行研究后,没有得到任何有用的线索。 额外相关查询: 如果我们在属性中使用数据集的标头,那么适配器似乎可以正常工作。
问题出在df=sampledata,因为标题"sampledata$Y"不存在,只有$Y存在。尝试操作cv.lm以解决问题,但未成功。
有没有一种方法可以在函数中引用y.1和x.1,而不是头部的Y〜X?
谢谢。
以下是最小数据集,可用于复制问题:
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"
进一步检查上述数据集表明,一个数据集是整数类型,另一个数据集是数字类型。但即使将数据集从数字类型转换成整数类型或者从整数类型转换成数字类型,屏幕上仍然会显示相同的错误,指示数据长度存在问题。
您能指导我应该如何纠正这个错误吗?
自两天前以来,我一直无法处理这个问题。在互联网上进行研究后,没有得到任何有用的线索。 额外相关查询: 如果我们在属性中使用数据集的标头,那么适配器似乎可以正常工作。
fit=lm(Y ~ X, data=sampledata)
a) 上述语法与以下语法有何区别
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存在。尝试操作cv.lm以解决问题,但未成功。
cv.lm(fit2, m=10)
b) 如果我们希望操纵变量,在 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.1和x.1,而不是头部的Y〜X?
谢谢。