Rozważmy nieliniową najmniejszych modelu kwadratów na badania, na przykład w następującej postaci)Wypusty wewnątrz nieliniowej najmniejszych kwadratów R
y ~ theta/(1 + exp(-(alpha + beta * x)))
(my problemem jest kilka zmiennych, a funkcja zewnętrzna jest logistyczne ale nieco bardziej zaangażowany, ten jest prostszy, ale myślę, że jeśli mogę to zrobić, mój przypadek powinien podążać prawie natychmiast)
Chciałbym zastąpić termin "alpha + beta * x" (naturalny) sześciennym splajnem .
Oto niektóre kodu do tworzenia przykładowe dane z nieliniowej funkcji wewnątrz logistyczne:
set.seed(438572L)
x <- seq(1,10,by=.25)
y <- 8.6/(1+exp(-(-3+x/4.4+sqrt(x*1.1)*(1.-sin(1.+x/2.9))))) + rnorm(x, s=0.2)
Bez potrzeby logistyki wokół niego, gdybym był w LM, mógłbym wymienić liniową termin z spline termin łatwo; więc model liniowy coś takiego:
lm(y ~ x)
staje
library("splines")
lm(y ~ ns(x, df = 5))
generowania wartości wykonana jest prosty i coraz przewidywane wartości za pomocą (dla przykład) opakowanie skuteczna wydaje się dość prosta.
Rzeczywiście, dopasowanie oryginalnych danych z dopasowaniem spline na podstawie Lm nie jest złe, ale jest powód, dla którego potrzebuję go wewnątrz funkcji logistycznej (lub raczej odpowiednika w moim problemie).
Problem z NFS polega na tym, że muszę podać nazwy dla wszystkich parametrów (jestem całkiem zadowolony z tego, że je nazywam (b1, ..., b5) dla jednego dopasowania splajnu (i powiedzmy c1, ..., c6 dla innej zmiennej - potrzebuję być w stanie zrobić kilka z nich)
Czy istnieje rozsądny sposób na wygenerowanie odpowiedniej formuły dla nls, dzięki czemu mogę zamienić liniowy termin wewnątrz funkcji nieliniowej na splajnu?
Jedyne sposoby mogę postać, która nie może być to zrobić to trochę niezręczne i niezgrabne i nie ładnie uogólniać bez pisania całą masę kodu.
(edit for clarification) Dla tego małego problemu, mogę to zrobić ręcznie - napisać wyrażenie dla wewnętrznego produktu każdej zmiennej w macierzy wygenerowanej przez ns, razy wektor parametrów. Ale potem muszę napisać całą rzecz po kolei dla każdego splajnu w każdej innej zmiennej, i znowu za każdym razem, gdy zmieniam df w dowolnym splajnie, i znowu, jeśli chcę użyć cs zamiast ns. A potem, kiedy chcę spróbować zrobić jakąś prognozę (/ interpolację), otrzymujemy całą masę nowych problemów do rozwiązania. Muszę ciągle to robić, w kółko i potencjalnie dla znacznie większej liczby węzłów i kilku zmiennych, do analizy po analizie - i zastanawiałem się, czy istnieje bardziej schludny, prosty sposób niż wypisywanie każdego pojedynczego terminu, bez konieczności pisania dużej ilości kodu. Widzę dość bystry sposób na zrobienie tego, który wymagał by sporo kodu, aby uzyskać prawo, ale będąc R, podejrzewam, że jest dużo lepszy sposób (lub bardziej prawdopodobny 3 lub 4 lepsze sposoby), to jest po prostu umykając mi. Stąd pytanie.
Myślałem, że widziałem kogoś, kto zrobił coś takiego w przeszłości w całkiem przyjemny sposób, , ale za moje życie nie mogę go teraz znaleźć; Próbowałem kilka razy, aby go zlokalizować.
[Bardziej szczegółowo, chciałabym móc spróbować dopasować dowolną z kilku różnych splajnów w każdej zmiennej - aby wypróbować kilka możliwości - aby sprawdzić, czy mogę znaleźć prosty model, ale wciąż taki, w którym dopasowanie jest adekwatne do celu (hałas jest naprawdę niski, niektóre odchylenia w dopasowaniu są w porządku, aby osiągnąć ładny gładki wynik, ale tylko do pewnego punktu). To bardziej "znaleźć fajną, możliwą do interpretacji, ale odpowiednią funkcję dopasowywania", niż cokolwiek innego, co by wnioskowało o wnioskach i eksploracji danych, tak naprawdę nie jest problemem dla tego problemu.]
Alternatywnie, jeśli byłoby to znacznie łatwiejsze w powiedzeniu gnm lub ASSIST lub jeden z innych pakietów, który byłby użyteczną wiedzą, ale pomocne byłyby wskazówki dotyczące tego, jak postępować z powyższym problemem z zabawkami.
@Glen_b: Ok, edytowałem swoją odpowiedź; zobacz, czy to pomaga. –