0

我想在 Rglm中为数据集执行Titanic。我执行了以下步骤来准备数据并运行 glm:

install.packages("reshape")
library(reshape)
data=(Titanic)
da=melt(Titanic)

m=dim(da)[1]
for (i in 1:m){
    if (da[i,5]!=0){
        for (k in 1:da[i,5]){
            da=rbind(da,da[i,])
        }
    }
}

one=rep(1, dim(da)[1])
x=as.matrix(cbind(one,da[,1:3]))
y=da[,4]

m1=glm(y~x,family=binomial)

我收到错误消息:

Error in `[[<-.data.frame`(`*tmp*`, i, value = c(1L, 1L, 1L, 1L, 1L, 1L,  : 
  replacement has 8932 rows, data has 2233

谁能帮我解决这个问题?

4

1 回答 1

0

您的主要错误在于公式的规范:它的右侧是 x,这没有翻译成“x 的每一列的主要术语”:它只是将您的矩阵 x 变成一列(长度为 8932)和尝试将其用作预测器。

做这种事情的最简单方法是确保您所有感兴趣的列都在 1 个 data.frame 中。幸运的是,在您的情况下,您已经在 da 中拥有了这个:

m1<-glm(Survived~Class+Sex+Age, data=da, family=binomial)

此外,默认情况下 glm 将自行添加截距,因此您无需手动指定一列(正如我在上面避免的那样)。

于 2013-05-03T06:28:43.363 回答