Как запустить регрессию в R, когда имя столбца включает в себя десятичные точки
Это может быть очень простой проблемой, но я не могу ее обойти. Имена столбцов, такие как X100.4, X100.-4, X100.-5 и т. Д. Я пытаюсь запустить линейную регрессию, но когда я делаю это, я получаю ошибку
lm<-lm(X986~X241+X243+X280+X282+X987+X143.2+X239.0+X491.61+X350.-4,data=train)
Error in terms.formula(formula, data = data) :
invalid model formula in ExtractVars
он работает нормально без переменной X350.-4, поэтому я предполагаю, что это проблема. Я попытался сделать "X350.-4" и "X350.-4", но это привело к той же ошибке. Я также попытался сделать "" для всех переменных, но это также не сработало.
2 ответа
Вы можете использовать backticks:
DF <- data.frame(x=1:10, y=rnorm(10))
names(DF)[1] <- "x.-1"
lm(y~`x.-1`, data=DF)
Но было бы лучше санировать имена:
names(DF) <- make.names(names(DF))
Проблема со знаком минус ("-"), а не десятичными. Так что если вам действительно нужны эти имена столбцов, либо используйте подход @Roland, либо замените знаки минус чем-то другим:
colnames(data)=gsub(pattern="-",x=colnames(data),replacement="_")
С помощью make.names(...)
это немного рискованно, потому что он может генерировать коллизии (несколько столбцов с одним и тем же именем). Рассматривать:
DF <- data.frame(y=1:3,x.1=6:8,z=11:13)
colnames(DF)[3] <- "x-1"
DF
y x.1 x-1
1 1 6 11
2 2 7 12
3 3 8 13
names(DF) <- make.names(names(DF))
DF
y x.1 x.1
1 1 6 11
2 2 7 12
3 3 8 13
Вам может понадобиться использовать:
names(DF) <- make.names(names(DF),unique=T)
DF
y x.1 x.1.1
1 1 6 11
2 2 7 12
3 3 8 13