首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从内存中读取文件进行回归(R)

从内存中读取文件进行回归(R)
EN

Stack Overflow用户
提问于 2014-12-23 18:41:48
回答 1查看 762关注 0票数 0

当尝试使用快速箱的shglm函数时,我遇到了一个问题。由于文件太大,无法读入内存,所以我想使用包的帮助页中概述的链接函数。链接函数是

代码语言:javascript
复制
make.data<-function(filename, chunksize,...){       
 conn<-NULL
 function(reset=FALSE){
 if(reset){
   if(!is.null(conn)) close(conn)
   conn<<-file(filename,open="r")
 } else{
   rval<-read.table(conn, nrows=chunksize,...)
   if ((nrow(rval)==0)) {
        close(conn)
        conn<<-NULL
        rval<-NULL
   }
   return(rval)
 }

}}

代码语言:javascript
复制
load(ti.RData)

然后,我将我的数据帧(称为ti)写到表中。

代码语言:javascript
复制
write.table(ti,"data1.txt",row.names=FALSE,col.names=FALSE)

如这里的示例所示,http://www.inside-r.org/packages/cran/speedglm/docs/shglm。之后

代码语言:javascript
复制
da<-make.data("data1.txt",chunksize=10000,col.names=colnames(ti))
rm(ti)
b1<-shglm(T2D~factor(SIBCO)+factor(POCOD),datafun=da,family=binomial())

但我犯了个错误

代码语言:javascript
复制
Error in dev.resids(y, mu, weights) : 
  argument mu must be a numeric vector of length 1 or length 802

我很高兴上传我的数据集,但有人可以粗略地告诉我从哪里开始调试吗?我认为当通过链接函数(使用read.table)读取data1.txt时,原始数据帧中的一些因素通过这个操作转换为整数。这就是我把因子放在变量周围的原因。任何建议都会很有帮助

EN

回答 1

Stack Overflow用户

发布于 2015-11-19 17:26:21

简单的回答是,您的输入数据可能有问题。如果没有输入数据,很难说,但根据我使用带有因素的二项式glm运行shglm的经验,这是我要从这里开始的。

作为一般调试策略,您可以尝试如下所示:

  • debug(shglm)options(error=recover)行添加到脚本中
  • 打开shglm的trace=T选项
  • 启动R并以source("myscript.R")的形式加载脚本
  • 逐步遍历调试器,并使用ls()查看当前存在的变量,并使用dim()colnames()等检查它们。

现在,在我的经验中,shglm返回非常神秘的错误消息,这些错误消息可能会根据输入块的大小而改变(因为这会改变数据和模型所知道的因素)。下面,我列出了一些需要检查数据的内容,以及在使其正常工作时遇到的一些常见错误,这可能有助于您运行自己的模型。

关于数据,请确保:

  • 因变量为0/1或其比例为0 <= y <= 1(在有成功和失败的情况下,可以使用权重参数给出尝试总数并计算公式中的比例,即成功/(成功+失败),常见错误有:

Error in if (any(y < 0 | y > 1)) stop("y values must be 0 <= y <= 1") : missing value where TRUE/FALSE needed Calls: shglm -> eval -> eval

  • 指定所有级别的因素(不要忘记默认值),并确保它们被排序,即factor(age, levels("24andbelow, 25to49, "50to74", "75andover")),否则您将得到以下错误:

Error in crossprod(weights, y) : non-conformable arguments Calls: shglm -> crossprod -> crossprod

Error in XTX[rownames(Ax), colnames(Ax)] : subscript out of bounds Calls: shglm

现在我没有得到你的具体错误,而是一些足够近的东西,我认为我应该提到。在这里,我尝试提供一个包含两列的公式(在常规glm中可以用于成功和失败),即cbind(成功,失败)~factor(Var1)+ factor(var2)。

Error in dev.resids(y, mu, weights) : argument wt must be a numeric vector of length 1 or length 10 Calls: shglm -> dev.resids

我想主要是检查您的输入数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27626202

复制
相关文章

相似问题

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