Как найти моду в r studio

Обновлено: 05.07.2024

Эта статья объяснит несколько методов, как найти моду вектора в R.

Использование пользовательской функции для поиска режима вектора R

Режим - одно из самых основных статистических понятий, обозначающее максимальное значение встречаемости в наборе значений. В результате это можно наблюдать в разных типах данных, таких как числовые или символьные. В языке R нет встроенной функции для вычисления режима, но мы можем реализовать ее с помощью функций: unique , which.max , tabulate и match . Мы определяем функцию с именем FindMode , которая принимает один аргумент, обозначенный как x . Сначала unique функция вызывается по x и сохраняется в отдельном объекте. unique извлекает из набора неповторяющиеся значения. В качестве первого аргумента он может принимать векторный объект, фрейм данных или массив.

Затем у нас есть несколько связанных функций, начинающихся с match , которые принимают два вектора и возвращают из них вектор совпадений позиций. Функция tabulatee подсчитывает и возвращает количество раз, когда каждое целое число встречается в векторе. Обратите внимание, что возвращаемый вектор содержит счетчик для каждого целого числа, которое меньше или равно максимальному целому числу в векторе аргументов. Наконец, функция which.max находит индекс максимального элемента в целочисленном векторе. Мы можем вызвать функцию FindMode для каждого столбца фрейма данных, используя функцию apply . В этом случае мы объявляем простой целочисленный вектор, который хранится как фрейм данных, а затем передается в функцию apply для вычисления среднего значения.

В качестве альтернативы, мы можем вызвать функцию FindMode непосредственно во фрейме данных. Следующий пример кода демонстрирует использование набора данных cars , включенного в пакет datasets .

Используйте map_dbl , чтобы применить функцию FindMode к каждому столбцу фрейма данных в R

Еще одна полезная функция для нахождения среднего значения для каждого столбца данного фрейма данных - map_dbl , которая является частью пакета purrr , включенного в tidyverse . Обратите внимание, что эти методы нельзя вызывать для векторных объектов.

Сегодня обсудим интересную базу данных – базу с экспериментальными данными по шоколадным тортикам (к политологии вернемся на семинаре).

Загрузим базу данных по ссылке:

Посмотрим на нее:

Для вывода описательных статистик в R есть специальная функция summary() :

Для количественных переменных эта функция выдает минимальное и максимальное значение, среднее арифметическое, медиану, нижний (1st Qu.) и верхний (3rd Qu.) квартиль. Нижний квартиль – значение, которое 25% значений в выборке не превышают, а верхний квартиль – значение, которое 75% значений в выборке не превышают. Для качественных переменных (текстовые, факторные), R будет выводить количество значений по каждой группе (уровню).

В данном случае по выдаче R мы можем определить следующее. Всего в базе данных у нас 270 наблюдений (переменная X здесь служит id наблюдений, а ее максимальное значение 270), значит, в рамках исследования было приготовлено 270 шоколадных тортов. Минимальная температура, при которой выпекали торты, равна 175 градусам, максимальная - 225. Средняя температура, при которой выпекали торты, равна 200. Медианное значение температуры в данном случае совпадает со средним значением – в половине случаев температура при выпечке не превышала 200 градусов. Нижний квартиль равен 185 градусам – в 25% случаев торты выпекались при температуре не выше 185 градусов, верхний квартиль равен 215 – 75% случаев температура не превышала 215 градусов (или в 25% случаев превышала!).

Необязательно выводить описательные статистики для всех переменных в базе данных, можно вывести описание одной переменной:

Или проделать то же самое для нескольких переменных:

Точно так же необязательно выводить все статистики сразу. Можно запрашивать по отдельности:

В данном случае все показатели считаются без проблем, потому что в базе данных все строки полностью заполнены. В прошлый раз было хуже – вместо среднего значения R выдавал NA , так как в переменной были пропущенные значения. Напомню, чтобы решить эту проблему, мы прописывали дополнительный аргумент na.rm = TRUE , который говорил R не учитывать пропущенные значения при расчете статистик (из самой базы значения при этом не выкидываются!).

Это не единственные описательные статистики, которые можно вывести. Часто нас интересует не только среднее (или медианное) значение, а разброс значений относительно этого среднего. Для этого можем посчитать выборочную дисперсию или стандартное отклонение.

