R Markdown

Проверяем, как проходит тест на нормальность iris без изменений. Смотрим зависимость длины чашелистиков от вида ирисов

data(iris)
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
fit <- lm(Sepal.Length ~ Species, data = iris) #создаём линейную модель
res <- resid(fit) #отбираем остатки
shapiro.test(res)
## 
##  Shapiro-Wilk normality test
## 
## data:  res
## W = 0.9879, p-value = 0.2189
library("nortest")
lillie.test(res)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  res
## D = 0.07331, p-value = 0.04711
ad.test(res)
## 
##  Anderson-Darling normality test
## 
## data:  res
## A = 0.59794, p-value = 0.1188

p-value = 0.2189 > 0.05 следовательно, данные распределены нормально p-value = 0.04711 < 0.05 p-value = 0.1188 >0.05

В результате трёх тестов на нормальность, в двух p-значение больше 0.05, следовательно данные распределены нормально

Посмотрим также, гомогенны ли дисперсии

library("car")
## Warning: пакет 'car' был собран под R версии 4.2.3
## Загрузка требуемого пакета: carData
## Warning: пакет 'carData' был собран под R версии 4.2.3
leveneTest(Sepal.Length ~ Species, data = iris)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value   Pr(>F)   
## group   2  6.3527 0.002259 **
##       147                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Pr(>F) 0.002259 < 0.05 значит, дисперсии не гомогенны

Проведём попарные сравнения

oneway.test(Sepal.Length ~ Species, data = iris)
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  Sepal.Length and Species
## F = 138.91, num df = 2.000, denom df = 92.211, p-value < 2.2e-16
pairwise.t.test(iris$Sepal.Length, iris$Species, pool.sd = F)
## 
##  Pairwise comparisons using t tests with non-pooled SD 
## 
## data:  iris$Sepal.Length and iris$Species 
## 
##            setosa  versicolor
## versicolor < 2e-16 -         
## virginica  < 2e-16 1.9e-07   
## 
## P value adjustment method: holm

Получается, все три вида ирисов отличаются по длине лепестков, так как при попарном сравнении p < 0.05

Сделаем выборку iris меньше. Выберем случайные наблюдения

#N/2 = 75
iris75 <- iris[sample(1:nrow(iris), 75, replace=FALSE),]
summary(iris75)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.400   Min.   :2.000   Min.   :1.200   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.350  
##  Median :5.800   Median :3.000   Median :4.500   Median :1.400  
##  Mean   :5.796   Mean   :3.008   Mean   :3.833   Mean   :1.223  
##  3rd Qu.:6.300   3rd Qu.:3.350   3rd Qu.:5.000   3rd Qu.:1.800  
##  Max.   :7.700   Max.   :3.800   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :23  
##  versicolor:29  
##  virginica :23  
##                 
##                 
## 
#проверим на нормальность
fit75 <- lm(Sepal.Length ~ Species, data = iris75) #создаём линейную модель
res75 <- resid(fit75) #отбираем остатки
shapiro.test(res75)
## 
##  Shapiro-Wilk normality test
## 
## data:  res75
## W = 0.97034, p-value = 0.07544
library("nortest")
lillie.test(res75)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  res75
## D = 0.1103, p-value = 0.0245
ad.test(res75)
## 
##  Anderson-Darling normality test
## 
## data:  res75
## A = 0.80192, p-value = 0.03616
#Оценим гомогенность дисперсий
library("car")
leveneTest(Sepal.Length ~ Species, data = iris75)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)  
## group  2  3.1304 0.0497 *
##       72                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#0.02883 < 0.05 дисперсии негомогенны
oneway.test(Sepal.Length ~ Species, data = iris75)
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  Sepal.Length and Species
## F = 75.698, num df = 2.000, denom df = 43.597, p-value = 6.588e-15
pairwise.t.test(iris75$Sepal.Length, iris75$Species, pool.sd = F)
## 
##  Pairwise comparisons using t tests with non-pooled SD 
## 
## data:  iris75$Sepal.Length and iris75$Species 
## 
##            setosa  versicolor
## versicolor 7.7e-12 -         
## virginica  9.5e-11 0.063     
## 
## P value adjustment method: holm
#все виды ирисов отличаются между собой по длине чашелистиков

p-value = 0.1403 > 0.05 p-value = 0.02939 < 0.05 p-value = 0.08542 > 0.05 Замечаем, что нормальное рапределение сохраняется

Уменьшаем выборку N/4

