Wiem, jak wykonać podstawową regresję wielomianową w R. Jednakże, mogę użyć tylko nls
lub , aby dopasować linię, która minimalizuje błąd z punktami.Regresja wielomianowa w R - z dodatkowymi ograniczeniami na krzywej
Działa to przez większość czasu, ale czasami, gdy w danych występują luki pomiarowe, model staje się bardzo sprzeczny z intuicją. Czy istnieje sposób na dodanie dodatkowych ograniczeń?
Powtarzalne Przykład:
Chcę dopasować model do następujących złożonych danych (podobnie do moich danych rzeczywistych):
x <- c(0, 6, 21, 41, 49, 63, 166)
y <- c(3.3, 4.2, 4.4, 3.6, 4.1, 6.7, 9.8)
df <- data.frame(x, y)
Najpierw wykreślić ją.
library(ggplot2)
points <- ggplot(df, aes(x,y)) + geom_point(size=4, col='red')
points
Wygląda na to, czy mamy podłączone te punkty z linii, to zmiana kierunku 3 razy, więc spróbujmy zamontowanie Quartic do niego.
lm <- lm(formula = y ~ x + I(x^2) + I(x^3) + I(x^4))
quartic <- function(x) lm$coefficients[5]*x^4 + lm$coefficients[4]*x^3 + lm$coefficients[3]*x^2 + lm$coefficients[2]*x + lm$coefficients[1]
points + stat_function(fun=quartic)
Wygląda jak model pasuje punkty całkiem dobrze ... z wyjątkiem, ponieważ nasze dane miał dużą lukę pomiędzy 63 i 166, istnieje ogromny skok tam, który ma powody do w modelu. (Dla mojego danych rzeczywistych wiem, że nie ma tam ogromny szczyt)
Więc pytanie jest w tym przypadku:
- Jak mogę ustawić, że lokalne maksimum być na (166, 9,8)?
Jeśli nie jest to możliwe, to kolejny sposób, aby zrobić to byłoby:
- Jak mogę ograniczyć Y wartości przewidywanych przez linię z coraz większym niż y = 9,8.
A może jest lepszy model do użycia? (Poza tym, że robi to kawałek po kawałku). Moim celem jest porównanie cech modeli między wykresami.
dostać Quartic wielomian pasuje dodany do fabuły, można również dodać do Ciebie kod ggplot' ':' geom_smooth (method = „lm”, se = FALSE, wzór = y ~ poly (x, 4)) '. – eipi10
@ eipi10 Dzięki za cynk! To może nie rozwiązać problemu, ale czyni kod znacznie czystszym :) –
Jestem pewien, że istnieje sposób na stworzenie ograniczonego dopasowania wielomianowego, ale na razie inną opcją jest użycie regresji lokalnej. Na przykład: 'geom_smooth (color =" red ", se = FALSE, method =" loess ")'. "less" jest domyślną metodą, gdy masz małą liczbę punktów, więc możesz upuścić argument "method", jeśli chcesz. – eipi10