пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Пример - Жуки

#Жуки - описание жуков: пол, цвет, вес, рост 
setwd("C:/Users/user/Documents/Костя/R")
dt <- read.csv2(file = "data.csv", header = T, sep=";")
#Создаем фрэйм 4:100
dt3 <-data.frame(POL = sample(c(0:1), 100, replace = TRUE), CVET = sample(c(1:3), 100, replace = TRUE), 
                 VES = sample(c(20:120), 100, replace = TRUE), ROST = sample(c(50:150), 100, replace = TRUE))
# Выбираем данные из всех 4 столбцов по условию 
dt.f <- dt3[dt3$POL == 0, ]
# Отдельная переменная для самцов длинной более 10 мм
dt.m.big <- dt3[dt3$POL == 1 & dt3$ROST > 10, ]
# Добавим еще один признак к фрэйму
dt3$V.ROST <- dt3$VES / dt3$ROST
# Сохранимм данные в файл
write.table(dt3, file = "data_new.txt", quote = F)
# Основные характеристики каждого признака
summary(dt3)
# Удаление пропущенных значений
dt3.0 <- na.omit(dt3)
# Сумма всех значений признака
sum(dt3$VES) 
# Сумма всех значений фрэйма по второй строке
sum(dt3[2,])
# Сумма всех признаков для каждой строки, если 1 поменять на 2 то будет сумма по столбцам
apply(dt3, 1, sum)
# Количество признаков - частота встречаемости
table(dt3$POL)
# Частота встречаемости в процентах
100 * table(dt3$POL) / length(dt3$POL)
# Округление чисел
round(dt3$V.ROST, 1)
# Стандартное отклонение
sd(dt3$ROST)
# Безразмерный коэф. CV - не знаю, что он значит
100 * sd(dt3$ROST) / mean(dt3$ROST)
# Вычисление отдельных признаков для жуков различного пола
tapply(dt3$VES, dt3$POL, mean)
# Кол.жуков различного цвета среди самцов и самок (строки цвета, столбцы пол)
table(dt3$CVET, dt3$POL)
# То же самое в процентах с округлением до второго знака после запятой
round(100 * table(dt3$CVET, dt3$POL) / sum(dt3$CVET, dt3$POL), 2)
# Средние значения веса жуков отдельно для всех комбинаций цвета и пола
tapply(dt3$VES, list(dt3$POL, dt3$CVET), mean)


####### Диаграммы ##################

# Гистограмма
hist(dt3$VES, breaks = 20) # breaks - кол.столбцов
# зададим точную ширину интервалов значений и диапазон изменения признака [20:120]
hist(dt3$VES, breaks = c(seq(20, 120, 20)))
# Проверка на нормальность
qqnorm(dt3$VES); qqline(dt3$VES, col='red', lwd=2, lty=6) # цвет, толщина и тип линии
# dev.new() # Эти функции обеспечивают контроль над несколькими графическими устройствами. Пока не понял, как ими пользоваться
qqnorm(dt3$ROST, main = "Рост"); qqline(dt3$ROST, col='blue', lwd=2, lty=6) # цвет, толщина и тип линии
# диаграмма рассеивания
plot(dt3$ROST, dt3$VES, type = "p", cex=0.8, pch=2)
# type - "p" for points, "l" for lines, "b" for both, "c" for the lines part alone of "b", "o" for both ‘overplotted’,
#        "h" for ‘histogram’ like (or ‘high-density’) vertical lines, "s" for stair steps, "S" for other steps, see ‘Details’ below,
#        "n" for no plotting.
# cex - размер точек
# демонстрация вида точек
example(points)

# Можно обозначить объекты на диаграмме кодом пола, цифры разного цвета
plot(dt3$ROST, dt3$VES, type = "n")
text(dt3$ROST, dt3$VES, labels = dt3$POL, col = dt3$POL+1) # +1 иначе нулевые значения будут прозрачными
# Можно самцов и самок обозначить разными значками
plot(dt3$ROST, dt3$VES, type = "n")
points(dt3$ROST, dt3$VES, pch = dt3$POL+1, col = dt3$POL+1)
# Более сложный вариант с использованием встроенных шрифтов
plot(dt3$ROST, dt3$VES, type = "n", xlab = "Рост, мм", ylab = "Вес, гр", main = "Соотношение веса и роста жуков")
text(dt3$ROST, dt3$VES, labels = ifelse(dt3$POL, "\\MA", "\\VE"), vfont = c("serif", "plain"), 
     cex=1.5, col = dt3$POL+1)
legend(140, 120, c("male", "female"), pch = 15, col = dt3$POL+1) # как поставить значки с диаграммы пока не знаю

# Коррелограмма - до конца не разобрался
# жуки отсортированы по росту
plot(dt3[order(dt3$ROST), c("ROST", "VES")], type="o", ylim=c(20, 120)) # , ylim=c(5, 15)
lines(dt3[order(dt3$ROST), c("ROST", "VES")], lty=3)
# Боксплот
boxplot(dt3$ROST)
boxplot(dt3$ROST ~ factor(dt3$POL)) # Раздельно для самцов и самок


# Статистические тесты
# Тест Стьюдента - достоверность различия параметрических данных, 
t.test(dt3$VES, dt3$ROST, paired = T) # для зависимых переменных
t.test(dt3$VES, dt3$ROST, paired = F) # для независимых переменных
# Если p-value < 0.05, то различие между выборками достоверно
# В R по умолчанию не требуется проверять, одинаков ли разброс данных относительно среднего

# Достоверность различий для непараметрических данных (текст Вилкоксона)
wilcox.test(dt3$VES, dt3$ROST, paired=TRUE)


# Достоверность различий между тремя и более выборками параметрических данных
# (вариант однофакторного дисперсионного анализа)
oneway.test(dt3$VES ~ dt3$CVET)

# Какие именно пары выборок достоверно различаются
pairwise.t.test(dt3$VES, dt3$CVET, p.adj="bonferroni")

# Достоверность различий между несколькими выборками непараметрических данных
kruskal.test(dt3$VES ~ dt3$CVET)

# Достоверность соответствия для категориальных данных (тест Пирсона, хи-квадрат)
chisq.test(dt3$CVET, dt3$POL)

# Достоверность различия пропорций (тест пропорций)
prop.test(c(sum(dt3$POL)), c(length(dt3$POL)), 0.5) # верно ли, что доля самцов достоверно отличается от 50%

# Достоверность линейной связи между параметрическими данными (корреляционный тест Пирсона)
cor.test(dt3$VES, dt3$ROST, method = "pearson")

# Достоверность линейной связи между непараметрическими данными (корреляционный тест Спирмена)
cor.test(dt3$VES, dt3$ROST, method = "spearman")

# Дисперсионный анализ при помощи линейной модели
anova(lm(dt3$ROST ~ dt3$POL))

# Сохранение истории команд, именно в той последовательности как они выполнялись
savehistory("zhuki.r")


03.01.2020; 14:30
хиты: 35
рейтинг:0
Точные науки
математика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь