gpt4 book ai didi

r - 使用 cv.lm() 进行 K 折交叉验证

转载 作者:行者123 更新时间:2023-12-04 14:57:27 25 4
gpt4 key购买 nike

我是 R 新手,并尝试使用 cv.lm() 进行 K 折交叉验证
引用:http://www.statmethods.net/stats/regression.html

我收到错误,表明我的变量的长度不同。事实上,在我使用 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 天前以来,我未能成功处理此问题。我使用互联网的研究没有得到任何好的指导。

其他相关查询:

如果我们在属性中使用数据集的标题,我会看到适合的作品,
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 ?

谢谢。

最佳答案

我不确定为什么会发生这种情况,但我发现您没有为 lm() 指定数据参数,所以这是我的第一个猜测。

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

由于错误消失了,这可能是一个足够的答案。

enter image description here

UPD : 报错的原因是sampledata中不存在y.1和x.1,作为cv.lm的df参数提供,所以在cv.lm中公式y.1~x.1没有意义环境。

关于r - 使用 cv.lm() 进行 K 折交叉验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20744224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com