Uvoz podatkov
podatki <- read.table("./UE.csv", #Read.table - preberemo csv datoteko (tukaj moraš vedet kaj pomeni header...vse)
header = TRUE,
sep = ";",
dec = ",")
head(podatki) #head - prikazemo prvih 6 vrstic tabele s podatki...tail je pa zadnji 6 vrstic...ce bi jih rad pokazal 10 daš head(podatki,10)
## ID Rezultat Pisanje
## 1 1 50 120
## 2 2 48 120
## 3 3 48 90
## 4 4 47 50
## 5 5 52 70
## 6 6 50 120
str(podatki[ , -1]) #str. - pogledamo kašna je naša tabela ?...31...rezultat pa pisanje sta notri...z minu ena smo dosegli da smo odstranili ID
## 'data.frame': 31 obs. of 2 variables:
## $ Rezultat: int 50 48 48 47 52 50 50 54 57 50 ...
## $ Pisanje : int 120 120 90 50 70 120 120 65 95 100 ...
Ocenjevanje parametrov
#install.packages("psych")
library(psych)
describe(podatki[ , -1])
## vars n mean sd median trimmed mad min max range skew kurtosis se
## Rezultat 1 31 66.23 28.84 60 63.24 17.79 20 189 169 2.32 8.00 5.18
## Pisanje 2 31 91.58 25.73 95 94.76 37.06 15 120 105 -0.92 0.61 4.62
#install.packages("pastecs")
library(pastecs)
round(stat.desc(podatki[ , -1]), 2) #Kaj je bila mediana časa pisanja? 95.00...polovica jih je pisala do vključno 95min, preostala polovica pa dlje...katera spremenljivka (rezultat ali pisanje)ima večjo variabilnost? odgovor je rezultat...gledal so standardno deviacijo..rezultat je v točkah, pisanje je v minutah...ne mores primerat ker so druge enote...edino kar smes primerjat je koeficient variacije...večja kot je številka večja je variabilost...praviln odgovor je rezultat ker ima večji koeficient variacije
## Rezultat Pisanje
## nbr.val 31.00 31.00
## nbr.null 0.00 0.00
## nbr.na 0.00 0.00
## min 20.00 15.00
## max 189.00 120.00
## range 169.00 105.00
## sum 2053.00 2839.00
## median 60.00 95.00
## mean 66.23 91.58
## SE.mean 5.18 4.62
## CI.mean.0.95 10.58 9.44
## var 831.91 662.05
## std.dev 28.84 25.73
## coef.var 0.44 0.28
summary(podatki[ , -1])
## Rezultat Pisanje
## Min. : 20.00 Min. : 15.00
## 1st Qu.: 50.00 1st Qu.: 77.50
## Median : 60.00 Median : 95.00
## Mean : 66.23 Mean : 91.58
## 3rd Qu.: 75.00 3rd Qu.:115.00
## Max. :189.00 Max. :120.00
sapply(podatki[ , -1], FUN = mean) #s to funkcijo lahko za vse spremljivke, ki jih imam v tabeli zračunam nek poljuben parameter...v temu primeri za obe spremeljivki izračunam mean
## Rezultat Pisanje
## 66.22581 91.58065
mean(podatki$Rezultat) #ocenimo povprečje za konkretno spremljivko, za rezultat, ki je shranjen v tabeli, ki se imenuje podatki
## [1] 66.22581
#install.packages("modeest")
library(modeest)
## Registered S3 method overwritten by 'rmutil':
## method from
## plot.residuals psych
mlv(podatki$Rezultat) #mlv pomeni most likely value , ce zelis uporabit rabiš knjižnico modeest...50 razložimo najbolj pogosto doseženo število točk na izpitu je znašalo 50 pik...modus,najpogostejša vrednost
## [1] 50
#s histogramom lahko naredimo neko začetno opisno- grafično analizo...
#na začetku funkcije poveš spremljivko, ki jo rišeš, main - naslov, x in y lab je poimenovanje, breaks določimo širine teh stolpec (seq pomeni zaporedje od 0 do 200 by 10 torej širina vsakega je 10)...col= smo določili blue barvo histograma
hist(podatki$Rezultat,
main = "Porazdelitev dosezenih tock na izpitu UE",
xlab = "Točke",
ylab = "Frekvenca",
col= "blue",
breaks = seq(from = 0, to = 200, by = 10))