#150/4 = 37.5 - округлим в большую сторону = 38
iris38 <- iris[sample(1:nrow(iris), 38, replace=FALSE),]
summary(iris38)
##   Sepal.Length   Sepal.Width     Petal.Length    Petal.Width          Species  
##  Min.   :4.40   Min.   :2.300   Min.   :1.200   Min.   :0.200   setosa    :12  
##  1st Qu.:5.25   1st Qu.:2.800   1st Qu.:1.550   1st Qu.:0.400   versicolor:13  
##  Median :5.80   Median :3.050   Median :4.400   Median :1.400   virginica :13  
##  Mean   :6.00   Mean   :3.153   Mean   :3.916   Mean   :1.292                  
##  3rd Qu.:6.65   3rd Qu.:3.400   3rd Qu.:5.375   3rd Qu.:1.900                  
##  Max.   :7.90   Max.   :4.400   Max.   :6.600   Max.   :2.500
#проверим на нормальность
fit38 <- lm(Sepal.Length ~ Species, data = iris38) #создаём линейную модель
res38 <- resid(fit38) #отбираем остатки
shapiro.test(res38)
## 
##  Shapiro-Wilk normality test
## 
## data:  res38
## W = 0.97632, p-value = 0.5876
library("nortest")
lillie.test(res38)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  res38
## D = 0.088737, p-value = 0.6327
ad.test(res38)
## 
##  Anderson-Darling normality test
## 
## data:  res38
## A = 0.24922, p-value = 0.7297
library("car")
leveneTest(Sepal.Length ~ Species, data = iris38)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2   2.375 0.1078
##       35

p-value = 0.3308 >0.05 p-value = 0.3463 >0.05 p-value = 0.3512 >0.05 Данные распределены нормально, несмотря на уменьшение выборки до 38 объектов

Pr(>F) = 0.1852 >0.05 Дисперсии гомогенны - отличается от оригинальноо датасета

anova(fit38)
## Analysis of Variance Table
## 
## Response: Sepal.Length
##           Df Sum Sq Mean Sq F value    Pr(>F)    
## Species    2 17.158  8.5788  26.661 9.227e-08 ***
## Residuals 35 11.262  0.3218                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
pairwise.t.test(iris38$Sepal.Length, iris38$Species)
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  iris38$Sepal.Length and iris38$Species 
## 
##            setosa  versicolor
## versicolor 0.0013  -         
## virginica  4.7e-08 0.0013    
## 
## P value adjustment method: holm

Ирисы отличаются по длине чашелистиков

Продолжаем уменьшать выборку

#N/8
#150/8 = 18.75 округляем до 19
iris19 <- iris[sample(1:nrow(iris), 19, replace=FALSE),]
summary(iris19)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width    
##  Min.   :4.400   Min.   :2.300   Min.   :1.200   Min.   :0.2000  
##  1st Qu.:4.800   1st Qu.:3.050   1st Qu.:1.450   1st Qu.:0.2000  
##  Median :5.100   Median :3.200   Median :1.700   Median :0.4000  
##  Mean   :5.458   Mean   :3.247   Mean   :2.768   Mean   :0.8579  
##  3rd Qu.:6.100   3rd Qu.:3.450   3rd Qu.:4.500   3rd Qu.:1.4500  
##  Max.   :6.900   Max.   :4.200   Max.   :6.000   Max.   :2.5000  
##        Species  
##  setosa    :12  
##  versicolor: 3  
##  virginica : 4  
##                 
##                 
## 
#проверим на нормальность
fit19 <- lm(Sepal.Length ~ Species, data = iris19) #создаём линейную модель
res19 <- resid(fit19) #отбираем остатки
shapiro.test(res19)
## 
##  Shapiro-Wilk normality test
## 
## data:  res19
## W = 0.98339, p-value = 0.9743
library("nortest")
lillie.test(res19)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  res19
## D = 0.097967, p-value = 0.902
ad.test(res19)
## 
##  Anderson-Darling normality test
## 
## data:  res19
## A = 0.1581, p-value = 0.941
library("car")
leveneTest(Sepal.Length ~ Species, data = iris19)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.4107   0.67
##       16

p-value = 0.5372 > 0.05 p-value = 0.3017 > 0.05 p-value = 0.393 > 0.05 Данные распределены нормально Pr(>F) = 0.2019 > 0.05 дисперсии гомогенны

anova(fit19)
## Analysis of Variance Table
## 
## Response: Sepal.Length
##           Df Sum Sq Mean Sq F value    Pr(>F)    
## Species    2 8.0696  4.0348  15.993 0.0001528 ***
## Residuals 16 4.0367  0.2523                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
pairwise.t.test(iris19$Sepal.Length, iris19$Species)
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  iris19$Sepal.Length and iris19$Species 
## 
##            setosa  versicolor
## versicolor 0.00598 -         
## virginica  0.00031 0.37513   
## 
## P value adjustment method: holm

Виды ирисов отличаются по длине чашелистиков

Уменьшаем выборку N/16

