【问题标题】:Crossvalidation of polynomial lm in R - error: lengths differR中多项式lm的交叉验证-错误:长度不同
【发布时间】:2017-04-17 01:31:34
【问题描述】:

我发现了有关此主题的其他问题,例如 this,但是我不断收到错误消息

xy.coords(x, y, xlabel, ylabel, log) 中的错误:“x”和“y”长度 不同

下面是我正在使用的代码:

library(DAAG)
attach(ultrasonic)

g.poly = lm(UR ~ poly(MD, 3), data = ultrasonic)
cv.poly <- cv.lm(ultrasonic, g.poly ,m=3, plotit=TRUE, printit=TRUE, dots=FALSE, seed=29) 

当然,长度是一样的:

> length(UR)
[1] 214
> length(MD)
[1] 214

请注意,在同一个脚本中,我使用交叉验证执行另一个线性回归,它有效。

library(DAAG)
g.lin = lm(log(UR) ~ MD, data = ultrasonic)
cv.lin <- cv.lm(ultrasonic, g.lin ,m=3, plotit=TRUE, printit=TRUE, dots=FALSE, seed=29)

知道为什么多项式回归交叉验证不起作用吗?

编辑

获取数据:

install.packages('nlsmsn')
library('nlsmsn')
data(Ultrasonic)

#names differ, i am using copy in local machine with lower case u(ultrasonic) and different column names, but data are identical.
#UR = y
#MD = x

【问题讨论】:

  • 首先,不要attachdata.frame。然后,您的错误来自绘图。如果您关闭cv.lm 中的绘图,您会得到同样的错误吗?最后,需要一个可重复的例子来进一步诊断。
  • 我很高兴错了,但cv.lm 中的 if else 语句似乎存在错误和格式错误
  • Ultrasonic 不是 ultrasonic 顺便说一句?
  • @Roland - 在我找到的答案中,他们总是建议附加数据框。但是分离的时候是一样的。此外,当我关闭绘图时,我仍然会收到错误消息。
  • 你可以信任@Roland 并烧毁所有捍卫attaching 的书籍。

标签: r regression cross-validation


【解决方案1】:

DAAG:::cv.lm 显然不支持你可以用lm 做的所有事情,例如,它不支持公式中的函数。您需要采取中间步骤。

mf <- as.data.frame(model.matrix(y ~ poly(x), data = Ultrasonic))
mf$y <- Ultrasonic$y
mf$`(Intercept)` <- NULL

#sanitize names
names(mf) <- make.names(names(mf))
#[1] "poly.x." "y"  
g.poly.san <- lm(y ~ ., data = mf)

cv.poly <- cv.lm(mf, g.poly.san, m=3, plotit=TRUE, printit=TRUE, dots=FALSE, seed=29) 
#works

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 2017-09-08
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多