Normalna porazdelitev
pnorm(80, mean = 62.13, sd = 17.99,
lower.tail = FALSE)
## [1] 0.1602747
mean = 62.13; sd = 17.99
lb = 80; ub = Inf
x <- seq(-4,4,length=100)*sd + mean
hx <- dnorm(x,mean,sd)
plot(x, hx, type="n", xlab="Točke", ylab="",
main="", axes=FALSE)
i <- x >= lb & x <= ub
lines(x, hx)
polygon(c(lb,x[i],ub), c(0,hx[i],0), col="blue")
area <- pnorm(ub, mean, sd) - pnorm(lb, mean, sd)
result <- paste("P(",lb,"< Točke <",ub,") =",
signif(area, digits=3))
mtext(result,3)
axis(1, at=seq(0, 100, 20), pos=0)

Intervalna ocena
ybar = mean(podatki$Rezultat); sd = sd(podatki$Rezultat); n = nrow(podatki)
se = sd/sqrt(n)
ybar_spodnja_z = ybar + qnorm(0.025)*se
ybar_zgornja_z = ybar + qnorm(0.975)*se
cat(c("95-odstotna intervalna ocena:", round(ybar_spodnja_z, 3), "< Mu <", round(ybar_zgornja_z, 3)))
## 95-odstotna intervalna ocena: 56.073 < Mu < 76.379
ybar = mean(podatki$Rezultat); sd = sd(podatki$Rezultat); n = nrow(podatki)
se=sd/sqrt(n)
ybar_spodnja_t = ybar + qt(0.025, df=n-1)*se
ybar_zgornja_t = ybar + qt(0.975, df=n-1)*se
cat(c("95-odstotna intervalna ocena:", round(ybar_spodnja_t, 3), "< Mu <", round(ybar_zgornja_t, 3)))
## 95-odstotna intervalna ocena: 55.646 < Mu < 76.805
Graf kvantilov
#zdej smo gledali histogram in vidis da je ena enota malo cudna...un ki je cist desno stoplec...po slovensko se boxplotu rece grafikon kvantilov?...kaj je spodna crta pod rezulati?- je minumum, zgornja črta je maksimum recimo maksimalo stevilo točk...spodn del skaltle je prvi kvartil je priblizno 50 pik, tretji kvartil je zgornji del skatle recimo 70 pik,odebeljena crta v skatli pa je mediana je drugi kvartil
#mediana pisanja je bila približno 100 minut
#imamo se neke krogce, to so outlayerji oziroma osamelci
#spodaj napišemo kodo kako bi unga osamelca k je 189 spremnil v 89
boxplot(podatki[ , -1])

podatki [31,2]<- 89
boxplot(podatki[ , -1])

#oseba ki je oddala po 15 min je še zmeraj problematična (pod desno skatlo spodaj, še vedno je nek osamelce)
Čiščenje podatkov
podatki <- read.table("./UE.csv",
header = TRUE,
sep = ";",
dec = ",")
head(podatki)
## ID Rezultat Pisanje
## 1 1 50 120
## 2 2 48 120
## 3 3 48 90
## 4 4 47 50
## 5 5 52 70
## 6 6 50 120
tail(podatki)
## ID Rezultat Pisanje
## 26 26 74 95
## 27 27 74 95
## 28 28 76 120
## 29 29 44 45
## 30 30 52 92
## 31 31 189 110
boxplot(podatki[ , -1])

library(psych)
describe(podatki[ , -1])
## vars n mean sd median trimmed mad min max range skew kurtosis se
## Rezultat 1 31 66.23 28.84 60 63.24 17.79 20 189 169 2.32 8.00 5.18
## Pisanje 2 31 91.58 25.73 95 94.76 37.06 15 120 105 -0.92 0.61 4.62
head(podatki[order(-podatki$Rezultat), ])
## ID Rezultat Pisanje
## 31 31 189 110
## 24 24 95 120
## 16 16 92 120
## 23 23 92 120
## 22 22 85 90
## 15 15 80 95
podatki_novi <- podatki[-31, ]
#odstranili smo zadnjega študenta, 31. vrstico smo odstranili iz tabele s podatki
podatki[31, 2] <- 89
head(podatki[order(-podatki$Rezultat), ])
## ID Rezultat Pisanje
## 24 24 95 120
## 16 16 92 120
## 23 23 92 120
## 31 31 89 110
## 22 22 85 90
## 15 15 80 95
boxplot(podatki[ , -1])

