首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R-误差中多项式lm的交叉验证:长度不同

R-误差中多项式lm的交叉验证:长度不同
EN

Stack Overflow用户
提问于 2016-12-01 23:41:12
回答 1查看 899关注 0票数 1

我发现了关于这个主题的其他问题,比如this,但是我一直收到错误消息。

Xy.coords中的错误(x,y,xlabel,ylabel,log):'x‘和'y’长度不同

下面是我使用的代码:

代码语言:javascript
运行
AI代码解释
复制
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) 

当然,长度是一样的:

代码语言:javascript
运行
AI代码解释
复制
> length(UR)
[1] 214
> length(MD)
[1] 214

注意,在同一个脚本中,我使用交叉验证执行另一个线性回归,这是可行的。

代码语言:javascript
运行
AI代码解释
复制
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)

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

编辑

要获取数据:

代码语言:javascript
运行
AI代码解释
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-02 00:25:52

DAAG:::cv.lm显然不支持使用lm所能做的一切,例如,它不支持公式中的函数。你需要采取一个中间步骤。

代码语言:javascript
运行
AI代码解释
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40927115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档