AIM:此处的目的是使用步骤函数找到合适的拟合,该函数使用age
来描述wage
数据集中的Wage
图书馆ISLR
。
计划:
为了找到合适的合身,我会尝试多次合身,这将有不同的切割点。我将glm()
函数(boot
库)用于拟合目的。为了检查最合适的匹配,我将使用cv.glm()
函数对拟合模型进行交叉验证。
问题:
为了做到这一点,我做了以下事情:
all.cvs = rep(NA, 10)
for (i in 2:10) {
lm.fit = glm(wage~cut(Wage$age,i), data=Wage)
all.cvs[i] = cv.glm(Wage, lm.fit, K=10)$delta[2]
}
但这会产生错误:
Error in model.frame.default(formula = wage ~ cut(Wage$age, i), data =
list( : variable lengths differ (found for 'cut(Wage$age, i)')
然而,当我运行下面给出的代码时,它会运行。(可以找到here)
all.cvs = rep(NA, 10)
for (i in 2:10) {
Wage$age.cut = cut(Wage$age, i)
lm.fit = glm(wage~age.cut, data=Wage)
all.cvs[i] = cv.glm(Wage, lm.fit, K=10)$delta[2]
}
假设和结果:
嗯,cut()
和glm()
可能无法合作。但这有效:
glm(wage~cut(age,4),data=Wage)
问题:
所以,基本上我们使用cut()
函数,将结果保存在变量中,然后在glm()
函数中使用该变量。但是我们不能将cut函数放在glm()
函数中。这也是,只有代码处于循环中。
那么,为什么代码的第一个版本不起作用?
这令人困惑。任何帮助表示赞赏。