<jupyter_start><jupyter_text>*Реализуйте собственный генератор случайной выборки с плотностью* *p(x)*:$$p(x):=\frac{X_{[3,5]}(x)\cdot(3x)^2}{98}$$  **Отчёт**________________________________________________________________________________ В работе был реализован генератор случайной выборки методом преобразования Смирнова.Суть метода в модификации работы генератора равномерно распределенных чисел:Находится функция, обратная функции необходимого распределения, и в качестве аргумента передается в нее равномерно распределенная на отрезке (0, 1) случайная величина. На выходе получаем величину с требуемым распределением.Была сгенерирована выборка со значениями X[3,5] и расчитаны статистики для выборок размеров 10, 100, 1000. Минимальное значение для выборки размером 10 смещено и равно 3.736, размах выборки также не соответствует теоретическому значению 2 и равняется 1.2560, среднее равняется 4.4.Значение 75% квантиля при росте выборки изменяется незначительно. 25% квантиль, смещается влево при увеличении выборки. - 25% квантиль в выборке sample10 = 4.009635182311435 | 75% квантиль = 4.7869741639719035- 25% квантиль в выборке sample100 = 3.7620080884009646 | 75% квантиль = 4.697470191184781- 25% квантиль в выборке sample1000 = 3.7325132452604235 | 75% квантиль = 4.643364528638628Коэффициент асимметрии характеризует степень асимметрии кривой распределения относительно математического ожидания:- Коэффициент асимметрии выборки sample10 =:  -0.24576591104860204- Коэффициент асимметрии выборки sample100 =:  -0.42117691479622876- Коэффициент асимметрии выборки sample1000 =:  -0.34218330598195335В каждой из рассматриваемых выборок показатель отрицательный, что говорит о том, что правый хвост распределения тяжелее, чем левый, что подтверждают показатели математического ожидания или медианы и квантили. - Среднее значение в выборке sample10 =:  4.393016916325363- Среднее значение в выборке sample100 =:  4.177639162199011- Среднее значение в выборке sample1000 =:  4.1647372777926615Как мы видим, с увеличением выборки, математическое ожидание смещается влево, а также 25% квантиль и 75% квантиль. Соответственно правый хвост распределения увеличивается, что демонстрирует изменение коэффициентов ассиметрии. По статистикам видно выполнения закона больших чисел при росте размера выборки: минимальное, максимальное, среднее,размах, стремятся к своим теоретическим значениям.<jupyter_code>%matplotlib inline
import numpy as np
import copy
x = np.arange(0, 6, 0.1)

def px(x): #Плотность
    if isinstance(x, np.ndarray):
        return np.array([px(i) for i in x])
    
    if x >= 3 and x <= 5:
        return  3 * (x ** 2) / 98
    return 0



def fx(x): # Распределение 
    if isinstance(x, np.ndarray):
        return np.array([fx(i) for i in x])
    
    if x >= 3 and x <= 5:
        return (x ** 3) / 98 - 0.2755102040816326
    if x >= 5:
        return 1
    return 0


def Frev(y): # Обратная ф-я
    return ((y + 0.2755102040816326)  * 98) ** (1/3)
fx(4)
Frev(0.37755102040816324)
import matplotlib.pyplot as plt

plt.plot(x, px(x))
plt.figure()
plt.plot(x, fx(x))

from scipy import integrate
integrate.quad(px, 3, 5) # Интегральная сумма плотности равна 1
xs = np.linspace(1, 5, 50)
# генерация случайных чисел
from numpy.random import uniform # равномерное распределение

useq = uniform(0,1,10)
print(useq)
print('____________________________________________________________________')
print (Frev(useq)) # обратная

sample = lambda n: Frev(uniform(0,1,n))

sample10 = sample(10)
sample100 = sample(100)
sample1000 = sample(1000)

sample100
plt.hist(sample10, density=True)
plt.plot(xs, px(xs))
plt.hist(sample100, density=True)
plt.plot(xs, px(xs))
plt.hist(sample1000, density=True)
plt.plot(xs, px(xs))
import scipy.stats as stats

def statistics(sample):
  print('- Минимальное значение в выборке sample{0} =: '.format(len(sample)), np.min(sample))
  print('- Максимальное значение в выборке sample{0} =: '.format(len(sample)), np.max(sample))
  print('- Размах выборки sample{0} =: '.format(len(sample)), np.max(sample)-np.min(sample))
  print('- Среднее значение в выборке sample{0} =: '.format(len(sample)), np.mean(sample))
  print('- Дисперсия в выборке sample{0} =: '.format(len(sample)), np.var(sample))
  print('- Среднеквадратическое отклонение в выборке sample{0} =: '.format(len(sample)), np.std(sample))
  print('- Медиана в выборке sample{0} =: '.format(len(sample)), np.median(sample))
  print('- 25% квантиль в выборке sample{0} = {1}, 75% квантиль = {2}'.format(len(sample), np.quantile(sample, 0.25), np.quantile(sample, 0.75)))
  print('- Коэффициент вариации в выборке sample{0} =: '.format(len(sample)), np.std(sample)*100/np.mean(sample))
  print('- Коэффициент асимметрии выборки sample{0} =: '.format(len(sample)), stats.skew(sample))
  print('- Коэффициент эксцесса выборки sample{0} =: '.format(len(sample)), stats.kurtosis(sample))
statistics(sample10)
statistics(sample100)
statistics(sample1000)<jupyter_output>- Минимальное значение в выборке sample1000 =:  3.0062255124189243
- Максимальное значение в выборке sample1000 =:  4.999831151253202
- Размах выборки sample1000 =:  1.993605638834278
- Среднее значение в выборке sample1000 =:  4.16297133674587
- Дисперсия в выборке sample1000 =:  0.3104124233525606
- Среднеквадратическое отклонение в выборке sample1000 =:  0.5571466802849682
- Медиана в выборке sample1000 =:  4.244339931722752
- 25% квантиль в выборке sample1000 = 3.7301119717420765, 75% квантиль = 4.646404048450617
- Коэффициент вариации в выборке sample1000 =:  13.383389776603195
- Коэффициент асимметрии выборки sample1000 =:  -0.34509693006675135
- Коэффициент эксцесса выборки sample1000 =:  -1.0426686558051292
{'fraction_non_alphanumeric': 0.10658472344161546, 'fraction_numerical': 0.1199297629499561, 'mean_word_length': 5.364245810055866, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '548999', 'license': 'MIT', 'n_tokens_mistral': 2656, 'n_tokens_neox': 2568, 'n_words': 547, 'path': 'finmath/Smirnov_sample_generator.ipynb', 'repo_name': 'SimonGreenstain/My_works', 'size': '5695'}