2013-05-03 5 views
0

Я хочу выполнить glm для набора данных Titanic в R. я сделал следующие шаги для подготовки данных и выполнения 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

Ваша основная ошибка заключается в спецификации формулы: ее правая сторона равна x, это не переведено в «основные термины для каждого столбца x»: она просто превращает вашу матрицу x в один столбец (из длина 8932) и пытается использовать это как предиктор.

Самый простой способ сделать это, чтобы убедиться, что все интересующие вас столбцы находятся в 1 data.frame. К счастью, в вашем случае, у вас уже есть это да:

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

Кроме того, по умолчанию GLM добавит перехватывать сам по себе, так что вам не нужно вручную указать столбец (как это я избегал в приведенном выше).

Смежные вопросы