Создание нового фрейма данных с помощью dplyr::filter в цикле for
У меня есть набор данных, к которому я хотел бы приспособить билинейную модель. Однако я также хотел бы получить какое-то обоснование для нахождения точки перехода.
Я хотел пройтись по возможным значениям для точки перехода, отделить данные с помощью dplyr::filter(), а затем подогнать отдельные линейные модели к 2 новым наборам данных.
После этого я подумал, что смогу вычислить сумму значений R в квадрате для обеих линейных моделей. Затем я выбрал бы точку перехода с наибольшей суммой значений R в квадрате. Я надеялся, что это даст точку перехода с наилучшим средним соответствием для 2 линейных моделей.
... однако я получаю следующую ошибку при запуске приведенного ниже кода:
ошибка:
"Ошибка в lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): 0 (не NA) случаях"
Код:
simpleTable<-data.frame(a=rep('group 1',10),
b=c(1,2,2.5,3,3.5,4.5,5,7,8,10),
c=c(8,15,18,19,22,24,25,29,31,35))
DF<- data.frame(k=1, Rsq.total=0);
for (k in seq(from=0, to=10, by=0.1)){
for (j in seq(from=1, to=length(simpleTable$a), by=1)){
if(simpleTable$b[j]<=k){
simpleTable$b1[j]<-simpleTable$b[j]; simpleTable$b2[j]<-0
} else {simpleTable$b1[j]<-0; simpleTable$b2[j]<-simpleTable$b[j]}
}
simpleTable.1<-simpleTable %>% dplyr::filter(simpleTable$b1 != 0)
simpleTable.2<-simpleTable %>% dplyr::filter(simpleTable$b2 != 0)
LinMod.1<-lm(c ~ b1, data=simpleTable.1); Rsq.1<-summary(LinMod.1)$r.squared
LinMod.2<-lm(c ~ b2, data=simpleTable.2); Rsq.2<-summary(LinMod.2)$r.squared
Rsq.total<-Rsq.1+Rsq.2
newRow<-data.frame(k, Rsq.total); DF<-rbind(DF, newRow)
}
Этот пример с фиктивными данными, но я думаю, что он описывает мою проблему. Любая помощь приветствуется.