Eksploracja danych: jak powinienem znaleźć formę funkcjonalną?

34

Jestem ciekaw powtarzalnych procedur, które mogą być wykorzystane do odkrywania postaci funkcyjnej funkcji y = f(A, B, C) + error_term, gdzie jest mój tylko wejście jest zbiorem obserwacji ( y, A, Bi C). Należy pamiętać, że funkcjonalna forma fjest nieznana.

Rozważ następujący zestaw danych:

AA BB CC DD EE FF
== == == == == ==
98 11 66 84 67 10500
71 44 48 12 47 7250
54 28 90 73 95 5463
34 95 15 45 75 2581
56 37 0 79 43 3221
68 79 1 65 9 4721
53 2 90 10 18 3095
38 75 41 97 40 4558
29 99 46 28 96 5336
22 63 27 43 4 2196
4 5 89 78 39 492
10 28 39 59 64 1178
11 59 56 25 5 3418
10 4 79 98 24 431
86 36 84 14 67 10526
80 46 29 96 7 7793
67 71 12 43 3 5411
14 63 2 9 52 368
99 62 56 81 26 13334
56 4 72 65 33 3495
51 40 62 11 52 5178
29 77 80 2 54 7001
42 32 4 17 72 1926
44 45 30 25 5 3360
6 3 65 16 87 288

W tym przykładzie załóżmy, że o tym wiemy FF = f(AA, BB, CC, DD, EE) + error term, ale nie jesteśmy pewni co do formy funkcjonalnej f(...).

Jakiej procedury / jakich metod użyłbyś do znalezienia funkcjonalnej formy f(...)?

(Punkt bonusowy: Jak najlepiej zgadnąć przy fpodaniu powyższych danych? :-) I tak, istnieje „poprawna” odpowiedź, która da R^2ponad 0,99.)

knorv
źródło
1
@OP: Poniższe komentarze IrishStat przypominają mi, że bez pewnej wiedzy o tym, w jaki sposób twoje zmienne niezależne są ze sobą powiązane i / lub zmienna zależna, teoretycznie pozostawia cię „w potoku bez wiosła”. Na przykład, gdyby FFbyła „wydajnością spalania” i AAbyła ilością paliwa i BBbyła ilością tlenu, szukałbyś współdziałającego terminu AAiBB
Pete
@Pete: Warunki interakcji są absolutnie możliwe. Mam nadzieję, że nie wykluczyłem tego poprzez nieprawidłowe sformułowanie mojego pytania.
knorv
2
@Pete: To nie jest problem (i nazwałbym to nawet realistycznym w prawdziwym życiu), po prostu zobacz moją odpowiedź poniżej.
vonjd
3
Pete: Spośród nieskończonej liczby funkcji, które pasują do danych, R^2 >= 0.99chciałbym znaleźć tę o najlepszym stosunku wydajności do złożoności (i oczywiście bez dopasowania próbki). Przepraszam, że nie napisałem tej
objaśnienia
1
Również teraz, gdy odpowiedź na pytanie jest dość dobra, fajnie byłoby wiedzieć, czy dane zostały wygenerowane przez jedną z sugerowanych funkcji poniżej.
naught101

Odpowiedzi:

29

Aby znaleźć najlepiej dopasowaną formę funkcjonalną (tzw. Regresję swobodną lub regresję symboliczną) dla danych, wypróbuj to narzędzie - o ile wiem, jest to najlepsza dostępna metoda (przynajmniej jestem bardzo podekscytowana) ... i jej wolny :-)

http://creativemachines.cornell.edu/eureqa

EDYCJA : Dałem temu szansę z Eureqą i wybrałbym:

AA+AA2+BBCC
R2=0.99988

Nazwałbym to idealnym dopasowaniem (Eureqa daje inne, lepiej dopasowane rozwiązania, ale są one również nieco bardziej skomplikowane. Eureqa preferuje to, więc wybrałem ten) - i Eureqa zrobiła wszystko dla mnie w ciągu kilku sekund normalny laptop ;-)

vonjd
źródło
6
tylko dla odniesienia, Eureqa korzysta z programowania genetycznego, aby znaleźć rozwiązania problemu regresji symbolicznej.
Thies Heidecke,
10
+1 Imponująca wydajność bezmyślnego, automatycznego narzędzia!
whuber
1
@vonjd, link mówi teraz „bezpłatna 30-dniowa wersja próbna”. Czy znasz bezpłatną alternatywę?
denis
3
@denis: Możesz wypróbować ten pakiet R: cran.r-project.org/web/packages/rgp/index.html - ale nie jest tak wyrafinowany jak wspomniane oprogramowanie (jeszcze nie?)
vonjd
3
Eureqa jest nadal bezpłatna dla organizacji akademickich / non-profit
Inverse
25

R2

