Суббота, 04.04.2026, 21:47Приветствуем вас Гость | RSS
Решение задач в среде R
Главная | анализ ОД | Регистрация | Вход
» Меню сайта

» R практикум

» R кодинг

» Rmatem

» Опрос
Сколько вам лет?
Всего ответов: 9

» Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Полный анализ одномерных данных в среде R 

# aod Полный анализ одномерных данных в среде R 
# анализ данных ggplot
# гистограмма с отклонениями по сигмам
# данные поместить в вектор x
library(ggplot2)
library(plyr)
options(scipen = 999, digits = 4)
datatest = function(){
  x = c(c(NA, 7, NA, 5, 8, 9, 10, 2, 9, 10, 11, NA, 8, 9, 17, 10, 7, 9))
}
Help=function(){
  # Анализ одномерных данных в среде R предполагает работу с одной переменной. 
  # Это простая форма анализа, так как информация касается 
  # только одной изменяющейся величины.  
  
  # Некоторые шаги анализа одномерных данных в R:
    
  # Проверка вектора данных на пропущенные значения (NA). 
  # Можно удалить их простым способом или с помощью функции mfNAdate(x),
  # которая автоматически заменит все NA на среднее (или медиану).
  
  # Проверка на выбросы. Для этого используется функция DvybrosBP, 
  # которая автоматически удаляет выбросы 
  # и строит ящики с усами для сравнения до и после.  
  
  # Проверка данных на нормальное распределение. Для этого применяется функция Tnorm. 
  
  # Вычисление описательной статистики. 
  # Она нужна, чтобы охарактеризовать анализируемые показатели. 
  # К описательной статистике относятся, например, 
  # минимальный, максимальный, средний элементы и медиана данных. 
  
  # Визуализация данных. Для этого можно использовать гистограмму 
  # (функция hist()) или 
  # график плотности (функция density() вместе с функцией plot()).  
}
# 1) Проверка вектора данных x на пропущенные значения (NA)
# 2) Проверка вектора х на выбросы.
# 3) гистограмма с отклонениями по сигмам
# 4) полная описательная статистика
# 5) Тесты на нормальное распределение
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#
#  1) Проверка вектора данных x на пропущенные значения (NA)
#
xNA = x
x = x[!is.na(x)]

# # # удалить NA в векторе х 
if (length(xNA) == length(x)) {
  cat('-------------------------\n')
  cat('NA не обнаружены')
}else{
  cat('-------------------------\n')
  cat('NA обнаружены: \n')
  cat('в количестве:', length(xNA) - length(x), '\n')
  cat('Вектор х больше не содержит NA \n')
  cat('Создан дубль исходного вектора xNA с NA \n')
  cat('-------------------------\n')
}

# # # заменить NA в векторе xNA на средния значения > x1
impute.mean <- function(x) replace(x, is.na(x), mean(x, na.rm = TRUE))
x1 = impute.mean(xNA)
#

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#
# 2) Проверка вектора х на выбросы.
#
xout = x
# создадим новый вектор без выбросов xx
ind <- which(x %in% boxplot.stats(x)$out)
xx <- x[-ind]
if (length(xout) == length(xx)) {
  cat('-------------------------\n')
  cat('Выбросы не обнаружены')
}else{
  cat('-------------------------\n')
  cat('обнаружены выбросы: \n')
  cat('в количестве:', length(xout) - length(xx), '\n')
  cat('Вектор хx больше не содержит выбросов \n')
  cat('Создан дубль исходного вектора xout с выбросами \n')
  cat('-------------------------\n')
}


df = rbind(data.frame(type='Outlrs', data = xout),
           data.frame(type='clear', data = xx))
#
BPpltGGP = function(df){ 
  plot<-ggplot(df, 
               aes(x=type,y=data, fill=type)) +
    geom_boxplot(lwd=1.1,outlier.size = 2) 
  
  # add scale_fill_manual function to specify colors 
  plot + scale_fill_manual(values = c("grey30","grey50", "grey70")) +
    ggtitle("Проверка на выбросы ", 
            subtitle = "данные xout и хх") +
    xlab("clear - вектор с удаленными выбросами, Outlrs - исходный вектор")+
    theme_linedraw()
  }