Но сами по себе эти значения не очень информативны – по ним сложно понять, насколько однородны наши данные (сильно ли они разбросаны относительно среднего значения). Для того, чтобы оценить степень однородности наших данных, нашей выборки, можно воспользоваться таким показателем как коэффициент вариации. Коэффициент вариации считается несложно: стандартное отклонение нужно поделить на среднее значение. Обычно значение коэффициента вариации, взятое по модулю, лежит в пределах от 0 до 1, но иногда, если данные очень разнородны (стандартное отклонение большое), оно может быть больше 1.

Вопрос: а когда коэффициент вариации нужно использовать с осторожностью?

Часто коэффициент вариации выражают в процентах. Давайте напишем код, который будет считать коэффициент вариации в процентах для переменной angle . Ваш ход код, маэстро!

Конечно, перечисленными примерами не ограничивается описание количественных данных. Есть еще процентили, децили и прочее… Чтобы не запутаться, обсуждать их не будем, почитать про их вычисление в R и интерпретацию можно, например, здесь.

Пока мы обсудили только описательные статистики для количественных переменных. А как быть с качественными? Какую информацию по ним можно получить? Число наблюдений, соответствующих каждому значению (классу):

В прошлый раз мы говорили о том, что для показателей, измеренных в качественной шкале, вычислять среднее или медиану бессмысленно, нужно смотреть на моду. Искать специальную функцию не нужно, достаточно помнить, что мода – это значение, которое встречается в выборке чаще всего (да, мода может быть не одна).

Кстати, для количественных переменных функция table() тоже хорошо работает:

Прежде чем перейти к более красивым вещам, предлагаю выполнить маленькое задание.

Задание

  1. При наклоне на какой угол, в среднем, шоколадный торт начинает ломаться?
  2. Найдите коэффициент вариации (в процентах) для переменной temperature . Однородны ли значения температуры, при которой выпекали торты?
  3. Найдите моду показателя recipe .
  4. Найдите первый, второй и третий децили для показателя temperature . Проинтерпретируйте.

Решение

Описательные статистики с dplyr

Обратимся к библиотеке:

Выведем стандартную таблицу, которую часто можно увидеть в исследованиях в разделе, посвященном описанию данных. В этой таблице будет указано число наблюдений, среднее значение и стандартное отклонение.

Добавим в таблицу коэффициент вариации:

Не очень важная, но полезная деталь: в качестве названий можно использовать и “сложные названия” – включающие скобки и прочие символы. Но тогда название столбца нужно вводить в кавычках:

Можем вывести описательные статистики для групп наблюдений. Сгруппируем наблюдения по рецепту, по которому готовился торт.

Выгрузка результатов

R позволяет выгружать не только таблицы с результатами регрессии, но и почти любые таблицы, например, таблицу с описательными статистиками. Единственная проблема: просто так в Word выгрузить ничего не получится, R дружелюбен только по отношению к LaTeX :) Но эту проблему можно решить.

Для начала загрузим библиотеку stargazer . Она используется для выгрузки таблиц “во внешний мир”.

Для того, чтобы вывести таблицу с описательными статистиками, нужно просто набрать stargazer() и указать базу данных:

Для тех, кто умеет работать в LaTeX, все просто – R выдал теховский код, который можно просто скопировать в tex-файл. Обратите внимание: в начале кода в качестве комментария всегда указывается, есть ли необходимость догружать (указывать в преамбуле) специальные пакеты или нет. В данном случае не нужно.

Тем, кто в LaTeX не работает, легче не стало. Но выход есть. Целых два.

Выход 1. Stargazer умеет не только выводить код в консоль, но и сохранять результат в отдельный файл. Этот файл может быть теховским файлом ( .tex ), текстовым ( .txt ) и html-файлом ( .html или .htm ). Word умеет открывать файлы с расширением .htm . И Libre Office тоже.

Даже если редактор документов не хочет открывать файл или делает это странно, не нужно расстраиваться. Html-файлы, как и страницы в Интернете, можно просто окрыть в браузере. И нужную таблицу отскринить.

