我想对R中的数据集glm
执行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
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
你的主要错误在公式的规范中:它的右边是x,这没有被翻译成“x的每一列的主要术语”:它只是将你的矩阵x变成一列(长度) 8932)并尝试将其用作预测器。
执行此类操作的最简单方法是确保所有感兴趣的列都在1 data.frame中。幸运的是,在你的情况下,你已经在da:
中有了这个m1<-glm(Survived~Class+Sex+Age, data=da, family=binomial)
此外,默认情况下,glm会自动添加截距,因此您无需手动指定一列(如上所述)。