WSTĘP
BIBLIOTEKI
library(dplyr)
library(ggplot2)
library(car)
library("VIM")
library(readxl)
ZAŁADOWANIE DANYCH
dane <- read.csv("C:/Users/majko/OneDrive/Dokumenty/Zajecia_WZR/PRZYGOTOWANIE_DANYCH/Insurance/train3.csv", sep = ";")
head(dane,10)
## Gender Age Driving_License Region_Code Previously_Insured Vehicle_Age
## 1 Male 44 1 28 0 > 2 Years
## 2 Male 76 1 3 0 1-2 Year
## 3 Male 47 1 28 0 > 2 Years
## 4 Male 21 1 11 1 < 1 Year
## 5 Female NA 1 41 1 < 1 Year
## 6 Female 24 1 33 0 < 1 Year
## 7 Male 23 1 11 0 < 1 Year
## 8 Female 56 1 28 0 1-2 Year
## 9 Female 24 1 3 1 < 1 Year
## 10 Female 32 1 6 1 < 1 Year
## Vehicle_Damage Annual_Premium Policy_Sales_Channel Vintage Response
## 1 Yes 40454 26 217 1
## 2 No 33536 26 183 0
## 3 Yes 38294 26 27 1
## 4 No 28619 152 203 0
## 5 No 27496 152 39 0
## 6 Yes 2630 160 176 0
## 7 Yes 23367 152 249 0
## 8 Yes 32031 26 72 1
## 9 No 27619 NA 28 0
## 10 No 28771 NA 80 0
## Year_Birth
## 1 1978
## 2 1946
## 3 1975
## 4 2001
## 5 1993
## 6 1998
## 7 1999
## 8 1966
## 9 1998
## 10 1990
SKALE POMIAROWE
SKALA NOMINALNA
skala dychotomiczna
table(dane$Gender)
##
## Female Male
## 4 175018 206087
ggplot(dane , aes(x=factor(Gender), fill=factor(Gender))) +
geom_bar() +
theme(legend.position="none")
skala nominalna
Region_Code
table(dane$Region_Code)
##
## 0 1 2 3 4 5 6 7 8 9 10
## 2021 1008 4038 9251 1801 1279 6280 3279 33877 3101 4374
## 11 12 13 14 15 16 17 18 19 20 21
## 9232 3198 4036 4678 13308 2007 2617 5153 1535 1935 4266
## 22 23 24 25 26 27 28 29 30 31 32
## 1309 1960 2415 2503 2587 2823 106415 11065 12191 1960 2787
## 33 34 35 36 37 38 39 40 41 42 43
## 7654 1664 6942 8797 5501 2026 4644 1295 18263 591 2639
## 44 45 46 47 48 49 50 51 52
## 808 5605 19749 7436 4681 1832 10243 183 267
ggplot(dane , aes(x=factor(Region_Code), fill=factor(Region_Code))) +
geom_bar() +
theme(legend.position="none")
SKALA PORZĄDKOWA
vehicle_age
table(dane$Vehicle_Age)
##
## < 1 Year > 2 Years 1-2 Year
## 4 164784 16007 200314
ggplot(dane , aes(x=factor(Vehicle_Age), fill=factor(Vehicle_Age))) +
geom_bar() +
theme(legend.position="none")
SKALA PEZEDZIAŁOWA
table(dane$Year_Birth)
##
## 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949
## 11 11 22 29 56 909 915 1216 1388 1396 1605 1832 1925
## 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962
## 2035 2051 2349 2530 2440 2624 2725 2791 2850 3084 3104 3341 3534
## 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975
## 3614 3822 3944 4063 4495 4997 5331 5590 5915 6263 6615 7113 7351
## 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988
## 7879 8183 8357 8437 8007 7736 7168 6460 5710 5408 5066 4936 4895
## 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001
## 5010 4998 5512 6258 7429 8974 10760 13535 20636 25960 24256 20964 16457
## 2002
## 6232
ggplot(dane , aes(x=factor(Year_Birth), fill=factor(Year_Birth))) +
geom_bar() +
theme(legend.position="none")
SKALA ILORAZOWA
age
mean(dane$Age)
## [1] NA
ggplot(dane, aes(x=Age)) +
geom_histogram(color="white", fill="darkgrey")
##
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 18 rows containing non-finite values (`stat_bin()`).
ZADANIE 1
Określ skale pomiarowe dla wszystkich zmiennych w zbiorze. Zwizualizuj je.
PRZEKSZTAŁCANIE SKAL POMIAROWYCH
SKALA ILORAZOWA NA SKALĘ PORZĄDKOWĄ
dane$age_1 <- recode(dane$Age, "18:24 ='<25'; 25:35= '25-35' ; 36:46='36-46' ; ;else = '>46'")
table(dane$age_1)
##
## <25 >46 25-35 36-46
## 93864 115899 92936 78410
ZADANIE
Zmień skalę pomiarową dla zmiennej “Region_Code”.
PODSTAWOWE STATYSTYKI
summary(dane)
## Gender Age Driving_License Region_Code
## Length:381109 Min. :20.00 Min. :0.0000 Min. : 0.00
## Class :character 1st Qu.:25.00 1st Qu.:1.0000 1st Qu.:15.00
## Mode :character Median :36.00 Median :1.0000 Median :28.00
## Mean :38.82 Mean :0.9979 Mean :26.39
## 3rd Qu.:49.00 3rd Qu.:1.0000 3rd Qu.:35.00
## Max. :85.00 Max. :1.0000 Max. :52.00
## NA's :18
## Previously_Insured Vehicle_Age Vehicle_Damage Annual_Premium
## Min. :0.0000 Length:381109 Length:381109 Min. : 2630
## 1st Qu.:0.0000 Class :character Class :character 1st Qu.: 24405
## Median :0.0000 Mode :character Mode :character Median : 31668
## Mean :0.4582 Mean : 30564
## 3rd Qu.:1.0000 3rd Qu.: 39400
## Max. :1.0000 Max. :540165
## NA's :17
## Policy_Sales_Channel Vintage Response Year_Birth
## Min. : 1 Min. : 10.0 Min. :0.0000 Min. :1937
## 1st Qu.: 29 1st Qu.: 82.0 1st Qu.:0.0000 1st Qu.:1973
## Median :133 Median :154.0 Median :0.0000 Median :1986
## Mean :112 Mean :154.3 Mean :0.1226 Mean :1983
## 3rd Qu.:152 3rd Qu.:227.0 3rd Qu.:0.0000 3rd Qu.:1997
## Max. :163 Max. :299.0 Max. :1.0000 Max. :2002
## NA's :3
## age_1
## Length:381109
## Class :character
## Mode :character
##
##
##
##
IMPUTACJE DANYCH
Analiza braków danych
dane<-as.data.frame(dane)
head(dane,10)
## Gender Age Driving_License Region_Code Previously_Insured Vehicle_Age
## 1 Male 44 1 28 0 > 2 Years
## 2 Male 76 1 3 0 1-2 Year
## 3 Male 47 1 28 0 > 2 Years
## 4 Male 21 1 11 1 < 1 Year
## 5 Female NA 1 41 1 < 1 Year
## 6 Female 24 1 33 0 < 1 Year
## 7 Male 23 1 11 0 < 1 Year
## 8 Female 56 1 28 0 1-2 Year
## 9 Female 24 1 3 1 < 1 Year
## 10 Female 32 1 6 1 < 1 Year
## Vehicle_Damage Annual_Premium Policy_Sales_Channel Vintage Response
## 1 Yes 40454 26 217 1
## 2 No 33536 26 183 0
## 3 Yes 38294 26 27 1
## 4 No 28619 152 203 0
## 5 No 27496 152 39 0
## 6 Yes 2630 160 176 0
## 7 Yes 23367 152 249 0
## 8 Yes 32031 26 72 1
## 9 No 27619 NA 28 0
## 10 No 28771 NA 80 0
## Year_Birth age_1
## 1 1978 36-46
## 2 1946 >46
## 3 1975 >46
## 4 2001 <25
## 5 1993 >46
## 6 1998 <25
## 7 1999 <25
## 8 1966 >46
## 9 1998 <25
## 10 1990 25-35
plot_missing<-aggr(dane, col=c('darkgrey','tomato'),
numbers=TRUE, sortVars=TRUE,
labels=names(dane), cex.axis=0.6,
cex.lab=1.5,
gap=1, ylab=c('Braki',"Wzór braków"))
##
## Variables sorted by number of missings:
## Variable Count
## Age 4.723058e-05
## Annual_Premium 4.460666e-05
## Policy_Sales_Channel 7.871764e-06
## Gender 0.000000e+00
## Driving_License 0.000000e+00
## Region_Code 0.000000e+00
## Previously_Insured 0.000000e+00
## Vehicle_Age 0.000000e+00
## Vehicle_Damage 0.000000e+00
## Vintage 0.000000e+00
## Response 0.000000e+00
## Year_Birth 0.000000e+00
## age_1 0.000000e+00
summary(aggr(dane, plot=FALSE))
##
## Missings per variable:
## Variable Count
## Gender 0
## Age 18
## Driving_License 0
## Region_Code 0
## Previously_Insured 0
## Vehicle_Age 0
## Vehicle_Damage 0
## Annual_Premium 17
## Policy_Sales_Channel 3
## Vintage 0
## Response 0
## Year_Birth 0
## age_1 0
##
## Missings in combinations of variables:
## Combinations Count Percent
## 0:0:0:0:0:0:0:0:0:0:0:0:0 381071 9.999003e+01
## 0:0:0:0:0:0:0:0:1:0:0:0:0 3 7.871764e-04
## 0:0:0:0:0:0:0:1:0:0:0:0:0 17 4.460666e-03
## 0:1:0:0:0:0:0:0:0:0:0:0:0 18 4.723058e-03
Imputacja
Zmienna “age”
Średnia arytmetyczna
dane$Age<-as.numeric(dane$Age)
dane<-dane%>%
mutate(age3=if_else(is.na(Age), mean(Age,na.rm = T), Age))
Mediana
dane<-dane%>%
mutate(age3=if_else(is.na(Age), median(Age,na.rm = T), Age))
ZADANIE 2
Sprawdź podstawowe statytyki po imputacji. Co się zmieniło?
ZADANIE 3
Proszę dokonać imputacji zmiennej “Annual_Premium” za pomocą średniej i mediany. Jak zmieni się rozkład zmiennej?
TRANSFORMACJE
http://keii.ue.wroc.pl/przeglad/Rok%202014/Zeszyt%204/2014_61_4_363-372.pdf
SKALA ILORAZOWA:
-PRZEKSZTAŁCENIA ILORAZOWE
-ISTNIEJE ABSOLUTNY PUNKT ZEROWY
SKALI PRZEDZIAŁOWA BĄDŹ PRZEDZIAŁOWA I ILORAZOWA
## Warning: pakiet 'clusterSim' został zbudowany w wersji R 4.1.3
## Ładowanie wymaganego pakietu: cluster
## Ładowanie wymaganego pakietu: MASS
##
## Dołączanie pakietu: 'MASS'
## Następujący obiekt został zakryty z 'package:dplyr':
##
## select
PRZEKSZTAŁCENIA ILORAZOWE
ANALIZA WARTOŚCI SKRAJNYCH
library(gridExtra)
##
## Dołączanie pakietu: 'gridExtra'
## Następujący obiekt został zakryty z 'package:dplyr':
##
## combine
x = c(10,4,6,8,9,8,7,6,12,14,11,9,8,4,5,10,14,12,15,7,10,14,24,28)
# histogram, Q-Q plot i boxplot
par(mfrow = c(1, 3))
hist(x, main = "Histogram")
boxplot(x, main = "Boxplot")
qqnorm(x, main = "Normal Q-Q plot") # wykres kwartyl-kwartyl
# średnia i odchylenie standardowe
mean = mean(x)
std = sd(x)
# wykorzystanie reguły 3 odchyleń
Tmin = mean-(3*std)
Tmax = mean+(3*std)
# znalezienie outliersów - wartości skrajnych
x[which(x < Tmin | x > Tmax)]
## [1] 28
# wyrzucenie wartości skrajnych
x[which(x > Tmin & x < Tmax)]
## [1] 10 4 6 8 9 8 7 6 12 14 11 9 8 4 5 10 14 12 15 7 10 14 24
Mediana i odchylenie medianowe
# dane
x = c(10,4,6,8,9,8,7,6,12,14,11,9,8,4,5,10,14,12,15,7,10,14,24,28)
# mediana
med = median(x)
# odchyelnie od mediany dla każej wartości z bazy danych
abs_dev = abs(x-med)
# odchylenie medianowe
mad = 1.4826 * median(abs_dev)
Tmin = med-(3*mad)
Tmax = med+(3*mad)
# znalezienie wartości skrajnych
x[which(x < Tmin | x > Tmax)]
## [1] 24 28
# usunięcie wartości skrajnych
x[which(x > Tmin & x < Tmax)]
## [1] 10 4 6 8 9 8 7 6 12 14 11 9 8 4 5 10 14 12 15 7 10 14
The interquartile range (IQR)
boxplot(x, horizontal = TRUE)
x = c(10,4,6,8,9,8,7,6,12,14,11,9,8,4,5,10,14,12,15,7,10,14,24,28)
# statystyki opisowe, podstawowe
summary(x)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.00 7.00 9.50 10.62 12.50 28.00
# IQR
IQR(x)
## [1] 5.5
#
Tmin = 7-(1.5*5.5)
Tmax = 12.50+(1.5*5.5)
# znalezienie wartości skrajnych
x[which(x < Tmin | x > Tmax)]
## [1] 24 28
# remove outlier
x[which(x > Tmin & x < Tmax)]
## [1] 10 4 6 8 9 8 7 6 12 14 11 9 8 4 5 10 14 12 15 7 10 14
TESTY STATYSTYCZNE: IDENTYFIKACJA WARTOŚCI SKARJNYCH, NIETYPOWYCH
Testy statystyczne ukazane poniżej mogą zostać użyte wowczas, gdy dane są aproksymowane do rozkładu normalnego.
Dixon’s Q Test
Dla wartości największych:
H0: Największa wartość nie jest wartością skrajną
H1: Największa wartość jest wartością skrajną
library(outliers)
## Warning: pakiet 'outliers' został zbudowany w wersji R 4.1.3
x = c(10,4,6,8,9,8,7,6,12,14,11,9,8,4,5,10,14,12,15,7,10,14,24,28)
dixon.test(x)
##
## Dixon test for outliers
##
## data: x
## Q = 0.56522, p-value < 2.2e-16
## alternative hypothesis: highest value 28 is an outlier
p-value < 2.2e-16 statystycznie istotne, zatem odrzucamy hipotezę zerową na rzecz alternatywnej, mówiącej,że 28 jest wartością skrajną
Dla wartości najmniejszych:
H0: Najmniejsza wartość nie jest wartością skrajną
H1: Najmniejsza wartość jest wartością skrajną
dixon.test(x, opposite = TRUE)
##
## Dixon test for outliers
##
## data: x
## Q = 0.090909, p-value = 0.2841
## alternative hypothesis: lowest value 4 is an outlier
p-value =0.2841 statystycznie nieistotne, zatem nie odrzucamy hipotezy zerowej mówiącej , że 4 nie jest wartością skrajną
Grubb’s Test
library(outliers)
x = c(10,4,6,8,9,8,7,6,12,14,11,9,8,4,5,10,14,12,15,7,10,14,24,28)
grubbs.test(x)
##
## Grubbs test for one outlier
##
## data: x
## G = 3.0354, U = 0.5820, p-value = 0.007692
## alternative hypothesis: highest value 28 is an outlier
p-value= 0.007692 , statystycznie istotne, zatem odrzucamy hipotezę zerową na rzecz alternatywnej, mówiącej, że 28 jest wartością skrajną
grubbs.test(x, opposite = TRUE)
##
## Grubbs test for one outlier
##
## data: x
## G = 1.15737, U = 0.93923, p-value = 1
## alternative hypothesis: lowest value 4 is an outlier
p-value=1, statystycznie nieistotne, zatem nie odrzucamy hipotezy zerowej mówiące, że 4 jest wartością skrajną
Rosner’s test
H0: Nie wystepują wartosci skrajne w zbiorze
H1: W zbiorze występuje k wartości skrajnych
library(EnvStats)
## Warning: pakiet 'EnvStats' został zbudowany w wersji R 4.1.3
##
## Dołączanie pakietu: 'EnvStats'
## Następujący obiekt został zakryty z 'package:MASS':
##
## boxcox
## Następujący obiekt został zakryty z 'package:car':
##
## qqPlot
## Następujące obiekty zostały zakryte z 'package:stats':
##
## predict, predict.lm
## Następujący obiekt został zakryty z 'package:base':
##
## print.default
# parameter k mówi ile potencjalnych wartości skrajnych wystepuje w zbiorze
# default k = 3
rosnerTest(x, k = 3)$all.stats
## Warning in rosnerTest(x, k = 3): The true Type I error may be larger than
## assumed. See the help file for 'rosnerTest' for a table with information on the
## estimated Type I error level.
## i Mean.i SD.i Value Obs.Num R.i+1 lambda.i+1 Outlier
## 1 0 10.625000 5.724186 28 24 3.035366 2.801551 TRUE
## 2 1 9.869565 4.465060 24 23 3.164669 2.780277 TRUE
## 3 2 9.227273 3.308457 15 19 1.744840 2.757735 FALSE
WYBÓR ZMIENNYCH DO BADANIA
ANALIZA KORELACJI
#cor(baza)
PRZY KORELACJI 0,9 MOŻEMY STRACIC NAWET DO 20% INFORMACJI.
ANALIZA WARIANCJI
WYBÓR JENOSTEK DO BADANIA
https://medium.com/analytics-vidhya/sampling-methods-in-r-b3c92e580c57
LOSOWANIE PROSTE
los_1=sample(length(dane$Gender),10)
sample(c('red','green'),10,replace=T,prob=c(0.6,0.4))
## [1] "red" "red" "red" "red" "green" "green" "green" "red" "red"
## [10] "red"
LOSOWANIE SYSTEMATYCZNE
library(TeachingSampling)
## Warning: pakiet 'TeachingSampling' został zbudowany w wersji R 4.1.3
## Ładowanie wymaganego pakietu: magrittr
## Warning: pakiet 'magrittr' został zbudowany w wersji R 4.1.3
P <- c("Mon-8", "Tues-4", "Wed-4", "Thurs-6", "Fri-7","Sat-45","Sun-34","Mon-21", "Tues-11","Wed-34","Thurs-16","Fri-10","Sat-17","Sun-19")
#losuj systematycznie co drugi elementz 14 elementów
systematic_sample <- S.SY(14,2)
systematic_sample
## [,1]
## [1,] 2
## [2,] 4
## [3,] 6
## [4,] 8
## [5,] 10
## [6,] 12
## [7,] 14
P[systematic_sample]
## [1] "Tues-4" "Thurs-6" "Sat-45" "Mon-21" "Wed-34" "Fri-10" "Sun-19"
systematic_sample <- S.SY(length(dane$Gender),2)
head(dane[systematic_sample,],10)
## Gender Age Driving_License Region_Code Previously_Insured Vehicle_Age
## 2 Male 76 1 3 0 1-2 Year
## 4 Male 21 1 11 1 < 1 Year
## 6 Female 24 1 33 0 < 1 Year
## 8 Female 56 1 28 0 1-2 Year
## 10 Female 32 1 6 1 < 1 Year
## 12 Female 24 1 50 1 < 1 Year
## 14 Male 76 1 28 0 1-2 Year
## 16 Male 37 1 6 0
## 18 Female 25 1 35 1
## 20 Female 60 1 33 0 1-2 Year
## Vehicle_Damage Annual_Premium Policy_Sales_Channel Vintage Response
## 2 No 33536 26 183 0
## 4 No 28619 152 203 0
## 6 Yes 2630 160 176 0
## 8 Yes 32031 26 72 1
## 10 No 28771 NA 80 0
## 12 No 48699 152 289 0
## 14 Yes 36770 13 15 0
## 16 Yes 2630 156 147 1
## 18 No 46622 152 299 0
## 20 Yes NA 124 102 1
## Year_Birth age_1 age3
## 2 1946 >46 76
## 4 2001 <25 21
## 6 1998 <25 24
## 8 1966 >46 56
## 10 1990 25-35 32
## 12 1998 <25 24
## 14 1946 >46 76
## 16 1985 36-46 37
## 18 1997 25-35 25
## 20 1962 >46 60
LOSOWANIE WARSTWOWE
library(dplyr)
# losuje po 3 rekordy z każdej kategorii
set.seed(1)
dane %>%
group_by (Gender) %>%
sample_n(., 3)
## # A tibble: 9 x 14
## # Groups: Gender [3]
## Gender Age Driving_License Region_Code Previously_Insured Vehicle_Age
## <chr> <dbl> <int> <int> <int> <chr>
## 1 "" 26 1 8 1 < 1 Year
## 2 "" 26 1 8 1 < 1 Year
## 3 "" 54 1 28 1 1-2 Year
## 4 "Female" 58 1 18 0 1-2 Year
## 5 "Female" 42 1 28 0 1-2 Year
## 6 "Female" 58 1 28 0 1-2 Year
## 7 "Male" 26 1 6 1 < 1 Year
## 8 "Male" 53 1 24 1 1-2 Year
## 9 "Male" 77 1 28 0 1-2 Year
## # i 8 more variables: Vehicle_Damage <chr>, Annual_Premium <int>,
## # Policy_Sales_Channel <int>, Vintage <int>, Response <int>,
## # Year_Birth <int>, age_1 <chr>, age3 <dbl>
library(sampling)
## Warning: pakiet 'sampling' został zbudowany w wersji R 4.1.3
stratas = strata(dane, c("Gender"),size = c(5,3,3), method = "srswor")
stratas
## Gender ID_unit Prob Stratum
## 15214 Male 15214 2.426160e-05 1
## 25773 Male 25773 2.426160e-05 1
## 46874 Male 46874 2.426160e-05 1
## 215581 Male 215581 2.426160e-05 1
## 241510 Male 241510 2.426160e-05 1
## 48487 Female 48487 1.714109e-05 2
## 197067 Female 197067 1.714109e-05 2
## 228099 Female 228099 1.714109e-05 2
## 385 385 7.500000e-01 3
## 421 421 7.500000e-01 3
## 428 428 7.500000e-01 3