Выход 2. Воспользоваться онлайн-редактором для LaTeX, скопировать в него код из консоли и скомпилировать симпатичный pdf-файл. Можно зарегистрироваться на сайте ShareLatex, это бесплатно. Затем зайти и нажать Создать проектНовый проект. Когда мы дадим имя проекту, откроется поле для работы. В левой части – код, в правой части – pdf-файл. Нужно добавить в преамбулу (часть перед \begin) строку \usepackage[english, russian] , чтобы в документе нормально отображалась кириллица. Затем мы можем убрать строку для заголовка ( \maketitle ) и раздела ( \section ) и вставить туда код из консоли:

Теперь для простоты вернемся к html-файлам и будем приводить таблицу в порядок. Для начала дадим ей заголовок.

Войти через uID

Minitab

Серия материалов “Базовые операции в R” призвана для того, чтобы ближе познакомить читателя с программной средой R и закрыть белые пятна между статьями, вышедшими в свет ранее на нашем сайте. Мы также рекомендуем читателю ознакомиться с публикацией Статистика с большой буквы или R, чтобы узнать об истории развития этого языка и общих принципах работы с ним.

Работая с примерами этого цикла публикаций, Вы сможете самостоятельно, начиная с азов, освоить R и постепенно научиться выполнять вычисления простой и средней сложности. Кроме того, изучив все материалы этой серии, для Вас не составит труда применить и более сложные методики анализа, описанные на нашем сайте. Мы также рекомендуем настоящий цикл материалов как отправную точку для участников наших on-line курсов шести сигм, отдавшим предпочтение R в качестве среды анализа в своих проектах.

Итак, в первой статье мы познакомимся со способами расчета некоторых показателей, объединенных под общим понятием описательных или базовых статистик. Сюда принято относить среднее значение (среднее арифметическое, медиана, мода), минимальное и максимальное значения, разброс, вариацию и стандартное отклонение, квартили и процентили…

Чтобы сохранить эти значения введите еще одну команду:

Теперь сгенерированный набор значений находится в папке Мои документы в файле data.csv. Его можно в любой момент вызвать, введя команду:

> read.csv(file="data.csv", header=TRUE, sep=",", dec=".")

или присвоить значения какой-либо переменной:

Теперь рассчитаем среднее арифметическое значение:

В R вы всегда можете задать алгоритм расчета, если не уверены или не знаете какой командой его осуществить. Так, к примеру, среднее арифметическое значение представляет собой сумму всех значений, разделенных на их количество. Таким образом, среднее арифметическое можно рассчитать с помощью команды:

Чтобы рассчитать медиану введите команду:

А вот для моды стандартной команды в R не предусмотрено, поэтому используйте следующее выражение:

Минимальное и максимальное значения можно рассчитать, используя следующие команды, соответственно:

Стандартная команда range, отражает диапазон значений в формате “от-до” (от минимального значения до максимального):

> range(x)
[1] 39.44106 65.11346

Для того, чтобы действительно рассчитать разброс, необходимо ввести следующую команду:

С помощью следующего выражения можно рассчитать вариацию значений:

Квадратный корень этого значения покажет стандартное (среднеквадратическое) отклонение:

Последний показатель можно также рассчитать с помощью специальной функции расчета стандартного отклонения:

Чтобы рассчитать квартили введите команду:

> quantile(x)
0% 25% 50% 75% 100%
39.44106 47.04634 50.56743 52.57987 65.11346

Полученные результаты показывают минимальное значение, первый, второй, третий и четвертый квартили.

Чтобы рассчитать какой-либо процентиль (квантиль), воспользуйтесь командой:

В аргументе вектора “c” следует указать соответствующие доли от единицы. Например, чтобы рассчитать 30, 60 и 90% квантили введите команду:

> quantile(x, c(.30, .60, .90))
30% 60% 90%
48.52572 51.30114 56.32634

Существую также команды для вызова стандартного набора описательных статистик. Например:

> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
39.44 47.05 50.57 50.33 52.58 65.11

> fivenum(x)
[1] 39.44106 47.02794 50.56743 52.61602 65.11346

С помощью последней команды получают минимальное значение, первый квартиль, медиану, третий квартиль и максимальное значение.

Все эти команды являются базовыми – встроенными в R. Кроме стандартных команд, существует немало различных пакетов, которые позволяют, как автоматизировать процесс расчёта, так и применить некоторые другие алгоритмы расчета статистических величин.

UPD 05.03.2012: Базовые операции в R. Часть 2