#150/16 = 9.375 округляем до 9
iris9 <- iris[sample(1:nrow(iris), 9, replace=FALSE),]
summary(iris9)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width    
##  Min.   :4.700   Min.   :2.300   Min.   :1.300   Min.   :0.2000  
##  1st Qu.:5.000   1st Qu.:2.600   1st Qu.:1.400   1st Qu.:0.2000  
##  Median :5.700   Median :2.800   Median :3.500   Median :1.0000  
##  Mean   :5.633   Mean   :3.022   Mean   :3.267   Mean   :0.8667  
##  3rd Qu.:6.100   3rd Qu.:3.200   3rd Qu.:4.700   3rd Qu.:1.3000  
##  Max.   :6.400   Max.   :4.200   Max.   :5.600   Max.   :2.1000  
##        Species 
##  setosa    :4  
##  versicolor:3  
##  virginica :2  
##                
##                
## 
#проверим на нормальность
fit9 <- lm(Sepal.Length ~ Species, data = iris9) #создаём линейную модель
res9 <- resid(fit9) #отбираем остатки
shapiro.test(res9)
## 
##  Shapiro-Wilk normality test
## 
## data:  res9
## W = 0.9593, p-value = 0.791
library("nortest")
lillie.test(res9)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  res9
## D = 0.12333, p-value = 0.9581
ad.test(res9)
## 
##  Anderson-Darling normality test
## 
## data:  res9
## A = 0.17654, p-value = 0.8898
library("car")
leveneTest(Sepal.Length ~ Species, data = iris9)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.0909 0.9143
##        6

p-value = 0.7788 > 0.05 p-value = 0.8378 > 0.05 p-value = 0.8404 > 0.05 Данные распределены нормально Pr(>F) = 0.328 > 0.05 дисперсии гомогенны

anova(fit9)
## Analysis of Variance Table
## 
## Response: Sepal.Length
##           Df  Sum Sq Mean Sq F value   Pr(>F)   
## Species    2 2.72083 1.36042  14.094 0.005406 **
## Residuals  6 0.57917 0.09653                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
pairwise.t.test(iris9$Sepal.Length, iris9$Species)
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  iris9$Sepal.Length and iris9$Species 
## 
##            setosa versicolor
## versicolor 0.012  -         
## virginica  0.012  0.474     
## 
## P value adjustment method: holm

I.setosa и I.versicolor достоверно не отличаются по длине чашелистиков между собой, I.versicolor I.virginica достоверно не отличаются по длине чашелистиков между собой, I.setosa и I.virginica достоверно отличаются

Уменьшаем выборку N/32

#150/32 = 4.6875 округляем до 5
iris5 <- iris[sample(1:nrow(iris), 5, replace=FALSE),]
summary(iris5)
##   Sepal.Length   Sepal.Width   Petal.Length   Petal.Width         Species 
##  Min.   :4.50   Min.   :2.3   Min.   :1.30   Min.   :0.30   setosa    :2  
##  1st Qu.:5.70   1st Qu.:2.8   1st Qu.:1.50   1st Qu.:0.40   versicolor:3  
##  Median :6.10   Median :2.9   Median :4.60   Median :1.20   virginica :0  
##  Mean   :5.92   Mean   :3.1   Mean   :3.36   Mean   :0.94                 
##  3rd Qu.:6.60   3rd Qu.:3.1   3rd Qu.:4.70   3rd Qu.:1.30                 
##  Max.   :6.70   Max.   :4.4   Max.   :4.70   Max.   :1.50
#проверим на нормальность
fit5 <- lm(Sepal.Length ~ Species, data = iris5) #создаём линейную модель
res5 <- resid(fit5) #отбираем остатки
shapiro.test(res5)
## 
##  Shapiro-Wilk normality test
## 
## data:  res5
## W = 0.95837, p-value = 0.7966
library("nortest")
lillie.test(res5)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  res5
## D = 0.20912, p-value = 0.6698
library("car")
leveneTest(Sepal.Length ~ Species, data = iris5)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1  4.1143 0.1356
##        3

p-value = 0.8325 > 0.05 p-value = 0.9196 > 0.05 Данные распределены нормально Pr(>F) =< 2.2e-16 < 0.05 дисперсии негомогенны

oneway.test(Sepal.Length ~ Species, data = iris5)
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  Sepal.Length and Species
## F = 4.7352, num df = 1.000, denom df = 1.195, p-value = 0.2406
pairwise.t.test(iris5$Sepal.Length, iris5$Species, pool.sd = F)
## 
##  Pairwise comparisons using t tests with non-pooled SD 
## 
## data:  iris5$Sepal.Length and iris5$Species 
## 
##            setosa
## versicolor 0.24  
## 
## P value adjustment method: holm

Вывод: нормальность распредления данных при уменьшении выборки на N/2, N/4, N/8, N/16, N/32 не изменялась, изменялась дисперсия от негомогенной к гомогеннной и снова к негомогенной. ТАкже при уменьшении выборок не всегда можно было провести достоверные различия между видами ирисов по длине чашелистика