W tym celu należy zauważyć, że standardowe techniki analizy danych eksploracyjnych (EDA) i regresji (ale nie etapowe lub inne zautomatyzowane procedury) sugerują stosowanie modelu liniowego w postaci

f=a+bc+abc+constant+error

R2fabcabc

f=a2+bc+constant+error

R2

f=a2+bc+50

plus mały normalnie rozłożony błąd SD w przybliżeniu równy 50.

Edytować

afaa2bcaa2,,e2,ab,ac,,deb2

b2

W każdym razie poprawione dopasowanie zapewnia

f=a+a2+bcb2/100+30.5+error

0


ab2

BTW, używając solidnej regresji mogę dopasować model

f=1.0103a2+0.99493bc0.007b2+46.78+error

z resztkowym SD wynoszącym 27,4 i wszystkimi resztami między -51 a +47: zasadniczo tak dobre jak poprzednie dopasowanie, ale z jedną zmienną mniejszą. W tym sensie jest bardziej oszczędny, ale mniej oszczędny w tym sensie, że nie zaokrągliłem współczynników do „ładnych” wartości. Niemniej jednak jest to forma, którą zwykle faworyzuję w analizie regresji bez rygorystycznych teorii na temat tego, jakie wartości powinny mieć współczynniki i jakie zmienne należy uwzględnić.

R2

Whuber
źródło
1
Dobra robota! Jak dotąd wydaje się to najlepszą odpowiedzią.
Zach
@whuber: Dobra robota - zbliżasz się! :-) Prawdą jest, że dane zostały sztucznie wygenerowane za pomocą formuły i terminu błędu. Ale formuła nie jest dokładnie taka, którą znalazłeś - brakuje ci kilku terminów. Ale jesteś blisko i jesteś obecnie na prowadzeniu :-)
knorv
4
@ Whuber Dałem już +1, ale chciałbym dodać, że bardzo pouczające jest zapoznanie się z podejściem do takiego problemu. Jesteś wart nagrody w jakikolwiek sposób.
chl
1
@ Bill Próbowałem tego wcześnie. Ufam, że moje wyjaśnienie zapewnia miejsce na twoją propozycję, a także na dwie, które załączyłem. Jest więcej niż jedna poprawna odpowiedź. Kontynuowałem analizę i zawarłem te dodatkowe warunki, ponieważ było jasne, że istnieją wzorce w wartościach rezydualnych i że ich uwzględnienie istotnie zmniejsza różnicę rezydualną. (Przyznaję się, że poświęciłem temu bardzo mało czasu i uwagi: całkowity czas na wstępną analizę, łącznie z napisaniem odpowiedzi, wynosił 17 minut. Więcej czasu często przekłada się na więcej wglądu ...)
whuber
1
@naught Ciekawie byłoby zacząć od tak długiej formuły i zastosować elastyczną sieć (lub podobny algorytm eliminujący zmienne). Podejrzewam, że sukces takiego podejścia zależałby od utrzymania względnie małej liczby funkcji i uwzględnienia wśród nich poprawnych funkcji - co brzmi bardziej jak kwestia szczęścia i zgadywania niż jakikolwiek zasadny dochodzenie. Ale jeśli ślepe rzucenie ogromnej liczby form funkcjonalnych na problem zakończy się sukcesem, warto byłoby o tym wiedzieć.
whuber
5

Twoje pytanie wymaga dopracowania, ponieważ fprawie na pewno funkcja nie jest jednoznacznie zdefiniowana w przykładowych danych. Istnieje wiele różnych funkcji, które mogą generować te same dane.

To powiedziawszy, analiza wariancji (ANOVA) lub „badanie wrażliwości” może wiele powiedzieć o tym, jak twoje dane wejściowe (AA..EE) wpływają na twoją produkcję (FF).

Właśnie zrobiłem szybki ANOVA i znalazł dość dobry model: FF = 101*A + 47*B + 49*C - 4484. Funkcja nie wydaje się zależeć liniowo od DD lub EE. Oczywiście moglibyśmy pójść dalej z modelem i dodać warunki kwadratowe i mieszane. W końcu otrzymasz idealny model, który nadmiernie pasuje do danych i nie ma wartości predykcyjnej. :)

Pete
źródło
@ Pet Jak powiedziałeś, możesz dodać kwadratowe, sześcienne, kwartalne .... i warunki mieszania, ale to tylko nonsens. Istnieje nonsens i niesensowny bot nonsens, najbardziej nonsensualnym nonsensem jest „nonsens statystyczny”.
IrishStat
2
@IrishStat, dodawanie mieszanki i warunków wyższych zamówień zazwyczaj nie jest bzdurą; tylko źle, gdy odbywa się to bez ograniczeń i bez względu na teorię
Pete
2
@Pete. Poprawny! Brak wcześniejszej teorii czyni ją głupią.
IrishStat
@Pete: Jakie R ^ 2 otrzymujesz za swój model?
knorv
@knorv: Nie do końca pamiętam, ale było> 0,90. Kiedy narysowano wykres wokół linii regresji, punkty wyglądały na trochę „S” / sześcienne, więc zgaduję, że funkcja „f” była matematyczną kreacją, w której ktoś wpisał 100A + 50 (B + C) + wyższy rząd warunki dotyczące D & E.
Pete
3

