Symulacja danych liczbowych zgodnie z założeniami rozkładu

Wygenerujemy dane dla każdej kolumny oddzielnie, a następnie odtworzymy z nimi ramkę danych. Chcemy najpierw zacząć od łatwych części, więc przyjrzymy się symulacji dla QUANTITY, COST, PRICE i DISCOUNT . Najłatwiejszym sposobem byłoby po prostu zasymulować niektóre liczby losowe i upewnić się, że mieszczą się one w pewnym zakresie, odpowiednio je pomnóż lub podziel. Moglibyśmy również użyć funkcji round(), aby upewnić się, że QUANTITY nie jest ułamkową. Jeśli jednak chcemy zrobić to we właściwy sposób, musimy wziąć pod uwagę podstawowe założenia każdej z tych liczb. Obraz przedstawiający dystrybucje wymienione w poniższych akapitach pokazano poniżej.

Wartości COST i PRICE mają rozkład normalny, ponieważ są liczbami rzeczywistymi. Średnio COST powinno być mniejsze niż PRICE, więc odpowiednio ustawimy ich parametry średnie. Należy pamiętać, że pozwala to na możliwość sprzedaży niektórych produktów żywnościowych za mniej niż koszt ich produkcji, co czasami ma miejsce, gdy firmy próbują zminimalizować straty. DISCOUNT podąża za rozkładem wykładniczym, ponieważ chcemy, aby było jak najwięcej rabatów zero lub niski (w porównaniu do ceny). Oznacza to, że nie udzielamy często rabatów, a kiedy to robimy, będą one niewielkie. QUANTITY jest zgodny z rozkładem Poissona, ponieważ musi być liczbą całkowitą.

Biorąc pod uwagę te założenia, stworzymy trzy funkcje. COST i PRICE są symulowane funkcją random-values(), podczas gdy QUANTITY i DISCOUNT mają własne funkcje. Funkcja random_value używa funkcji rnorm() do symulacji n wartości (gdzie n to liczba wierszy, które chcemy uzyskać w ramce danych) przy użyciu rozkładu normalnego , z określonym mean i odchyleniem standardowym (sqrt(variance)). Następnie bierzemy te wartości i zaokrąglamy je do dwóch miejsc po przecinku za pomocą funkcji round(), jak pokazano poniżej:

random_values <- function(n, mean, variance) {

return(round(rnorm(n,mean, sqrt(variance)), 2))

}

Funkcja random_discounts() wykorzystuje funkcję rexp() do symulacji n wartości przy użyciu rozkładu wykładniczego z parametrem lambda i, jako robiliśmy to wcześniej, używamy funkcji round() do zaokrąglania wartości do dwóch miejsc po przecinku. Kiedy używamy tej funkcji, użyjemy bardzo wysokiego parametru lambda (100), aby mocno pochylić rozkład w prawo, tak aby uzyskać wiele zer w symulacji. Jednak to sprawi, że nasze wartości będą bardzo małe (na przykład 0,021). Jeśli użyjemy tych wartości bezpośrednio, nasze rabaty będą wynosić kilka centów, co nie jest realistyczne. Dlatego mnożymy te wartości przez 100, aby uzyskać rabaty w wysokości kilku dolarów. Zauważ, że jeśli najpierw zrobimy rundę, a następnie pomnożymy przez 100, otrzymamy pełne rabaty w dolarach (na przykład 2 dolary), ale jeśli najpierw pomnożymy przez 100, a następnie zaokrąglimy, otrzymamy rabaty obejmujące centy (na przykład 2,1 dolara), czego wolimy unikać, ale równie dobrze działałoby. Spójrzmy na poniższy kod, aby to zrozumieć:

random_discounts <- function(n,lambdA) {

return(round(rexp(n,lambda) , 2 * 100)

}

Funkcja random_quantities() wykorzystuje funkcję rpois() do symulacji n wartości przy użyciu rozkładu Poissona z parametrem lambda. W tym przypadku nie musimy zaokrąglać, ponieważ wartości będą już liczbami całkowitymi. Jednak dodajemy 1 do każdej wartości, ponieważ możemy otrzymać zero jako ilość, a posiadanie zamówienia bez żywności nie miałoby sensu. Dodając 1 gwarantujemy, że w każdym zamówieniu mamy co najmniej jedną żywność:

random_quantities <- function(n,lambda) {

return(rpois(n, lambda) + 1)

}