library(psych)
describe(podatki[ , -1])
## vars n mean sd median trimmed mad min max range skew kurtosis se
## Rezultat 1 31 63.00 18.33 60 63.12 17.79 20 95 75 -0.07 -0.66 3.29
## Pisanje 2 31 91.58 25.73 95 94.76 37.06 15 120 105 -0.92 0.61 4.62
print(podatki)
## ID Rezultat Pisanje
## 1 1 50 120
## 2 2 48 120
## 3 3 48 90
## 4 4 47 50
## 5 5 52 70
## 6 6 50 120
## 7 7 50 120
## 8 8 54 65
## 9 9 57 95
## 10 10 50 100
## 11 11 60 70
## 12 12 68 85
## 13 13 72 95
## 14 14 72 89
## 15 15 80 95
## 16 16 92 120
## 17 17 55 68
## 18 18 32 100
## 19 19 20 15
## 20 20 65 70
## 21 21 80 110
## 22 22 85 90
## 23 23 92 120
## 24 24 95 120
## 25 25 70 85
## 26 26 74 95
## 27 27 74 95
## 28 28 76 120
## 29 29 44 45
## 30 30 52 92
## 31 31 89 110
#radi bi razvrstili podatke po rezultatu, kako razporedim tabelo po narascujocem/padajocem
#poklices podatke, das oglati oklepaj, razvrščam jih po vrsticah, po rezultatu zat ukaz napišem pred vejico...zdej bomo dobil od najslabšega gor...kako bi pa naredili da bi blo najvec pik prvo in potem dol?...v ukazu moram spremenit da spredaj napišem minus in sicer pri notranjem oklepaju (-podatki$Rezultat)
print(podatki[order(podatki$Rezultat), ])
## ID Rezultat Pisanje
## 19 19 20 15
## 18 18 32 100
## 29 29 44 45
## 4 4 47 50
## 2 2 48 120
## 3 3 48 90
## 1 1 50 120
## 6 6 50 120
## 7 7 50 120
## 10 10 50 100
## 5 5 52 70
## 30 30 52 92
## 8 8 54 65
## 17 17 55 68
## 9 9 57 95
## 11 11 60 70
## 20 20 65 70
## 12 12 68 85
## 25 25 70 85
## 13 13 72 95
## 14 14 72 89
## 26 26 74 95
## 27 27 74 95
## 28 28 76 120
## 15 15 80 95
## 21 21 80 110
## 22 22 85 90
## 31 31 89 110
## 16 16 92 120
## 23 23 92 120
## 24 24 95 120
print(podatki[order(-podatki$Rezultat), ])
## ID Rezultat Pisanje
## 24 24 95 120
## 16 16 92 120
## 23 23 92 120
## 31 31 89 110
## 22 22 85 90
## 15 15 80 95
## 21 21 80 110
## 28 28 76 120
## 26 26 74 95
## 27 27 74 95
## 13 13 72 95
## 14 14 72 89
## 25 25 70 85
## 12 12 68 85
## 20 20 65 70
## 11 11 60 70
## 9 9 57 95
## 17 17 55 68
## 8 8 54 65
## 5 5 52 70
## 30 30 52 92
## 1 1 50 120
## 6 6 50 120
## 7 7 50 120
## 10 10 50 100
## 2 2 48 120
## 3 3 48 90
## 4 4 47 50
## 29 29 44 45
## 18 18 32 100
## 19 19 20 15
print(podatki[order(-podatki$Rezultat, -podatki$Pisanje), ])
## ID Rezultat Pisanje
## 24 24 95 120
## 16 16 92 120
## 23 23 92 120
## 31 31 89 110
## 22 22 85 90
## 21 21 80 110
## 15 15 80 95
## 28 28 76 120
## 26 26 74 95
## 27 27 74 95
## 13 13 72 95
## 14 14 72 89
## 25 25 70 85
## 12 12 68 85
## 20 20 65 70
## 11 11 60 70
## 9 9 57 95
## 17 17 55 68
## 8 8 54 65
## 30 30 52 92
## 5 5 52 70
## 1 1 50 120
## 6 6 50 120
## 7 7 50 120
## 10 10 50 100
## 2 2 48 120
## 3 3 48 90
## 4 4 47 50
## 29 29 44 45
## 18 18 32 100
## 19 19 20 15
#prvo smo jih razdelili po rezultatu, potem pa še po pisanju