Ogólnie rzecz biorąc, w uczeniu maszynowym nie ma darmowego lunchu:

W szczególności, jeśli algorytm A przewyższa algorytm B w niektórych funkcjach kosztowych, to, mówiąc luźno, musi istnieć dokładnie tyle innych funkcji, w których B przewyższa A

/ edit: również promieniowy SVM z C = 4 i sigma = 0,206 z łatwością daje R2 równe 0,99. Wyodrębnienie faktycznego równania użytego do uzyskania tego zestawu danych pozostawia się jako ćwiczenie dla klasy. Kod znajduje się w R.

setwd("~/wherever")
library('caret')
Data <- read.csv("CV.csv", header=TRUE)
FL <- as.formula("FF ~ AA+BB+CC+DD+EE")
model <- train(FL,data=Data,method='svmRadial',tuneGrid = expand.grid(.C=4,.sigma=0.206))
R2( predict(model, Data), Data$FF)
Zach
źródło
-2

Wszystkie modele są błędne, ale niektóre są przydatne: GEPBox

Y (T) = - 4709,7
+ 102,60 * AA (T) - 17,0707 * AA (T-1)
+ 62,4994 * BB (T) + 41,7453 * CC (T) + 965,70 * ZZ (T)

gdzie ZZ (T) = 0 DLA T = 1,10 = 1 INACZEJ

Wydaje się, że istnieje „opóźniony związek” między Y i AA ORAZ wyjaśniona zmiana średniej dla obserwacji 11–25.

Ciekawe wyniki, jeśli nie są to dane chronologiczne ani przestrzenne.

IrishStat
źródło
@IrishStats Co to jest „GEP Box”?
knorv
IrishStat: Dane nie są chronologiczne. Kolejność obserwacji nie ma więc znaczenia. Zmiana średniej dla obserwacji # 11-25 jest jedynie efektem ubocznym, w jaki sposób pobrałem zestaw danych.
knorv
1
@IrishStat: Miałem na myśli, że akurat zdarzyło mi się pobierać rekordy w określonej kolejności (pomyśl ORDER BY). Rzędy nie mają żadnej specjalnej kolejności. Możesz więc bezpiecznie zmienić ich kolejność bez utraty jakichkolwiek informacji. Przepraszam, jeśli cię
pomyliłem
1
IrishStat: zestaw danych jest nieuporządkowany. AA(T-1)Termin w równaniu nie ma sensu w tym kontekście.
naught101
2
AA(T-1)R2
-3

r kwadrat 97,2

Oszacowanie / kontrola diagnostyczna dla zmiennej YY
X1 AAS
X2 BB
X3 BBS
X4 CC

Liczba reszt (R) = n 25
Liczba stopni swobody = nm 20
Średnia resztkowa = Suma R / n -141873E-05
Suma kwadratów = Suma R 2,775723E + 07
Wariancja = SOS / (n) 310289.
Skorygowana Wariancja = SOS / (nm) 387861.
Odchylenie standardowe RMSE = SQRT (Adj Var) 622,785
Błąd standardowy średniej = Standard Dev / (nm) 139,259
Średnia / jej błąd standardowy = Średnia / SEM -101877E-07
Średnia bezwzględna dewiacja = Suma (ABS (R)) / n 455.684
Wartość AIC (Używa var) = nln + 2m 326,131
Wartość SBC (Używa var) = nln + m * lnn 332.226
Wartość BIC (Używa var) = patrz Wei p153 340.388
R Kwadrat = .972211
Statystyka Durbin-Watsona = [- A (T -1)] ** 2 / A
2 1,76580

**
WZÓR KOMPONENTU LAG COEFF STANDARDOWY
BŁĄD WARTOŚĆ BŁĘDU WARTOŚĆ

1CONSTANT                         -.381E+04   466.       .0000    -8.18

WEJŚCIE SERII X1 AAS AA SQUARED

2Omega (input) -Factor #  1    0   .983       .410E-01   .0000    23.98

WEJŚCIE SERII X2 BB BB JAKO DOSTARCZONE

3Omega (input) -Factor #  2    0   108.       14.9       .0000     7.27

SERIA WEJŚCIOWA X3 BBS BB SQUARED

4Omega (input) -Factor #  3    0  -.577       .147       .0008    -3.93

WEJŚCIE SERII X4 CC CC JAK DANE

5Omega (input) -Factor #  4    0   49.9       4.67       .0000    10.67

 Resztkowa DZIAŁKA

IrishStat
źródło