U smislu podataka kao primjera imamo na raspolaganju vise online baza. Podaci koji su koristeni u ovom primjeru raspolozivi su na http://www.statoo.com/DATA/PSI/
Vise nacina da se uradi ista stvar.
Napomenimo da mozemo importovati podake i preko menija
Koristicemo i attach() komandu sto i nije neophodno, ali je pozeljno
URL = "http://www.statoo.com/DATA/PSI/"
LawSchool = read.csv2(paste(URL, "LawSchool.csv", sep=""))
Lawschool = read.csv2("http://www.statoo.com/DATA/PSI/LawSchool.csv")
attach(LawSchool) #podaci su postali dio programskog okruzenje
Prije svega potrebno je temljno pregledati podatke. Uociti nedeostatke, te pristupiti korekciji isti.
Pogledajmo deskriptivnu statistiku, da bi sagledali podatke:
summary(LawSchool)
## LSAT GPA
## Min. :545.0 Min. :2.740
## 1st Qu.:573.5 1st Qu.:2.921
## Median :580.0 Median :3.070
## Mean :600.3 Mean :3.095
## 3rd Qu.:643.0 3rd Qu.:3.330
## Max. :666.0 Max. :3.440
#mogu i posebne komande
min(GPA)
## [1] 2.74
mean(GPA)
## [1] 3.094867
max(GPA)
## [1] 3.44
Bilo bi zgodno prilagoditi imena promjenljvih. Kako su nam sada nazvane promjenljive?
names(LawSchool)
## [1] "LSAT" "GPA"
Sada mozemo promjeniti imena. Prvo smo definisali vektor od stringova (laicki receno vektor koji se sastoji od rijecin).
names(LawSchool)<-c("Bodovi", "Ocjena")
names(Lawschool)<-c("Bodovi", "Ocjena")
attach(LawSchool)
Zasto opet attach()*?
Zelimo da sagledamo, upoznamo podatke. Ovaj skup podataka koji je krajnje jednostavan, medutim dimenzije realnih podataka mogu biti daleko vece.
Sta trazimo?
Zelimo da uocimo eventualne nedostatke vezane za skaliranje, koristenje odgovarajucih mjernih jedinica.
Interesuju nas netipicne vrijednost, odnosno esktremne vrijednosti (eng. outliers)
Histogram nam govori o frekvenciji, te vec pogledom mozemo vidjeti da li imamo netipicno veliku pojavnost odredene vrijednosti.
hist(Ocjena)
hist(Bodovi)
Koristimo LawSchool(=posmatrani skup podataka)$Ocjena(=promjenljiva iz dataseta) kada nismo koristili attach(), odnosno kada nismo inicijalno uvrstili posmatrani skup podataka u programsko okruzenje, u suprotnom bi dobili ispis “Error in hist(Ocjena) : object ‘Ocjena’ not found”
plot(LawSchool$Bodovi, LawSchool$Ocjena, xlab="Bodovi", ylab="Ocjena")
-stavimo tacke u boji…
plot(LawSchool$Bodovi, LawSchool$Ocjena, xlab="Bodovi", ylab="Ocjena",
pch=16, col="blue")
cor(LawSchool$Ocjena, LawSchool$Bodovi)
## [1] 0.7766166
cor(LawSchool$Bodovi, LawSchool$Ocjena)
## [1] 0.7766166
Osnovna komanda je lm, sa kojom su sustini formiramo objekat koji sadrzi rezultate vezane za model. Uvijek je peporucljivo koristiti domuntaciju odnosno, help(lm) ili ?lm
res.lm = lm(Ocjena ~ Bodovi, data=LawSchool)
Kako da vidimo rezultate? Najjednostavnije je sa:
summary(res.lm)
##
## Call:
## lm(formula = Ocjena ~ Bodovi, data = LawSchool)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.24059 -0.09037 0.03568 0.05425 0.40488
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.380036 0.612163 0.621 0.545457
## Bodovi 0.004523 0.001018 4.445 0.000661 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1591 on 13 degrees of freedom
## Multiple R-squared: 0.6031, Adjusted R-squared: 0.5726
## F-statistic: 19.76 on 1 and 13 DF, p-value: 0.0006609
Koeficijente vidimo sa:
coef(res.lm)
## (Intercept) Bodovi
## 0.380035548 0.004522708
odnosno:
res.lm$coefficients
## (Intercept) Bodovi
## 0.380035548 0.004522708
Pogledajmo regresionu liniju, koju dobijamo sa sljedecom komandom.
plot(LawSchool$Bodovi, LawSchool$Ocjena, xlab="Bodovi", ylab="Ocjena")
abline(res.lm)
Mozemo korigovati, prilagodavati sam grafikon. Mogucnosti su neogranicene, npr.
plot(LawSchool$Bodovi, LawSchool$Ocjena, xlab="Bodovi", ylab="Ocjena", pch=16, col="blue")
abline(res.lm, col="red")
text(640, 2.8, "Ocjena=0.38+0.004*Bodovi")
Kada ocijenimo parametre treba pogledati rezultate u okviru dodatnih analiza koji bi dali opravdanost konacnih zakljucaka. Pogledajmo reziduale, odnosno razliku izmedu vrijednosti koji leze na regresionoj liniji i konkretnih vrijednosti iz uzorka.
Prvi grafikon pokazuje neobicno velike/male vrijednosti(outliers) 1, 11, 12
Drugi grafikon je QQ-plot Neke info koje daje QQ grafikon: Vrijednosti na Y osi su konkretne vrijednost posmatrane promjenljive. Na X osi su vrijednosti predvidene vrijednosti. Izracun ovih predvidjenih vrijednosti polazi od pretpostavke da imamo Guassov terijski raspored, sa matematickim ocekvinjem i SD koje imamo iz posmatranih podataka.Podjemo od n percentila, a ne je broj konkretnih podataka iz uzorka. Dakle, imamo n jednako rasporedjenih percentila po Gausovoj distribuciji. Sta vidimo vrijednosti 1, 11, 12 se pojavljuju u repu (tail) distirbucije, ne prate noramlan raspored….Zelimo da su vrijednosti na ovom grafikonu na zamisljenoj ravnoj (kosoj) liniji.
Treci grafikon je skala-lokacija grafikon (skale-location). “Sirovi” reziduali su starndardizovni sa ocjenom njihove standardne devijacije.Ovdje zelimo da vidimo da li je rasprsenost reziduala konstantna u okviru definisanom svim vrijednostima odredenim regresionim modelom. Opet, uocavamo “trend” gdje su nize vrijednosti ispoljavaju vise varijabiliteta.
Cetvrti grafikon prikazuje standardizovane reziduale koji su stavljeni u odnos sa svakim pojedinacnim podatkom raspolozivim iz uzorka.Smisao je da vidimo koji podatak “ispoljava” najveci pojedinacni uticaj.Svojevrsni parametar u tom smislu je Kukova (Cook) linija (udaljenost). Sve sto je u okviru ove linije moze se smatrati bitnim. Polozaj pojedinih vrijednosti u odnosu na ovu linju, definise eventualnu mogucnot da se neka vrijednost iskljuci iz analize. U tom smislu, mozemo vidjeti kako bi izgledali rezultati kada bi iskljucili vrijednosti 1,11 i 12.
plot(LawSchool$Bodovi, resid(res.lm), xlab="Bodovi", ylab="Reziduali", pch=16)
abline(h=0, col="blue")
Dalja dijagnoza…. Napmenimo da ako zelimo da uklonimo LOESS linuju, dovoljno je da stavimo add.smooth = FALSE Po defoltu LOESS linije je naznacena.
plot(lm(Ocjena ~ Bodovi, data=LawSchool))