Продолжая серию публикаций, посвященных простейшим примерам работы в среде R, мы попробуем отразить некоторые из базовых статистик в графическом виде. Таким образом, в этой статье мы разберем основы построения диаграмм в R. В качестве результатов наблюдений будут использованы данные из предыдущей статьи. Вызовите их и присвойте какой-либо переменной.

Чтобы отразить наблюдения в графическом виде используйте команду:


Конечно же, в таком виде наблюдения мало о чем могут сказать. Гораздо информативнее изображение в виде гистограммы:


или ящичной диаграммы:


Теперь рассмотрим способы представления данных в виде категорий с помощью круговых и столбчатых диаграмм. Для этого создадим новый набор значений, соответствующий составу атмосферы:

> data names(data) barplot(data)



Теперь разберем основные способы настройки диаграмм и попробуем применить их:

  • main – заголовок диаграммы
  • sub – подзаголовок (футер) диаграммы
  • ylab – подпись оси ординат
  • xlab – подпись оси абсцисс

> barplot(data, ylab="%", xlab="Атмосферные газы", main="Состав атмосферы", sub="SixSigmaOnline.ru")


С помощью команды “col”, можно разрисовать диаграмму в любой цвет:

> color=c("red", "blue", "yellow")
> barplot(data, col=color, main="Состав атмосферы", sub="SixSigmaOnline.ru")

> pie(data, col=color, main="Состав атмосферы", sub="SixSigmaOnline.ru")


Конечно, это далеко не все команды, которые можно применить для настройки диаграмм, тем не менее, оперируя ими Вы сможете построить достаточно информативную и наглядную диаграмму.

UPD 02.04.2012: Базовые операции в R. Часть 3

В настоящей публикации мы рассмотрим некоторые способы представления числовых рядов в виде простейших графиков, продолжим рассматривать способы настройки диаграмм в R, а также способы изучения взаимосвязи между двумя факторами – корреляцию. В качестве набора наблюдения я использую ряды данных, присвоенные переменным. Каждый ряд представляет координаты отдельных точек: координаты абсцисс присвоены переменной x, а ординат – y.

С помощью следующей команды мы представим результаты наблюдений в виде точек на плоскости декартовых координат:


Обратите внимание на положение переменных в аргументе функции – оно соответствует зависимой (y) и независимой (x) переменной. Если поменять их местами, то диаграмма примет несколько иной вид:


Попробуем видоизменить способ изображения наблюдений с помощью аргумента “type”. Значение аргумента может принимать одно из следующих значений:

  • "p" для точек (значение по умолчанию)
  • "l" для линий
  • "b" для точек и линий (раздельно)
  • "o" для точек и линий
  • "c" для пунктирных линий
  • "h" для вертикальных линий (разновидность гистограмм)

Используем соединительные линии:


Разумеется, в таком виде диаграмма становиться не только менее информативной, но и прячет всякую связь между переменными. Используем следующую команду, чтобы графически изобразить корреляционную зависимость между переменными:


Функция abline() позволяет добавить на любой график прямую линию. В настоящем примере, мы записали в ее аргументе функцию lm(), указав, таким образом, что прямая линия должна отражать линейную зависимость переменных x и y.

Применив следующую команду, можно нанести линию, рассчитанную при помощи взвешенной локальной регрессии для каждого сглаживаемого значения данных – линию сглаживания:


Оба представленных метода помогают графически представить и оценить взаимосвязь между переменными, однако не дают возможности судить о силе этой взаимосвязи. Числовую оценку взаимосвязи – корреляцию, можно рассчитать с помощью функции:

В аргументе команды следует указать метод расчета корреляции – method и способ выбора наблюдений – use:

> cor(x,y, use="complete.obs", method="spearman")
[1] 0.7316308

Таким образом, используя один из методов визуализации взаимосвязи между переменными и расчета корреляционной зависимости, результаты анализа можно представить одной иллюстрацией:

