Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт на практику.docx
Скачиваний:
10
Добавлен:
08.10.2015
Размер:
98.03 Кб
Скачать

Зміст

1.Написание собственных функций 3

1.1.Простые примеры 3

1.2.Определение новых бинарных операторов 5

1.3.Именованные параметры и умолчания 5

1.4.Параметр ‘...’ 6

1.5.Присвоения в пределах функций 7

1.6.Более сложные примеры 7

1.6.1.Фактор эффективности при проектировании блоков 8

1.6.2.Отбрасывание всех имен при печатании массива 9

1.6.3.Рекурсивное числовое интегрирование 10

1.7.Область действия 11

1.8.Настройка окружения 14

1.9.Классы, универсальные функции и объектно-ориентированное программирование 15

2.Статистические модели в r 18

2.1.Определение статистических моделей; формулы 18

Примеры 19

2.1.1.Противопоставления 22

2.2.Линейные модели 23

2.3.Универсальные функции для извлечения информации о модели 24

2.4.Дисперсионный анализ и сравнение модели 26

2.4.1.Таблицы ANOVA 27

2.5.Обновление подогнанных моделей 27

2.6.Обобщенные линейные модели 28

2.6.1.Семейства 30

2.6.2.Функция glm() 31

2.7.Нелинейные наименьшие квадраты и модели наибольшего правдоподобия 35

2.7.1.Наименьшие квадраты 36

2.7.2.Метод максимального правдоподобия 38

2.8.Некоторые нестандартные модели 39

3.Список використаної літератури 41

  1. Написание собственных функций

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

Нужно подчеркнуть, что большинство функций, предоставленных как часть системы R, таких как mean(), var(), postscript() и так далее, сами написаны на R и, таким образом, существенно не отличается от написанных пользователем функций. Функция определена присвоением вида:

> name <- function(arg_1, arg_2, ...) expression

expression это выражение R, (обычное групповое выражение), которое использует параметры arg_i для вычисления значения. Значение выражения – это значение, возвращаемое функцией.

Обычно в этом случае вызов функции затем обычно берет имя формулы name(expr_1, expr_2...) и может выполняться везде, где допустим вызов функции.

    1. Простые примеры

Как первый пример, рассмотрим функцию, вычисляющую t-статистики двух выборок с показом “всех шагов”. Это - искусственный пример, конечно, так как есть другие, более простые способы достижения той же самой цели. Функция определена следующим образом:

> twosam <- function(y1, y2) { n1 <- length(y1); n2 <- length(y2) yb1 <- mean(y1); yb2 <- mean(y2) s1 <- var(y1); s2 <- var(y2) s <- ((n1-1)*s1 + (n2-1)*s2)/(n1+n2-2)

tst <- (yb1 - yb2)/sqrt(s*(1/n1 + 1/n2)) tst }

С этой определенной функцией, можно выполнить t-тест для двух выборок, используя такой вызов:

> tstat <-twosam (data$male, data$female); tstat

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

Таким образом, учитывая n-на-1 вектор y и n-на-p матрицу X, то X y определены как (XTX)-XTy, где (XTX)- является обобщенной инверсией X’X.

> bslash <- function(X, y) {

X <- qr(X)

qr.coef(X, y)

}

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

> regcoeff <-bslash (Xmat, yvar) и так далее.

Классическая функция R lsfit() делает это задание лучше. В свою очередь используются функции qr() и qr.coef() немного парадоксальным способом для выполнения своей части вычислений. Следовательно, существует, вероятно, некоторый смысл в простом выделении только этой части для использования функции в частом употреблении. Если так, то можно сделать это матричным бинарным оператором для более удобного использования.