Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Функция распределения арксинус-распределения.
- F1 = function(x)
- {
- if (abs(x) <= 3)
- { return (1/2 + asin(x/3)/pi); }
- else if (x > 3)
- { return (1); }
- else
- { return (0); }
- }
- # Функция находит с заданной точностью Err
- # значение x: f(x) = alpha.
- # Используется для f - непрерывного распределения С.В.
- # (Нужна, чтобы по преобразованию Смирнова сделать выборку из арксинус-распределения)
- SolveF = function(alpha, Err = 0.0001, f = F1)
- {
- # С.В распределена на (-3, 3)
- a = -3;
- b = 3;
- # значение ошибки в данный момент времени
- err = 1000;
- # Пока ошибка больше допустимой, выбираем новые границы, пользуясь строгой монотонностью.
- while(err > Err)
- {
- m = (a + b) / 2;
- if(f(m) >= alpha)
- { b = m; }
- else
- { a = m; }
- # Новое значение функции -- середина новой границы.
- err = abs(f((a + b) / 2) - alpha);
- }
- return ((a + b) / 2);
- }
- # Преобразованием Смирнова сделаем выборку из N элементов арксинус-распределения
- rasin = function(N, f = F1)
- {
- preob = c(1:N)
- for(i in 1:N) {preob[i] = SolveF(runif(1))}
- return (preob)
- }
- # Теперь можем получить итоговую выборку из нашей смеси
- rsmes = function(N)
- {
- return ( 0.6*rnorm(N, mean = 0, sd = 3) + 0.4*rasin(N) )
- }
- # Рисует графики
- Graphics = function(A)
- {
- #Эмпирическая функция распределения
- plot(sort(A), ((1:length(A))/length(A)), type="l", col="seagreen", xlab="", ylab="");
- x = seq(-25, 25, by = 0.001);
- y = 0.6*pnorm(x, mean = 0, sd = 3) + 0.4*sapply(x, F1);
- lines(x, y, type="l", col="orange");
- }
- # Дисперсия
- Disp = function(A)
- {
- X = mean(A);
- return ( mean((A - X)^2) )
- }
- # Выборочный центральный момент к-того порядка
- M = function(A, k)
- {
- X = mean(A);
- return ( mean((A - X)^k) );
- }
- # Ищет доверительный интервал.
- # alpha -- доверительная вероятность
- Assymp = function(A, alpha)
- {
- zp = qnorm(1 - alpha/2);
- S = sqrt(Disp(A));
- X = mean(A);
- N = length(A);
- #Границы Матожидания
- GM = c("МО",X - zp*(S/sqrt(N)), X + zp*(S/sqrt(N)));
- #Границы дисперсии
- GD = c("Дисперсия", S^2 - zp*sqrt(M(A, 4) - (M(A, 2))^2)/sqrt(N), S^2 + zp*sqrt(M(A, 4) - (M(A, 2))^2)/sqrt(N))
- print(GM);
- print(GD);
- }
- # N -- Объем выборки
- Main = function(N)
- {
- # print("Моя выборка (упорядоченная):");
- A = sort(rsmes(N));
- # print(A);
- print("Мат.ожидание смеси: 0");
- print("Выборочное среднее выборки:")
- meanA = mean(A);
- print(meanA);
- print("Дисперсия: 7.2");
- print("Выборочная дисперсия:")
- sdA = Disp(A);
- print(sdA);
- Graphics(A);
- print("доверительня вероятность 0.9");
- Assymp(A, 0.1);
- print("доверительня вероятность 0.95");
- Assymp(A, 0.05);
- print("доверительня вероятность 0.9974");
- Assymp(A, 1-0.9974);
- }
Advertisement
Add Comment
Please, Sign In to add comment