> cor(x,y, method="pearson")
[1] 0.7432663
> plot(x, y, main="x-y correlation", sub="pearson correlation = 0.7432663")
> abline(lm(y


UPD 09.04.2012: Базовые операции в R. Часть 4

Одной из важнейших задач первичного анализа данных является изучение закона распределения наблюдаемой величины. В зависимости от поставленных задач, исследователь может прибегнуть к визуальной оценке распределения, изучению выбросов, хвостов или аномалий, проверке согласия распределения с определенным законом (например, нормальным) и т.д.

Для визуальной оценки распределения чаще всего используют гистограммы. Создадим набор значений, подчиняющихся нормальному закону распределения, и построим простейшую гистограмму:


Реже используют ящичные диаграммы:


Альтернативный способ визуализации распределения величины – график плотности вероятности:


С помощью следующей команды на гистограмму можно нанести кривую нормального распределения:

> hist(x)
> xfit yfit lines(xfit, yfit)


Унимодальные распределения, неподверженные асимметрии (в том числе и нормальное), обладают той особенностью, что среднее арифметическое, медиана и мода близки (идеальный вариант – все значения равны между собой). Рассчитав указанные статистики:

> mean(x)
[1] -0.0214007
> median(x)
[1] 0.09739521
> density(x)$x[which.max(density(x)$y)]
[1] 0.2171224,-

можно нанести их на график плотности вероятности или гистограмму. Например:

>hist(x)
>abline(v=mean(x), col="red")
>abline(v=median(x), col="yellow")
>abline(v= density(x)$x[which.max(density(x)$y)], col="green")


Наличие асимметрии можно диагностировать по порядку расположения выбранных статистик:

  • при левосторонней асимметрии – среднее арифметическое – медиана – мода;
  • при правосторонней асимметрии – мода – медиана – среднее арифметическое.

Если значения выстраиваются в какой-либо другой последовательности, возможно, распределение переменной би- или полимодальное.

Для анализа асимметрии по величине скоса (Skewness) необходимо предварительно установить пакет “moments”. С помощью этого пакета мы также сможем проверить эксцесс (Kurtosis) – “остроту пика” распределения. Алгоритм анализа выглядит следующим образом:

> install.packages("moments")
> library("moments")
> skewness(x)
[1] -0.3032459
> kurtosis(x)
[1] 3.188327

Отрицательный показатель скоса (Skewness) свидетельствует о незначительной левосторонней асимметрии, а положительный эксцесс (Kurtosis) – о более островершинной форме кривой функции вероятности распределения. Следует учесть, что равенство средних значений (среднего арифметического, медианы и моды) и отсутствие асимметрии еще не доказывают подчинение распределения величины нормальному закону. Логистическое распределение и распределение Лапласа также удовлетворяют этим условиям. Однако показатель эксцесса для этих распределений будет выше 0 – значения эксцесса нормального распределения.

Если в целях последующего исследования достаточно проверить, с какой вероятностью распределение наблюдаемой величины можно описать нормальным законом, то после визуальной оценки гистограммы следует провести тест гипотезы. С механизмом проверки согласия закона распределения с нормальным читатель может ознакомиться в статье Проверка гипотез о нормальности распределения.


Каждая модель описана по 11 признакам, два из которых ( vs и am ) являются номинальными переменными (факторами) c уровнями, закодированными в виде 0 и 1 (подробнее см. ?mtcars ).

Для расчета арифметической средней, медианы, дисперсии, стандартного отклонения, а также минимального и максимального значений в R служат функции mean() , median() , var() , sd() , min() и max() соответственно. Используем эти функции в отношении, например, параметра mpg (пробег автомобиля (в милях) в расчете на один галлон топлива):


Специальной функции для расчета стандартной ошибки средней в R нет, однако для этого вполне подойдут уже имеющиеся функции. Как известно, стандартная ошибка средней рассчитывается как отношение стандартного отклонения к квадратному корню из объема выборки:
\[S_> = \frac>\]

На языке R мы можем записать это следующим образом:

Квантили рассчитываются в R при помощи функции quantile() :

При настройках, заданных по умолчанию, выполнение указанной команды приведет к расчету минимального (10.4) и максимального (33.9) значений, а также трех квартилей, т.е. значений, которые делят совокупность на четыре равные части - 15.4, 19.2 и 22.8. Разница между первым и третим квартилями носит название интерквартильный размах (ИКР; англ. interquartile range). ИКР является робастным аналогом дисперсии и может быть рассчитан в R при помощи функции IQR() :

Функция quantile() позволяет рассчитать и другие квантили. Например, децили (т.е. значения, делящие совокупность на десять частей) можно получить следующим образом:

В приведенной команде важен аргумент p (от probability - вероятность), при помощи которого был задан вектор чисел от 0 до 1 с шагом 0.1.

Обратите внимание на то, что существует несколько способов оценки квантилей по выборочным данным. Подробнее об этом можно узнать в справочном файле по функции quantile() (доступен по команде ?quantile ).

Отсутствующие значения в данных могут несколько усложнить вычисления. В качестве демонстрации заменим 3-е значение переменной mpg на NA (от not available - не доступно) - обозначение, используемое в R для отсутствующих наблюдений, - а затем попытаемся вычислить среднее значение:

Ничего не вышло - вместо среднего значения программа выдала NA , что вполне логично. R не будет пропускать отсутствующие значения автоматически, если мы не включим соответствующую опцию - na.rm (от not available и remove - удалить):

Рассмотренный прием срабатывает в большинстве случаев. Одним из немногих исключений является функция length() , используемая для определения размера вектора. Аргумент na.rm у этой функции отсутствует, так что подсчитаны будут и имеющиеся, и отсутствующие значения:

Если все же стоит задача подсчитать количество неотсутствующих значений, то можно воспользоваться следующим приемом:

Ключом здесь является использование команды is.na(mtcars$mpg) , которая проверяет каждое значение mpg и возвращает FALSE , если это значение не равно NA , и TRUE иначе. В сочетании с логическим оператором ! ("не"), команда sum далее подсчитывает только те значения mpg , которые не равны NA (логические TRUE здесь конвертируются в 1, которые можно суммировать).

Существуют еще две функции, которые могут оказаться полезными при анализе свойств совокупностей - which.min() и which.max() . Как следует из названий, эти функции позволяют выяснить порядковые номера элементов, обладающих минимальным и максимальным значениями соответственно. Если минимальное/максимальное значение принимают несколько элементов в векторе, то будет возвращен порядковый номер первого элемента с этим значением. В случае с mpg имеем:

Видим, что минимальный и максимальный пробег в расчете на галлон топлива имеют модели под номерами 15 и 20 соответственно. Выяснить названия этих моделей мы можем, совместив команды which.min() и which.max() с командой rownames() (от row - строка, и names - имена):

Подробнее о приемах индексирования векторов в R см. здесь.

Использование функции summary()

В системе R имеется возможность и более быстрого расчета основных параметров описательной статистики. Для этого, в частности, служит функция общего назначения summary() : Всего одной строки кода оказалось достаточно для получения минимального ( Min ) и максимального ( Max ) значений переменной mpg , медианы ( Median ), арифметической средней ( Mean ), первого ( 1st Qu. ) и третьего ( 3rd Qu. ) квартилей, а также для выяснения количества отсутствующих значений ( NA's ). Более того, подобную сводку мы можем получить сразу для всей таблицы данных: Результат выглядел бы замечательно, если бы не одно "но". Переменные vs и am являются факторами, но уровни их закодированы при помощи чисел 0 и 1. К сожалению, система R не распознала эти две переменные как факторы и рассчитала соответствующие параметры описательной статистики, как для обычных числовых переменных. Однако мы можем изменить такое поведение R, самостоятельно преобразовав vs и am в факторы при помощи функции as.factor() : Теперь результат действия функции summary() в отношении таблицы mtcars будет выглядеть так: Обратите внимание на сводки по vs и am : поскольку эти переменные теперь распознаны программой как факторы, единственный способ описать их - это подсчитать количество наблюдений для каждого уровня.

Использование функции tapply()

Функция tapply() принадлежит к важному " apply -семейству" R-функций. Эти функции позволяют выполнять математические вычисления над определенными элементами таблиц данных, матриц, или массивов (например, быстро вычислять среднее значение для каждого столбца или строки таблицы, и т.п.). Предположим, мы хотим выяснить средний объем двигателя (переменная disp , в кубических дюймах) у моделей с автоматической и ручной коробкой передач (переменная am ; 1 - ручная коробка, 0 - автоматическая коробка). Функция tapply() позволяет сделать это следующим образом:
  • Х - числовой вектор
  • INDEX - список факторов, для уровней которых рассчитываются значения функции FUN
  • FUN - любая, в том числе пользовательская, функция

Аргумент FUN , как уже было отмечено, может принимать любые, в том числе и пользовательские функции. Рассмотрим, например, расчет стандартных ошибок для средних значений объема двигателя у автомобилей с автоматической и ручной коробкой передач. Для начала создадим функцию SE для расчета стандартных ошибок (см. пример выше):

Читайте также: