Voliadis place - Место где живу я

  • Главная
  • Библиотека
  • Закладки
  • Архив
  • Поиск
Главная

Дисперсионный анализ в R. Часть 2.

Ришат Габидуллин — Вс, 12.07.2009

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

Задача 3.5.

В этой задаче надо сравнить две одинаковые по численности группы животных. Исходные данные представлены в виде средних и стандартных ошибок среднего.

Как сгенерировать выборку мы уже знаем. Но каждый раз писать несколько лишних строк кода только лишь для того, чтобы получить ряд цифр — это не продуктивный путь работы. Есть более удобный и правильный вариант. Можно написать свою функцию, сохранить ее в файле с расширением «.R» и использовать при необходимости.

Команды, сохраненные во внешнем файле, могут быть выполнены с помощью функции source(). Аргумент функции — путь к файлу. Если указать только имя файла, то R будет искать его в рабочем каталоге. По умолчанию, рабочий каталог — это домашняя папка пользователя в Linux или папка «Мои документы» в Windows. Чтобы узнать путь к текущему рабочему каталогу надо использовать функцию getwd(), для смены каталога — функцию setwd(). Пользователям Linux можно запускать R из той папки, которую. надо сделать рабочей.

$ cd /путь/к/рабочему/каталогу
$ R

 Итак, создадим файл sampleGen.R в рабочем каталоге и запишем в него свою функцию.

###############################################################
#
# Функция sampleGen генерирует выборки с заданным размером группы,
# средним арифметическим, стандартным отклонением
# (или стандартной ошибкой среднего).
# Функция возвращает объект типа data.frame, состоящий из 2х столбцов.
#
# Аргументы:
# gval - вектор, содержащий размеры групп
# means - вектор со средними арифметическими
# devs - вектор, содержащий стандартные отклонения или ошибки среднего
# sd - логическая переменная, указывающая содержит ли devs стандартные
# отклонения. По умолчанию - TRUE.
#
###############################################################
sampleGen<-function(gval, means, devs, sd=TRUE) {
X<-numeric();
if (sd==FALSE) {
  devs<-devs*sqrt(gval)
}
for (i in 1:length(gval)) {
  D<-rnorm(gval[i], 0, 1);
  D<-(D-mean(D))/sd(D);
  x<-c(means[i]+D*devs[i]);
  names(x)<-rep(i, gval[i]);
  X<-c(X, x);
}
stack(X);
}

Как видите, создать функцию очень легко. Мы создали объект sampleGen типа функция. В общем виде создание функции выглядит так:

name <- function(Arg1, Arg2, ...) expressionExpression — это выражение на языке R, которое использует аргументы Arg1, Arg2 и т. д. для вычисления значения, возвращаемого функцией. Как правило, команды expression группируются скобками {}.

В этой функции я использовал новый оператор. Это оператор условия if. Формат записи:

if (условие) {выражение}

Обратите внимание, что условие равенства обозначено как «==», а не «=». Дело в том, что в языке R знак равенства может использваться как оператор присваивания, равносильный «<-».

Еще одно новшество — это функция stack(). Данная функция создает из вектора таблицу данных, содержащую два столбца — значения и факторы. Факторы задаются через индексы, как это сделано в функции sampleGen(). Можно эту функцию применить и к таблице, содержащей более двух столбцов с данными. Тогда все столбцы объединятся в один, а их имена станут факторами.

> x<-1:10
> y<-11:20
> z<-21:30
> s<-data.frame(x,y,z)
> s<-stack(s)

Tеперь для генерирования выборок все готово. Начнем решать задачу.

> source("sampleGen.R")
> bpart<-sampleGen(gval=c(36, 36), means=c(51.4, 59.4), devs=c(3.2, 3.9), sd=FALSE)
> model<-aov(values ~ ind, data=bpart)
> summary(model)

И опять новые функции. Функция aov(), как и lm() в одной из прошлых задач, выполняет подгонку статистической модели к данным. Функция summary(), как и anova(), выводит уже известную вам таблицу (т. н. ANOVA table). Более подробно на статистическом моделировании я сейчас останавливаться не буду. Это тема будет освещена позже.

Задача 3.6.

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

