Чтобы добавить небольшое объяснение, ваш столбец id
, скорее всего, является уникальной записью, и когда вы делаете totals~.
, вы регрессируете по всем столбцам, кроме totals
. Если на каждый фактор id
приходится только одно наблюдение, его нельзя оценить, и регрессия ... полная чушь:
da = data.frame(id=factor(1:10),x=runif(10),y=runif(10),z=runif(10))
trn = 1:5
mod = lm(y ~ .,data=da[trn,])
summary(mod)
Call:
lm(formula = y ~ ., data = da[trn, ])
Residuals:
ALL 5 residuals are 0: no residual degrees of freedom!
Coefficients: (2 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.48208 NA NA NA
id2 0.11749 NA NA NA
id3 0.01146 NA NA NA
id4 -0.29586 NA NA NA
id5 0.34529 NA NA NA
x NA NA NA NA
z NA NA NA NA
Вы можете удалить его при подборе модели:
mod = lm(y ~ .,data=da[trn,-1])
predict(mod,da[-trn,])
6 7 8 9 10
0.2992070 1.2727160 0.7789787 0.6585381 0.4227041
Для вашего примера используйте lm(totals~.,data=dat[Train,-1])
или lm(totals~.,data=dat[Train,!grepl("subj",colname(dat))])
. не имеет значения, находится ли идентификатор в data.frame для прогнозирования.