Как запустить регрессию в 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
Другие вопросы по тегам