Загрузка данных

url <- "https://raw.githubusercontent.com/underckit/machine_learning/main/SolarPrediction.csv"
SolarPrediction <- read.csv(url)

Корреляция

## corrplot 0.84 loaded

Числовое представление

x <- SolarPrediction[c(4, 5, 6, 7,8,9)]
y <- SolarPrediction[c(4, 5, 6, 7,8,9)]
cor(x, y)
##                          Radiation Temperature    Pressure     Humidity
## Radiation               1.00000000  0.73495476  0.11901566 -0.226170647
## Temperature             0.73495476  1.00000000  0.31117348 -0.285054954
## Pressure                0.11901566  0.31117348  1.00000000 -0.223973259
## Humidity               -0.22617065 -0.28505495 -0.22397326  1.000000000
## WindDirection.Degrees. -0.23032355 -0.25942119 -0.22900997 -0.001833315
## Speed                   0.07362687 -0.03145814 -0.08363929 -0.211623673
##                        WindDirection.Degrees.       Speed
## Radiation                        -0.230323549  0.07362687
## Temperature                      -0.259421188 -0.03145814
## Pressure                         -0.229009974 -0.08363929
## Humidity                         -0.001833315 -0.21162367
## WindDirection.Degrees.            1.000000000  0.07309242
## Speed                             0.073092422  1.00000000

Графическое представление

## Выбросы данных

library(ggplot2)
ggplot(SolarPrediction, aes(factor(Temperature), Radiation)) + geom_boxplot()

Значения с критическим отклонением считаем ошибочными и удаляем их.

condition1<-SolarPrediction[,4]<=1100
SolarPrediction<-SolarPrediction[condition1,]
condition1<-SolarPrediction[,4]!=194.26
SolarPrediction<-SolarPrediction[condition1,]
condition1<-SolarPrediction[,4]!=306.41
SolarPrediction<-SolarPrediction[condition1,]
condition1<-SolarPrediction[,4]!=157.83
SolarPrediction<-SolarPrediction[condition1,]

Наблюдаем изменение на графике.

ggplot(SolarPrediction, aes(factor(Temperature), Radiation)) + geom_boxplot()

##Нормальное распределение В качестве тестируемой характеристики выступит температура. ####График плотности

ggplot(SolarPrediction, aes(x=Temperature)) + geom_density()

график QQ (или график квантиль-квантиль) показывает корреляцию между данным образцом и нормальным распределением. Также наносится контрольная линия под углом 45 градусов.

library(ggpubr)
ggqqplot(SolarPrediction$Temperature)

####Гистограмма

hist(SolarPrediction$Temperature, main = "Histogram of temperature", col = "tomato", freq = FALSE)

curve(dnorm(x, mean = mean(SolarPrediction$Temperature, na.rm = TRUE), 
            sd = sd(SolarPrediction$Temperature, na.rm = TRUE)), 
            col = "blue", lwd = 2, add = TRUE)

Пока кажется, что распределение температуры не очень похоже на нормальное. ####Тест Шапиро-Уилка Так как для теста Шапиро-Уилка массив данных слишком велик, тестироваться будет лишь участок.

z<-SolarPrediction[13844:18842, 1:11]
shapiro.test(z$Temperature)
## 
##  Shapiro-Wilk normality test
## 
## data:  z$Temperature
## W = 0.9876, p-value < 2.2e-16

P-value < 0.05 ####Тест Андерсона-Дарлинга

library(nortest)
ad.test(SolarPrediction$Temperature)
## 
##  Anderson-Darling normality test
## 
## data:  SolarPrediction$Temperature
## A = 441.49, p-value < 2.2e-16

p-value<0.05

####Тест Крамера фон Мизеса

cvm.test(SolarPrediction$Temperature)
## Warning in cvm.test(SolarPrediction$Temperature): p-value is smaller than
## 7.37e-10, cannot be computed more accurately
## 
##  Cramer-von Mises normality test
## 
## data:  SolarPrediction$Temperature
## W = 77.523, p-value = 7.37e-10

p-value<0.05

####Тест Колмогорова-Смирнова в модификации Лиллиефорса

lillie.test(SolarPrediction$Temperature)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  SolarPrediction$Temperature
## D = 0.10811, p-value < 2.2e-16

p-value<0.05 ####Критерий хи-квадрат Пирсона

pearson.test(SolarPrediction$Temperature)
## 
##  Pearson chi-square normality test
## 
## data:  SolarPrediction$Temperature
## P = 179940, p-value < 2.2e-16

p-value<0.05 ####Тест Шапиро-Франсия

sf.test(z$Temperature)
## 
##  Shapiro-Francia normality test
## 
## data:  z$Temperature
## W = 0.98782, p-value < 2.2e-16

P-value < 0.05 На имеющихся данных на уровне значимости 5% (0.05) есть основания отвергнуть нулевую гипотезу о том, что данные распределены нормально. Показатель температуры не распределён нормально.

##Распределение хи-квадрат

chisq.test(SolarPrediction$Temperature)
## 
##  Chi-squared test for given probabilities
## 
## data:  SolarPrediction$Temperature
## X-squared = 24389, df = 32558, p-value = 1

##Проверка на пропуски

SolarPrediction.nacheck <- any(is.na(SolarPrediction))

Пропущенных значений не обнаружено.