加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R语言实现逻辑回归logistic regression的交叉检验cross validation时的问题

(2014-07-07 21:13:33)
分类: R语言
在用glm实现了logistic regreesion 后需要交叉检验检查错误率,这时可用boot package下的cv.glm函数,专门用于线性回归检验。
然而我在检验时出现了 Error:找不到对象 myformula的情况可以用getAnywhere(fun),查看cv.glm  #前提是已经将库载入:library(boot)或者查看其他的说明资料就会发现。
glm函数用了一种formula stack的东西,存储公式对象,而cv.glm恰恰就使用了glm中存储的这个formula对象,就在myglm$call属性(用attributes/str函数可产看)里, 这种方法很方便很灵活,是直接存储了原代码语句而不是展开存储,也就是如果我如此调用:glm(formula=myformula,data=mydata,,,,), 则myglml=glm(formula=myformula,data=mydata,,,,)而不会将我的myformula展开成y~x1+x2+x3...,这样当调用cv.glm时,直接用了myglm$call存储的公式,所以找不到myformula。我觉得就像用了substitute一样直接以字符串来读原代码而不会分析展开成变量。而且我用了几种方法都没办法展开到call中。

所以最后的办法是直接写了一次myglm$call<-myformula,然后再调用cv.glom(data=mydata, myglm,....)这时不会再出错。可能你会想为什么要用myformla变量赋值而不直接展开写入,那是因为我的公式是改变的,动态生成的,我用paste来生成的公式。

还有一个错误需要记录一下:
就是:Error: $ operator is invalid for atomic vectors
这可能是你本来想要生成一个list或data.frame 可是弄错了在一个字符串上或者c()生成的vector上用了$符号。

希望能帮到大家!



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有