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))
Пропущенных значений не обнаружено.