Сначала попробуем построить график для получения наглядной информации о разбросе значений.

> nurse<-sampleGen(gval=rep(16, 6), means=c(49.9, 51.2, 57.3, 46.4, 43.9, 65.2), devs=c(14.3, 13.4, 14.9, 14.7, 16.5, 20.5))
> plot(values ~ ind, data=nurse, main="Выраженность синдрома опустошенности у медсестер", xlab="группы", ylab="баллы")  

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

> model<-aov(values ~ ind, data=nurse)
> summary(model)

 Нулевую гипотезу отвергаем. Задача решена.

Задача 3.7.

В этой задаче даны выборки разного размера, среднее и стандартная ошибка среднего.

Нарисуем график другого типа.

> gval<-c(30, 13, 20, 20)
> means=c(15, 15, 9, 7)
> devs=c(1, 2, 2, 1)
> miocard<-sampleGen(gval, means, devs, sd=FALSE)
> stripchart(miocard$values~miocard$ind,
vert=T,
main="Вес пораженного участка миокарда\n(в % от веса левого желудочка)",
xlab="Группы",
ylab="%",
group.names=c("Контроль", "Дофамин низ", "Дофамин выс", "Нитропруссид"),
ylim=c(0, 30))
> arrows(1:4,xbar+2*devs,1:4,xbar-2*devs,angle=90,code=3)

Функция stripchart() выводит маркеры, соответствующие значениям выборки. Затем на этом же графики мы рисуем указатели, показывающие интервал шириной в 4 стандартные ошибки среднего. Если все эти указатели пересекаются, то очень высока вероятность правильности нулевой гипотезы.

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

> model<-aov(values ~ ind, data=miocard)
> summary(model)

Все встало на свои места, задача решена.

Задача 3.8.

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

> gval<-c(15, 37, 31, 13, 10)
> means<-c(257, 196, 221, 280, 310)
> devs<-c(159, 359, 340, 263, 95)
> sd<-TRUE
> PlatCell<-sampleGen(gval, means, devs, sd)
> oneway.test(values ~ ind, data=PlatCell, var.equal=T)

Аргумент var.equal указывает на то, что дисперсии равны. А по условию задачи это именно так.

Подведем итоги. Во второй половине статьи о дисперсионном анализе я рассказал о построении графиков. Немного расширил знания о настройке их параметров. Обратите внимание, что аргументы, использованные в функции stripchart() могут применяться и для других графических функций (например plot(), boxplot()). Помимо графических, были показаны новые функции для проведения дисперсионного анализа. Наиболее важная часть статьи - описание создания собственных функций и скриптов, что значительно упрощает работу при статобработке результатов своих исследований.

Закладки |
  • R
  • дисперсионный анализ
  • статистика
  • учись работать

Система Orphus
Выделите орфографическую ошибку мышью и нажмите Ctrl+Enter

 

Понравилась статья? Подпишись на RSS.

RSS иконка

Похожие статьи

  • Множественные сравнения в R
  • Дисперсионный анализ в R. Часть 1.
  • Сравнение двух выборок в R
  • Объекты и типы данных языка R. Часть 2
  • R. Описательная статистика.

Случайные статьи

Веселый медлайн
Санпросвет работа с населением.
Космическая медицина. Полет на Луну. Часть 2.
Эффект ноцебо
Советы по работе в Pubmed.

Кто я?

Ришат Габидуллин

Темы блога

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

Недавно читали

100 книг по R
Статистика в R. Начало.
R. Описательная статистика.
Юристы и стафилококки
Научные журналы в интернете

Популярные статьи

Как написать хорошую статью.
Топ 10 сайтов для поиска научной медицинской литературы.
Советы по работе в Pubmed.
R. Описательная статистика.
Эффект ноцебо

Реклама

АПА) отмечено как день рождения понятия аутизм Авторы этого календаря, опубликованного в.
Главная Здоровье Новости Народные средства против облысения.
Отменного качества предлагаются качественные запчасти от производителя любых видов.

Rambler's Top100
  • Главная
  • Библиотека
  • Закладки
  • Архив
  • Поиск

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии.
Copyleft © 2009-2011, Voliadis.