Mam 10 klasę i zamierzam symulować dane dla projektu targów nauki maszynowego. Ostateczny model zostanie zastosowany do danych pacjenta i będzie przewidywał korelację między niektórymi porami tygodnia i wpływ, jaki ma to na przyleganie leku w danych jednego pacjenta. Wartości przylegania będą binarne (0 oznacza, że nie zażyli leku, 1 oznacza, że przyjęli). Chcę stworzyć model uczenia maszynowego, który będzie mógł uczyć się na podstawie relacji między porami tygodnia i podzielił tydzień na 21 przedziałów czasowych, po trzy dla każdej pory dnia (1 to poniedziałek rano, 2 to poniedziałek po południu, itp.). Chcę symulować dane o wartości 1000 pacjentów. Każdy pacjent będzie miał dane z 30 tygodni. Chcę wstawić pewne trendy związane z porą tygodnia i przestrzeganiem zasad. Na przykład, w jednym zbiorze danych mogę powiedzieć, że przedział czasowy 7 tygodnia ma statystycznie istotny związek z przestrzeganiem. Aby ustalić, czy związek jest statystycznie istotny, czy nie, wymagałbym wykonania testu t dla dwóch próbek, porównując jedną szczelinę czasową z każdym z pozostałych, i upewnienia się, że wartość istotności jest mniejsza niż 0,05.
Jednak zamiast symulować własne dane i sprawdzać, czy trendy, które wstawiłem, są znaczące, czy nie, wolę pracować wstecz i być może skorzystam z programu, o który mógłbym poprosić, aby przypisać pewnemu przedziałowi czasu znaczący trend z zachowaniem zgodności, i powróci dane binarne, które zawierają w sobie trend, o który prosiłem, a także dane binarne dla innych przedziałów czasowych, które zawierają szum, ale nie generują statystycznie istotnego trendu.
Czy jest jakiś program, który może mi pomóc osiągnąć coś takiego? A może moduł python?
Jakakolwiek pomoc (nawet ogólne komentarze na temat mojego projektu) będzie bardzo mile widziana !!
źródło
Odpowiedzi:
Uwagi ogólne
„Mam 10 klasę i staram się symulować dane dla projektu targów nauki maszynowego”. Niesamowite. W ogóle nie dbałem o matematykę w 10. klasie; Myślę, że wziąłem coś takiego jak Algebra 2 tego roku ...? Nie mogę się doczekać, aż zwolnisz mnie z pracy za kilka lat! Poniżej podaję kilka rad, ale: Czego próbujesz się nauczyć z tej symulacji? Co znasz już w statystyce i uczeniu maszynowym? Wiedza o tym pomogłaby mi (i innym) zebrać bardziej szczegółową pomoc.
Python jest bardzo przydatnym językiem, ale uważam, że R jest lepszy do symulacji danych. Większość książek / blogów / badań / zajęć, na które natknąłem się na symulowanie danych (również to, co ludzie nazywają „metodami Monte Carlo” jako wymyślnymi), jest w języku R. Język statystyczny jest znany przez statystyków, dla statystyk, „i większość naukowców - którzy opierają się na badaniach symulacyjnych w celu wykazania, że ich metody działają - używa R. Wiele fajnych funkcji znajduje się w podstawowym języku R (to znaczy, nie są wymagane żadne dodatkowe pakiety), na przykład
rnorm
dla normalnej dystrybucji,runif
dla munduru dystrybucja, dystrybucjarbeta
beta i tak dalej. W R wpisanie?Distributions
spowoduje wyświetlenie na nich strony pomocy. Istnieje jednak wiele innych fajnych pakietów, takich jakmvtnorm
lubsimstudy
które są przydatne. Poleciłbym DataCamp.com do nauki języka R, jeśli znasz tylko Python; Myślę, że są dobre do łagodnego wprowadzenia do rzeczyWygląda na to, że dużo się tu dzieje: chcesz danych, które są z czasem (podłużne), wewnątrz podmiotu (być może przy użyciu modelu wielopoziomowego) i mają do nich komponent sezonowy (być może model szeregów czasowych), wszystkie przewidujące dychotomiczny wynik (coś w rodzaju regresji logistycznej). Myślę, że wiele osób rozpoczynających studia symulacyjne (w tym ja) chce wrzucić wiele rzeczy na raz, ale może to być naprawdę zniechęcające i skomplikowane. Dlatego zalecałbym zacząć od czegoś prostego - na przykład zrobienia jednej lub dwóch funkcji do generowania danych - a następnie zbudować stamtąd.
Szczegółowe uwagi
Wygląda na to, że twoja podstawowa hipoteza brzmi: „Pora dnia pozwala przewidzieć, czy ktoś przyjmie leki”. I chcesz utworzyć dwa symulowane dwa zestawy danych: jeden, gdzie nie ma związku i jeden tam gdzie nie .
Wspominasz także o symulowaniu danych w celu reprezentowania wielu obserwacji tej samej osoby. Oznacza to, że każda osoba ma swoje własne prawdopodobieństwo przestrzegania, a także, być może, własne nachylenie zależności między porą dnia a prawdopodobieństwem przestrzegania. Sugerowałbym przyjrzenie się modelom regresji „wielopoziomowej” lub „hierarchicznej” dla tego rodzaju relacji, ale myślę, że można zacząć od czegoś prostszego.
Wspominasz także o ciągłym związku między czasem a prawdopodobieństwem zastosowania się do schematu leczenia, co sprawia, że myślę, że modelowanie szeregów czasowych - szczególnie patrząc na trendy sezonowe - byłoby dla ciebie pomocne. Można to również symulować, ale myślę, że możemy zacząć od prostszego.
Załóżmy, że mamy 1000 osób i mierzymy, czy przyjmowali lek tylko raz. Wiemy również, czy przydzielono je do przyjmowania rano, po południu czy wieczorem. Powiedzmy, że przyjmowanie leku wynosi 1, a nie przyjmowanie 0. Możemy symulować dane dychotomiczne, używając
rbinom
do rysowania z rozkładu dwumianowego. Każdą osobę możemy ustawić na 1 obserwację z danym prawdopodobieństwem. Powiedzmy, że ludzie mają 80% szans na przyjęcie rano, 50% po południu i 65% w nocy. Wklejam poniższy kod z kilkoma komentarzami po#
:To podsumowanie pokazuje częściowo:
Intercept
Reprezentuje popołudnie, i widzimy, że zarówno wieczorem i rano są znacznie wyższe prawdopodobieństwo przywierania. Istnieje wiele szczegółów na temat regresji logistycznej, których nie mogę wyjaśnić w tym poście, ale testy t zakładają, że masz zmienną zależną warunkowo normalnie dystrybuowaną. Modele regresji logistycznej są bardziej odpowiednie, gdy masz dychotomiczne wyniki (0 vs. 1) takie jak te. Większość książek o statystykach wprowadzających będzie mówić o t- teście, a wiele książek o wprowadzaniu do maszyn będzie mówić o regresji logistycznej. Myślę, że wprowadzenie do uczenia statystycznego: z aplikacjami w języku R jest świetne, a autorzy opublikowali wszystko online:https://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdfNie jestem pewien co do dobrych książek do badań symulacyjnych; Nauczyłem się po prostu grzebiąc, czytając to, co zrobili inni, i na studiach podyplomowych zacząłem obliczenia statystyczne (materiały profesora znajdują się tutaj: http://pj.freefaculty.org/guides/ ).
Na koniec możesz także przeprowadzić symulację bez efektu, ustawiając wszystkie czasy na takie samo prawdopodobieństwo:
Które zwraca:
Nie pokazuje to znaczących różnic między czasami, ponieważ można by oczekiwać, że prawdopodobieństwo będzie takie samo w czasie.
źródło
Jeśli znasz już jakiś Python, na pewno będziesz w stanie osiągnąć to, czego potrzebujesz, używając podstawowego Pythona wraz z
numpy
i / lubpandas
. Jak sugeruje Mark White, wiele rzeczy związanych z symulacjami i statystykami zapisano w R, więc na pewno warto je zobaczyć.Poniżej znajduje się podstawowa struktura, w jaki sposób możesz podejść do tego przy użyciu klasy Python. Możesz użyć
np.random.normal
do regulacjibaseline_adherence
każdego obiektu i wstawić trochę szumu. Zapewnia to pseudolosowe przywiązanie, do którego można dodać ukierunkowane zmniejszone przywiązanie w określone dni.źródło
To świetny projekt. Dla takich projektów jest wyzwanie, a twoja metoda wykorzystania danych symulowanych jest świetnym sposobem na ich ocenę.
Czy masz hipotezę a priori, np. „Ludzie bardziej zapominają wieczorem”? W takim przypadku przetestuje go test statystyczny porównujący częstotliwość zapominania wieczorem w porównaniu z porankiem. Jest to dystrybucja Bernoulliego, jak powiedzieli poprzedni respondenci.
Drugim podejściem jest przeszukiwanie danych w celu ustalenia, który przedział czasowy ma najwyższy wskaźnik awaryjności. Musi być jeden, więc pytanie brzmi: „czy to tylko przypadkowy wynik?”. W tym przypadku próg istotności jest wyższy. Jeśli chcesz o tym poczytać, wyszukaj „współczynnik fałszywych odkryć”.
W twoim przypadku system jest na tyle prosty, że można obliczyć próg przy odrobinie namysłu. Ale można również zastosować metodę ogólną: symuluj 1000 zestawów danych bez zmian prędkości, a następnie znajdź rozkład częstotliwości przypadkowych niskich liczb. Porównaj z nim swój prawdziwy zestaw danych. Jeśli 13.00 jest rzadkim przedziałem danych rzeczywistych, ale symulowane zestawy danych 50/1000 mają równie rzadkie przedziały, wynik nie jest solidny.
źródło