BPpltGGP(df)
# BPplt = function(df){
#   boxplot(data~type,df)
#   grid(col='grey40')
#   boxplot(data~type,df, add=TRUE)
# }
# BPplt(df)

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#
# 3) гистограмма с отклонениями по сигмам
#
HpltGGP = function(x,bins){
  # настройки:
  Lsize = 1.3 #толщина линий нормир откл
  Psize = 2 #толщина линии кривой норм плот распр
  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
  data = data.frame(x)
  meanx = mean(x)
  sdx = sd(x)
  t = round((x - meanx)/sdx,1)
  df = data.frame(x, t)
  # граница значений плюс минус одна сигма
  tmax1 = 1*sdx + meanx 
  tmin1 = meanx - 1*sdx
  # граница значений плюс минус две сигм
  tmax2 = 2*sdx + meanx 
  tmin2 = meanx - 2*sdx
  # граница значений плюс минус три сигмы
  tmax3 = 3*sdx + meanx 
  tmin3 = meanx - 3*sdx
  
  ggplot(data, aes(x)) +        # Draw histogram with density
    geom_histogram(bins = bins,aes(y = ..density..), col='black', lwd =1, fill='grey50') +
    stat_function(fun = dnorm,
                  args = list(mean = mean(data$x),
                              sd = sd(data$x)),
                  col = "red",
                  size = Psize) +
    geom_vline(xintercept = tmin1, col='green', size = Lsize) +
    geom_vline(xintercept = tmax1, col='green', size = Lsize) +
    geom_vline(xintercept = meanx, col='green', size = (Lsize+1)) +
    geom_vline(xintercept = tmin2, col='blue', size = Lsize) +
    geom_vline(xintercept = tmax2, col='blue', size = Lsize) +
    geom_vline(xintercept = tmin3, col='red', size = Lsize) +
    geom_vline(xintercept = tmax3, col='red', size = Lsize) +
    ggtitle("Гистограмма с наложенной кривой нормальной плотности", 
            subtitle = "Нормированное отклонение сигм: зеленый 1, синий 2, красный 3") +
    theme_linedraw()
}
HpltGGP(x = xx,bins = 12 )

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#
# 4) полная описательная статистика
# для данных в векторе x

options(scipen = 999, digits = 2) #отключить экспоненциальное представление в R
# функция AE расчета ассимметрии и эксеса
# ассимметрия skewness (AS) , эксес kurtosis (Ex) 
AE = function(x, na.omit = F){
  if (na.omit)
    x = x[!is.na(x)]
  m = mean(x)
  med = median(x)
  n = length(x)
  s = sd(x)
  skew = sum((x - m)^3/s^3)/n
  kurt = sum((x - m)^4/s^4)/n - 3
  minx = min(x)
  maxx = max(x)
  return(c(n = n, mean = m, median = med, SD = s, 
           As = skew, Ex = kurt, min = minx, max = maxx))
}
AE(xx)

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
#
# 5) Тесты на нормальное распределение
# для данных в векторе xx
# p-value больше 0.05 H0 верна:
# данные в векторе подчиняются нормальному распределению
shapiro.test(xx)
#ks.test(xx, "pnorm")
# Load the nortest package for the Anderson-Darling test
library(nortest)
ad.test(xx)
# QQ test
qqnorm(xx)
qqline(xx, col='red', lwd=2)

# Автоматическое создание гистограммы с линиями Density, Normal:
  histDenNorm <- function (x,bins,ymax, main = "") {
    hist(x, bins,prob = TRUE, main = main, ylim = c(0, ymax)) # Histogram
    lines(density(x), col = "blue", lwd = 2) # Density 
    x2 <- seq(min(x), max(x), length = 40)
    f <- dnorm(x2, mean(x), sd(x))
    lines(x2, f, col = "red", lwd = 2) # Normal
    legend("topright", c("Histogram", "Density", "Normal"), box.lty = 0,
           lty = 1, col = c("black", "blue", "red"), lwd = c(1, 2, 2))
  }

  histDenNorm(x = xx,bins = 20,ymax = 0.06, main = "Histogram of xx")


# # # # 

» Вход на сайт

» Поиск

» Работа с файлами

» Вся графика

» Гистогра́мма

» Теория вероятности

» Сравнение групп

» Дисперс анализ

» Блог

» Календарь
«  Апрель 2026  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930

» Архив записей


Copyright MyCorp © 2026
uCoz