OSNOVE DELA S PROGRAMOM R

Informacije

Spletna stran, namestitev, dokumentacija

Dokumentacija na linuxu: /usr/share/doc/r-doc-html/manual .

Pomoč v R-ovem pozivniku:

Izvajanje programa

Iz pozivnika našega operacijskega sistema program zaženemo z ukazom R. Če ni določeno drugače, se znajdemo v R-ovem pozivniku.
Program lahko zaženemo z obilo opcijami. Njihov seznam izpiše ukaz R -h ali R --help (in nato takoj konča).
R ne zažene pozivnika in le izpiše rezultat, nakar konča, če mu na vhodu predpišemo ukazni niz. To pa je lahko:

Pri izvajanju R-a na ta način pride prav opcija --slave, ki izključi ves nenujni izhod.

Zadnjo vrnjeno vrednost dobimo z ukazom .Last.value.

Izhod iz programa dosežemo z ukazom q().

Aritmetika

Elementarne binarne operacije: +, -, *, / in ^ oziroma **

Elementarne funkcije: sqrt, exp, log, sin, cos, tan, asin, acos, atan

Konstanta: pi

Izpis na določeno število (n) signifikantnih decimalk: print(x, digits=n). Več o izpisovanju kasneje.

Zaokrožitvene funkcije: trunc, round, floor, ceiling

Fakulteta: factorial
Funkcija gama: gamma
Binomski simbol: choose(n, k) vrne n nad k.

Naključna števila: runif(1) vrne psevdonaključno število med 0 in 1 z enakomerno porazdelitvijo. Več o naključnih številih kasneje.

R pozna tudi kompleksna števila. Pred i mora stati število: imaginarno enoto torej dobimo z ukazom 1i. Bolj sofisticirane konstrukcije kompleksnih števil (npr. v polarni obliki) dobimo z ukazom complex. Operacije na kompleksnih številih:

Najosnovnejše o spremenljivkah

Prireditev: x <- nekaj  ali  nekaj -> x

Izbris: rm(x)  ali tudi  rm(x, y).

Ukaz ls vrne seznam vseh simbolov, ki so trenutno definirani, razen tistih, katerih imena se začenjajo s piko. Če želimo vključiti še te, vnesemo ls(all=TRUE).
Ukaz rm(list=ls(all=TRUE)) izbriše vse trenutno definirane simbole.

Osnovni podatkovni tipi:

Uporabnikove funkcije

Anonimna funkcija: function(parametri) { telo }
Funkcija z imenom: ime <- function(parametri) { telo }

Ukaz plot(funkcija, sp. meja, zg. meja) nariše graf funkcije.

Numerično računanje

uniroot(f, c(a, b)) vrne ničlo zvezne funkcije f na intervalu [a, b]. Vrednosti na krajiščih morata imeti nasproten predznak. Vselej vrne le eno ničlo.
Pravzaprav vrne celotno poročilo o ničli. Če želimo le ničlo, ukažemo: uniroot(f, c(a, b))$root.

integrate(f, a, b) numerično integrira funkcijo f od a do b.
TODA POZOR! integrate posreduje funkciji kar cel vektor!
Spet vrne celo poročilo, če želimo le vrednost, ukažemo: integrate(f, a, b)$value.

Podatkovne strukture

Vektorji

Primer konstrukcije vektorja: c(7, 8, 9), kar da isto kot 7:9 ali seq(7, 9).
Pri ukazu seq lahko predpišemo tudi korak, recimo seq(70, 90, 10).
runif(n) vrne naključni vektor dolžine n. Več o tem kasneje.
Vektorje lahko tvorimo tudi iz nizov: x <- c("Merkur", "Venera", "Zemlja", "Mars", "Jupiter", "Saturn", "Uran", "Neptun").

Ukaz c tudi združuje vektorje.

Vektorje lahko obravnavamo tako kot množice.

POZOR! Vsi elementi v vektorju morajo biti istega tipa. Če so tipi različni, se nižji tipi pretvorijo v višje. Primeri:

Če ni določeno drugače, ukaz c izpusti vrednosti NULL.

Če lahko elemente vektorja primerjamo, lahko vektor sortiramo s funkcijo sort.

Z ukazom [ ... ] dobimo ven posamezne komponente vektorja. Natančneje, če je v vektor, ukaz v[i] deluje odvisno od narave objekta i na naslednji način:

Ponovitev elementa ali vektorja: rep(vrednost ali vektor, kolikokrat)

Ciklanje vektorja: rep(vektor, length.out=želena dolžina)

Obrat vektorja: rev(x) vrne vektor x od zadaj naprej.

Če je k naravno število:

Ukaz

plot(x) nariše točke, ki pripadajo koordinatam vektorja x.
To je isto kot plot(x, type="p"). Druge opcije za type:

Ukaz barplot(x) nariše vektor x v obliki lepega histograma.

Vse operacije, definirane na skalarjih, se na vektorjih izvajajo po komponentah. Če vektorja, ki nastopata kot argumenta dvomestne operacije, nimata iste dolžine, se krajši začne ciklati.
Tako npr. ukaz c(1, 2, 3, 4, 5, 6)*c(-10, 0, 10) vrne isto kot ukaz c(-10, 0, 30, -40, 0, 60).
Če dolžina daljšega ni večkratnik dolžine krajšega, se izda opozorilo.
To velja tudi za logične primerjave. Tako npr. ukaz as.numeric(seq(1, n) == k) vrne k-ti standardni bazni vektor standardnega n-razsežnega evklidskega prostora.

Matrike

Matriko:
123
456
789
101112
vnesemo z enim izmed naslednjih ukazov:

Preprost je tudi vnos diagonalnih matrik, npr. diag(3, nrow=5) ali diag(c(3, 2, 4, 5, 1)).

Priklic elementov matrike:

Ukaz c(A) ali as.vector(A) iz matrike A naredi dolg vektor, pri čemer združuje po stolpcih.

Vse aritmetične in logične operacije delujejo tudi na vektorjih in matrikah – po komponentah.
Tako A*B zmnoži matriki A in B po komponentah.
Ukaz A + 2 pa vrne matriko A, ki ima vse elemente povečane za 2.
Še en primer: v = c(0, 2, 3, -1, 4, 3, -2, 2); v[v >= 0] vrne isto kot c(0, 2, 3, 4).
Seveda lahko matrike in vektorje posredujemo tudi funkcijam.
Recimo (function(x) { x ** 3 + x })(0:3) vrne isto kot c(0, 2, 10, 30).

Matrične operacije:

Osnovna obdelava podatkov na vektorjih in matrikah:

Posredovanje funkcij po komponentah:

Tabele

Tabele imajo lahko poljubno mnogo dimenzij. Dobimo jih lahko iz vektorjev z ukazom:
array(vektor, dim=c(dimenzije)).

Z ukazom [ ... ] lahko podobno kot pri matrikah izluščimo poljubnodimenzionalne komponente tabele.

Vektorji, matrike in tabele z označenimi indeksi

Vektor z označenimi indeksi lahko dobimo z ukazom c(oznaka1 = vrednost1, oznaka2 = vrednost2, ... ).
Lahko pa konstruiramo tudi enodimenzionalno tabelo z ukazom array. Primer:
array(c(20, 50, 30), dimnames=list(c("prvi", "drugi", "tretji")))

Seveda nastavitev dimnames deluje za poljubnodimenzionalno tabelo. Deluje tudi pri ukazu matrix. Primer:
matrix(1:12, nrow=4, ncol=3, byrow=TRUE, dimnames=list(c("prva", "druga", "tretja", "cetrta"), c("prvi", "drugi", "tretji")))

Vrsticam in stolpcem lahko imena prirejamo ali spreminjamo tudi naknadno, recimo:
dimnames(x) <- list(c("prvi", "drugi", "tretji")).

POZOR! Vektor ni enodimenzionalna tabela, zato mu ne moremo prirejati nastavitve dimnames. Če želimo to, ga moramo najprej z ukazom array pretvoriti v enodimenzionalno tabelo.

Če ima tabela označene indekse, jih lahko uporabimo tudi znotraj oklepajev [ ... ]. Seveda pa lahko še vedno uporabimo tudi številke.

Oznake komponent upoštevata tudi ukaza plot in boxplot.

Zapisi

Zapisi so objekti, sestavljeni iz več komponent, ki so lahko različnih tipov. Komponentam bomo rekli rubrike.
Zapise konstruiramo z ukazom list. Primer:
nas_clovek <- list(ime="Janez", starost=35, zakonec="Marija", starosti_otrok=c(15, 13, 2)).

Posamezne rubrike dobimo z ukazom $, npr. nas_clovek$ime. Lahko uporabimo tudi nas_clovek[["ime"]]. Lahko priklicujemo nadaljnje komponente, npr. nas_clovek$starosti_otrok[2].

Z oglatimi oklepaji izluščimo del zapisa, npr. nas_clovek[ime] ali nas_clovek[c("ime", "starost")].

Imena rubrik dobimo in nastavljamo z ukazom names.

Kontingenčne tabele in vektorji s predpisanimi vrednostmi

Kontingenčne tabele so eno- ali dvodimenzionalne tabele z označenimi indeksi, elementi pa so števila. Dobimo jih lahko iz vektorjev z označenimi indeksi z ukazom as.table.

Ukaz table(vektor) pa iz vektorja naredi tabelo zastopanosti njegovih vrednosti. Le-te sortira po abecedi.

Če želimo vrednosti ali njihov vrstni red predpisati, uporabimo vektor s predpisanimi vrednostmi, ki ga dobimo z ukazom factor in nastavitvijo levels:
table(factor(vektor, levels=vrednosti)).

Pri vektorju s predpisanimi vrednosti so le-te vedno nizi. Navaden vektor dobimo nazaj z ukazom as.vector. POZOR! Ukaz c spremeni vrednosti v naravna števila!

Ukaz table(vektor1, vektor2) naredi dvodimenzionalno kontingenčno tabelo.

Tabele prav tako rišemo z ukazoma plot in barplot.

Če je t kontingenčna tabela, ukaza t[ ... ] in t[[ ... ]] delujeta podobno kot pri zapisih.

Preglednice

Preglednice so podobne dvodimenzionalnim tabelam – z razliko, da so lahko stolpci različnih tipov, zato jim bomo tudi tu rekli rubrike. V posamezni rubriki so bodisi sama števila bodisi sami nizi bodisi same logične vrednosti – tako kot pri vektorjih.
Preglednice konstruiramo z ukazom data.frame. Primer:
nasi_mozje <- data.frame(
  ime=c("Janez", "Franc", "Joze"),
  starost=c(35, 42, 55), zena=c("Marija", "Stefka", "Lojzka"), st_otrok=c(3, 2, 4)
)
.

Dostop do posameznih komponent je podoben kot pri matrikah – s tem, da:

Posamezne rubrike lahko podobno kot pri zapisih dobimo tudi z ukazoma $ in [[ ... ]].

Imena rubrik tudi tu dobimo in nastavljamo z ukazom names. Primer:
nase_zene < nasi_mozje[,c("zena", "starost", "ime", "st_otrok")]
names(nase_zene) <- c("ime", "starost", "moz", "st_otrok")

Osnove programiranja

R je močan programski jezik, ki podpira tudi objektno orientirano programiranje. Pišemo lahko kratke programčke v pozivniku, daljše programe pa lahko shranimo v datoteke.

Izvajanje programov, shranjenih v datotekah

Samostojne programe, shranjene v datotekah, lahko izvajamo na naslednje načine:

Pri prvih dveh načinih R izpiše celoten potek izvajanja programa. To mu lahko preprečimo z opcijo --slave.

Morebitne parametre iz ukazne vrstice dobimo z ukazom commandArgs(TRUE), ki vrne vektor iz pripadajočih nizov.

Vključevanje datotek iz pozivnika ali med izvajanjem programa

Pomožne programe lahko vključimo v R-ov pozivnik ali drugo programsko kodo z ukazom source.

Pregled nad delovnim imenikom (direktorijem):

Najosnovnejši programski ukazi

Posamezne stavke ločimo s podpičjem ali prehodom v novo vrstico. Slednje lahko storimo tudi znotraj oklepajev ali narekovajev.

Znak # označuje komentar: vsebina od tega znaka do konca vrstice se ignorira.

Za splošno izpisovanje uporabimo ukaz cat. Če mu podamo več argumentov ali vektor, jih loči s presledkom. To lahko spremenimo z nastavitvijo sep. V nasprotju z ukazom print ukaz sep ne zaključi vrstice. To dosežemo z nizom "\n". Primer:
cat(1:5, 10, sep=", "); cat("\n")

Zaviti oklepaji { ... } označujejo blok. Blok je ukaz, ki zaporedoma izvaja ukaze znotraj zavitih oklepajev in vrne vrednost zadnjega.

Krmilni stavki

Ukaz if(pogoj) izraz1 else izraz2 ali ifelse(pogoj, izraz1, izraz2) vrne izraz1, če je pogoj pravilen, sicer pa izraz2.
Pri prvi konstrukciji lahko del z else izpustimo. V tem primeru, če je pogoj napačen, dobimo vrednost NULL.

Zanke:

  • Ukaz for(spremenljivka in vektor) ukaz zaporedoma izvaja ukaz, pri čemer spremenljivki prireja vrednosti v vektorju.
  • Ukaz while(pogoj) ukaz izvaja ukaz, dokler je pogoj pravilen.
  • Ukaz repeat ukaz ponavlja izvajanje ukaza.
  • Ukaz break prekine izvajanje zanke.
  • Ukaz next prekine izvajanje tekočega cikla zanke.
Ukazi za zanke vrnejo izhod zadnjega izvedenega ukaza.

Nekaj več o funkcijah

Funkcije lahko sprejemajo izbirne argumente (opcije), ki jim predpišemo privzete vrednosti. To storimo v deklaraciji:
  function(parametri, opcija1=vrednost1, opcija2=vrednost2 ...)
Primer: Če deklariramo:
  f <- function(x, pristej=0) { x*x + pristej },
ukaz f(2) vrne 4, ukaz f(2, pristej=3) pa vrne 7.

Ukaz return(vrednost) prekine izvajanje funkcije in vrne predpisano vrednost.

Knjižnice z dodatnimi funkcijami

Ukaz library() vrne seznam knjižnic, ki so na voljo.
Ukaz library(knjižnica) naloži ustrezno knjižnico.

Vhod in izhod

Pisanje

Včasih želimo kaj izpisati še kako drugače, kot to stori R. Poleg tega R ne izpisuje avtomatično znotraj zank, ker pač le-te ne vračajo argumentov. Če želimo to, uporabimo ukaz print, ki izpiše vrednost, tako kot bi jo sicer izpisal R (z nekaj dodatnimi nastavitvami, kot je npr. digits).

Izpisovanje v osnovni obliki dosežemo z ukazom cat. Sprejme več argumentov, ki jih loči s presledkom. Ločitveni niz lahko spremenimo z nastavitvijo sep. Primeri:
  cat("bla", "ble", "bli")
  cat("bla", "ble", "bli", sep="*")
  cat("bla", "ble", "bli", "\n")
  cat("bla", "ble", "bli", sep="\n")
  cat("bla", "ble", "bli", sep="*\n")

POZOR! Če ločitveni niz vsebuje znak za novo vrstico, R slednjega avtomatično doda tudi na konec.

Ukaz paste deluje podobno kot cat, le da vrednost vrne, namesto da bi jo izpisal. Če mu kot argument podamo več nizov, vrne isto, kot bi izpisal cat, le da ne upošteva pravila o novi vrstici.

Ukazu paste pa lahko posredujemo tudi več vektorjev. V tem primeru vrne vektor, čigar i-to komponento sestavljajo vse i-te komponente podanih vektorjev, ločene z nizom, podanim s sep. Vektorje cikla.

Če ukazu paste predpišemo nastavitev collapse=niz, iz ustvarjenega vektorja naredi enoten niz, pri čemer komponente loči s predpisanim nizom. Primer: ukaz
  paste(c(1, 2, 3), c(4, 5, 6, 7), sep=" ", collapse="\n")
vrne "1 4\n2 5\n3 6\n1 7".

POZOR! Ukaza cat in paste se zelo razlikujeta, če ju kličemo z več vektorji. Drugačna je tudi obravnava določil sep in collapse:

  • Ukaz cat združi vektorje v enoten seznam, komponente so ločene z določilom sep. Če je prisotno tudi določilo collapse, ga obravnava tako, kot da bi bil to element seznama, dodan na konec.
  • Ukaz paste kombinira istoležne komponente vektorjev, tako kot je opisano zgoraj. Določilo sep velja za ločevanje med vektorji. Če določilo collapse ni prisotno, pusti rezultat v vektorski obliki, sicer pa vektor združi v niz, določilo collapse pa velja za ločevanje med komponentami.

Ukaz format je namenjen izpisovanju števil v predpisanem formatu (denimo na določeno število decimalk), deluje pa tudi za nize. Podobno kot paste tudi ukaz format ne izpisuje, temveč vrne niz.
Ena od mnogih nastavitev je justify, ki deluje za poravnavo nizov (možne vrednosti so "left", "right", "centre" in "none"). Števila pa so vedno poravnana desno. Primer: ukaz
  format(2/3, trim = TRUE, digits = 3, width = 6, justify = "left")
vrne " 0.667", ukaz:
  format(format(2/3, digits = 3), width = 6, justify = "left")
pa vrne "0.667 ".

POZOR!

  • Pri obratni poševnici je hrošč – šteje jo kot dva znaka.
  • Števila, manjša od 1/10000, vedno zapiše v znanstvenem formatu (npr. 3.96e-5).

Za formatiranje števil funkcija format kliče funkcijo prettyNum. Tam se da morda še kaj nastaviti.

Še nekaj ukazov za pisanje:

  • writeLines izpiše komponente podanega vektorja kot vrstice.
  • write.table izpiše preglednico.
  • write.csv izpiše preglednico v formatu csv.

Delo z datotekami

Pregled nad delovnim imenikom (direktorijem):

  • Ukaz getwd() vrne lokacijo imenika, kjer R bere in piše.
  • Ukaz setwd(imenik) nastavi lokacijo delovnega.
  • Ukaz list.files() vrne vsebino delovnega imenika – kot vektor. Lahko mu predpišemo obilo nastavitev.

Branje in pisanje navadno izvedemo tako, da ustreznemu ukazu predpišemo opcijo file. Če jo nastavimo na niz, to pomeni enkratno branje oz. pisanje na datoteko z danim imenom.
R pa podpira tudi postopno delo z datotekami. V tem primeru datoteko:

  • Najprej odpremo z ukazom file(datoteka, open = način). Tipične vrednosti načina so "r" (branje), "w" (pisanje) in "a" (dodajanje).
  • Funkcija file vrne kazalec na datoteko, ki ga podajamo pri opciji file.
  • Nazadnje datoteko zapremo z ukazom close(kazalec).
Primer: ukaz
  cat("blabla", file = "blabla.txt")
naredi isto kot zaporedje ukazov:
  bla <- file("blabla.txt", "w")
  cat("blabla", file = bla)
  close(bla)
.

Branje

Osnovni ukazi:

  • readChar(datoteka, n) prebere n znakov z datoteke in vrne prebrani niz.
  • readLines(datoteka) prebere datoteko in vrne vektor iz njenih vrstic.
  • scan(datoteka, what = tip) prebere datoteko in njeno vsebino interpretira kot seznam elementov predpisanega tipa, recimo "logical", "numeric", "character" ali "list". Rezultat je vektor.

Ukaz read.table prebere preglednico. Prva vrstica so glave, elementi v posamezni vrstici so ločeni s presledki, če imajo nizi presledke, jih damo v narekovaje. Posamezne glave morajo biti brez presledkov. Če ima npr. datoteka Preglednica.txt vsebino:
  Ime Prva Druga
  "Novak Janez" 5 35
  Jurak 3 37

ima ukaz:
  read.table("Preglednica.txt", header=TRUE)
isti rezultat kot:
  data.frame(
    Ime=factor(c("Novak Janez", "Jurak")),
    Prva=factor(c(5, 3))
    Druga=factor(c(35,37))
  )
.

Ukaz read.csv je namenjen branju preglednic v formatu csv.

Grafika

Osnovna funkcija je plot(), ki je zelo generična. Privzeto je, da ta funkcija ustvari novo stran za risanje. Tako lahko ustvarimo tudi prazno stran – s klicem:
  plot(c(xmin, xmax), c(ymin, ymax), type="n", axes=FALSE, ann=FALSE)
Če pa želimo novi element dodati obstoječi strani, damo določilo add=TRUE. A to ne deluje vedno, obstajajo pa alternative.

Klic plot(funkcija, spodnja meja, zgornja meja) nariše graf funkcije. Če je preveč nalomljen, povečamo določilo n (privzeta vrednost je n=101). Podobno deluje funkcija curve(), le da lahko namesto funkcije podamo tudi izraz v spremenljivki x (ali tudi v drugi spremenljivki, če nastavimo določilo xname). Funkciji ali izrazu se posreduje vektor - če torej funkcija vsebuje npr. stavek if, ne bo delovalo.

Klic plot(vektor koordinat x, vektor koordinat y, pch=znak, type=tip ...) nariše točke ali grafikon.

Nekaj najuporabnejših tipov:

typeoblika grafikona
"p"točke
"l"črte
"b"točke, povezane s črtami
"c"nepovezane črte
"o"točke in povezane črte
"h"navpičnice z abscisne osi (kot histogram)
"s"stopnice – najprej vodoravno, potem navpično
"S"stopnice – najprej navpično, potem vodoravno
"n"prazno

Nekaj najuporabnejših znakov:

pchznak
0  votel kvadrat
1  votel krog
2  votel trikotnik
3  plus
4  krat
5  diamant
6  na glavo obrnjen trikotnik
15  poln kvadrat
16  poln krog
17  poln trikotnik
20  manjši poln krog

Določilo add=TRUE pri tej obliki klica ne deluje, zato je treba dodajanje izvesti drugače. lahko uporabimo funkcijo lines() ali points().

Besedilo dodamo s funkcijo text().

Izvoz grafike

Datoteko najprej odpremo s klicem ustreznega gonilnika, npr. postscript(datoteka), pdf(datoteka), grDevices::cairo_ps(datoteka) ali grDevices::cairo_pdf(datoteka). Slednji gonilnik podpira tudi šumnike v UTF-8.
Nato kličemo ustrezne ukaze, npr. plot.
Nazadnje datoteko zapremo z ukazom dev.off().

Verjetnostne porazdelitve

Porazdelitve v R-u računamo z ukazom:
predpona+porazdelitev(vrednost, parametri).
Parametri so opcije ustrezne funkcije, t. j. oblike parameter=vrednost (glej spodaj).
Možne predpone so:

Primer: dbinom(3, size=10, prob=0.4) vrne P(X=3), kjer je slučajna spremenljivka X porazdeljena biniomsko Bi(10, 0.4).

Varianta za ‘d’:

Variante za ‘p’:

Najpogostejše diskretne porazdelitve:

Porazdelitev R-ovo ime Parametri
binomska binom size, prob
geometrijska geom prob
neg. binomska nbinom size, prob
Poissonova pois lambda
hipergeometrijska hyper m, n, k

Interpretacija parametrov pri hipergeometrijski porazdelitvi: iz posode, v katerih je m belih in n črnih kroglic, na slepo in brez vračanja izvlečemo k kroglic. Gledamo število belih kroglic med izvlečenimi. Z drugimi besedami, dhyper(x, m=m, n=n, k=k) vrne isto kot choose(m, x) * choose(n, k-x) / choose(m+n, k).

Najpogostejše zvezne porazdelitve:

Porazdelitev R-ovo ime Parametri
enakomerna unif min, max
normalna norm mean, sd
eksponentna exp rate
gama gamma shape, rate, scale
Cauchyjeva cauchy location, scale
Studentova t df, ncp
Fisherjeva f df1, df2, ncp

Določeni parametri imajo privzete vrednosti, npr. mean=0 in sd=1 pri normalni porazdelitvi. Prav tako so določeni povezani, npr. scale = 1/rate pri porazdelitvi gama.

Simulacije

Ukaz rporazdelitev(n) naredi vektor iz n realizacij slučajne spremenljivke z dano porazdelitvijo. Recimo funkcija runif ustreza funkciji rnd ali random iz mnogih programskih jezikov.

Vzorčenju je namenjen ukaz sample:

Dodatna možna nastavitev: prob za vektor verjetnosti, recimo:
sample(c("a", "e", "i"), 20, replace=TRUE, prob=c(0.2, 0.5, 0.4))

Isto naredi ukaz:
sample(c("a", "e", "i"), 20, replace=TRUE, prob=c(20, 50, 40)).

Statistično sklepanje

Verjetnost uspeha poskusa/delež v populaciji

Zanima nas verjetnost, da poskus uspe oziroma delež enot v populaciji z dano lastnostjo. To označimo s p. Izvedemo n poskusov, k jih uspe (oziroma vzamemo vzorec n enot in k jih ima iskano lastnost).

Interval zaupanja za p pri stopnji zaupanja β dobimo z ukazom:

binom.test(k, n, conf.level = β).

ali tudi:

binom.test(c(k, n - k), conf.level = β).

Hipotezo, da je p = p0, testiramo z ukazom:

binom.test(k, n, p = p0, alternative = "two.sided" ali "less" ali "greater").

Kot rezultat dobimo p-vrednost.

Privzeta vrednost za določilo p je 0.5.

Določilo alternative pove, kaj je alternativna hipoteza:
izbira "two.sided" ali "t" ali izpustitev določila pomeni, da alternativna hipoteza trdi p ≠ p0.
Izbira "less" ali "l" pomeni, da alternativna hipoteza trdi p < p0.
Izbira "greater" ali "g" pa pomeni, da alternativna hipoteza trdi p > p0.

Primerjava verjetnosti dveh poskusov/deležev v dveh populacijah

Testiramo ničelno hipotezo, da sta verjetnosti dveh različnih poskusov oziroma deleža enot z določeno lastnostjo v dveh različnih populacijah enaka. Označimo ju s p1 in p2.
Izvedemo n1 poskusov prve vrste, od katerih jih uspe k1, in n2 poskusov druge vrste, od katerih jih uspe k2. Ekvivalentno, vzamemo vzorec n1 enot iz prve populacije, izmed katerih jih ima k1 iskano lastnost, in vzorec n2 enot iz druge populacije, izmed katerih jih ima k2 našo lastnost. Test ničelne hipoteze p1 = p2 izvedemo z ukazom:

prop.test(c(k1, k2), c(n1,n2), alternative = "two.sided" ali "less" ali "greater").

Določilo alternative pove, kaj je alternativna hipoteza:
izbira "two.sided" ali "t" ali izpustitev določila pomeni, da alternativna hipoteza trdi p1 ≠ p2.
Izbira "less" ali "l" pomeni, da alternativna hipoteza trdi p1 < p2.
Izbira "greater" ali "g" pa pomeni, da alternativna hipoteza trdi p1 > p2.

Primerjava verjetnosti več poskusov/deležev več populacijah

Testiramo ničelno hipotezo, da so vse verjetnosti več različnih poskusov oziroma vsi deleži enot z določeno lastnostjo v več različnih populacijah enaki. Izvedemo poskuse oziroma iz vsake populacije vzamemo vzorec. Števila vseh poskusov posamezne vrste oziroma velikosti vzorcev iz posamezne populacije naj tvorijo vektor n, števila vseh uspelih poskusov posamezne vrste oziroma števila enot iz posamezne populacije z določeno lastnostjo pa vektor k. Test izvedemo z ukazom:

prop.test(k, n).

Populacijsko povprečje – T-test

Zanima nas povprečje spremenljivke na populaciji, kjer privzamemo, da ima (vsaj približno) normalno porazdelitev. Označimo ga z μ. Vzamemo vzorec, vrednosti spremenljivke na vzorcu naj tvorijo vektor v. Parameter v pa je lahko tudi kontingenčna tabela (recimo dobljena z ukazom as.table).

Interval zaupanja za μ pri stopnji zaupanja β dobimo z ukazom:

t.test(v, conf.level = β).

Hipotezo, da je μ = μ0, testiramo z ukazom:

t.test(v, alternative = "two.sided" ali "less" ali "greater", mu = μ0).

Privzeta vrednost določila mu je 0.

Določilo alternative pove, kaj je alternativna hipoteza:
izbira "two.sided" ali "t" ali izpustitev določila pomeni, da alternativna hipoteza trdi μμ0.
Izbira "less" ali "l" pomeni, da alternativna hipoteza trdi μ < μ0.
Izbira "greater" ali "g" pa pomeni, da alternativna hipoteza trdi μ > μ0.

Test mediane

Testiramo hipotezo, da ima dana urejenostna (ordinalna) spremenljivka na populaciji mediano μ0. To lahko izvedemo tudi na številskih spremenljivkah namesto T-testa, še posebej, če so njihove porazdelitve daleč od normalne. Vzamemo vzorec, vrednosti naše spremenljivke na vzorcu naj tvorijo vektor v. Obravnavali bomo dva možna testa.

Test z znaki. Pri tem testu je pomembno le, ali je dana vrednost večja, manjša ali enaka μ0, zato je njegova uporaba smiselna pri čistih urejenostnih spremenljivkah, ko ni določeno, kateri dve vrednosti imata isti odmik od μ0 navzgor in navzdol. Test se tako prevede na testiranje deleža in ga izvedemo z ukazom:

binom.test(sum(sapply(v, function(x) { x > μ0 })), sum(sapply(v, function(x) { x != μ0 })), alternative = "two.sided" ali "less" ali "greater").

Wilcoxonov test s predznačenimi rangi. Ta test izvedemo, če je določeno, kateri dve vrednosti imata isti odmik od μ0. Test izvedemo z ukazom:

wilcox.test(v, alternative = "two.sided" ali "less" ali "greater").

Primerjava porazdelitev dveh (približno) normalnih spremenljivk na isti populaciji – T-test

Ta primer se prevede na testiranja povprečja ene same spremenljivke, če obe spremenljivki odštejemo: če je količina tvori vektor v, druga pa vektor w, ukažemo:

t.test(v - w, alternative = "two.sided" ali "less" ali "greater").

Isto pa dosežemo tudi z ukazom:

t.test(v, w, paired = TRUE, alternative = "two.sided" ali "less" ali "greater").

Primerjava porazdelitev dveh urejenostnih spremenljivk na isti populaciji

Tukaj primerjamo spremenljivki, ki sta bodisi urejenostni ali pa ne moremo privzeti, da sta njuni porazdelitvi blizu normalne. Spet lahko uporabimo bodisi test z znaki bodisi test z rangi. Če sta v in w vektorja podatkov, test z znaki izvedemo z ukazom:

binom.test(sum(mapply(quote(">"), x, y)), sum(mapply(quote("!="), x, y)), alternative = "two.sided" ali "less" ali "greater").

test z rangi pa izvedemo z ukazom:

wilcox.test(v, w, paired = TRUE, alternative = "two.sided" ali "less" ali "greater").

Primerjava povprečij dveh spremenljivk na dveh populacijah – T-test

Testiramo hipotezo, da imata spremenljivki, definirani na različnih populacijah, enako povprečje, pri čemer privzamemo, da sta vsaj približno normalno porazdeljeni. Z drugimi besedami, če povprečji označimo z μ1 in μ2, ničelna hipoteza trdi, da je μ1 = μ2. Iz vsake populacije vzamemo vzorec, vrednosti na prvem naj tvorijo vektor v, vrednosti na drugem pa vektor w. Test izvedemo z ukazom:

t.test(v, w, alternative = "two.sided" ali "less" ali "greater").

Natančneje, ta ukaz izvede heteroskedastični T-test, ki ne privzame enakosti varianc. Če smemo privzeti, da sta varianci obeh spremenljivk enaki, izvedemo homoskedastični test:

t.test(v, w, var.equal = TRUE, alternative = "two.sided" ali "less" ali "greater").

Pomen določila alternative je tak kot ponavadi: izbira "two.sided" ali "t" ali izpustitev določila pomeni, da alternativna hipoteza trdi μ1μ2.
Izbira "less" ali "l" pomeni, da alternativna hipoteza trdi μ1 < μ2.
Izbira "greater" ali "g" pa pomeni, da alternativna hipoteza trdi μ1 > μ2.

Primerjava porazdelitev dveh urejenostnih spremenljivk na dveh populacijah – inverzijski (Wilcoxon-Mann-Whitneyjev) test

Spet primerjamo spremenljivki, ki sta bodisi urejenostni ali pa ne moremo privzeti, da sta njuni porazdelitvi blizu normalne. Iz vsake populacije vzamemo vzorec, vrednosti na prvem naj tvorijo vektor v, vrednosti na drugem pa vektor w. Hipotezo, da sta spremenljivki enako porazdeljeni, testiramo z ukazom:

wilcox.test(v, w, paired = FALSE, alternative = "two.sided" ali "less" ali "greater").

Določilo alternative pove, kaj je alternativna hipoteza:
izbira "two.sided" ali "t" ali izpustitev določila pomeni, da alternativna hipoteza trdi, da sta porazdelitvi različni.
Izbira "less" ali "l" pomeni, da alternativna hipoteza trdi, da je prva spremenljivka stohastično večja od druge.
Izbira "greater" ali "g" pa pomeni, da alternativna hipoteza trdi, da je prva spremenljivka stohastično manjša od druge.

Če je eden od vzorcev velik, je računanje zahtevno. Lahko ga poenostavimo z določilom exact = FALSE – v tem primeru bo R računal približek.

Primerjava povprečij spremenljivk na več populacijah – analiza variance (ANOVA) z enojno klasifikacijo

Testiramo hipotezo, da imajo spremenljivke, za katere privzamemo, da so porazdeljene normalno, enaka povprečja. Podatke uvrstimo v dva vektorja, denimo v in s. V vektorju v so vse vrednosti, v vektorju s pa skupine (ta vektor torej pove, iz katere populacije je dani podatek). Elementi vektorja s morajo biti nizi, ne števila! Test izvedemo z ukazom:

anova(lm(vr ~ sk, data.frame(vr = v, sk = s))).

p-vrednost odčitamo v rubriki Pr(<F) na desni strani R-ovega poročila.

Primerjava porazdelitev urejenostnih spremenljivk na več populacijah – Kruskal-Wallisov test

Ravnamo podobno kot pri analizi variance: podatke uvrstimo v dva vektorja, denimo v in s, pri čemer so v vektorju v vrednosti, v vektorju s pa skupine. Toda pozor: v nasprotju z analizo variance morajo biti tu v vektorju s števila, ne nizi! Test izvedemo z ukazom:

kruskal.test(v, s).

Koreliranost

Zanima nas koreliranost dveh spremenljivk na isti populaciji. Vzamemo vzorec, vrednosti prve spremenljivke naj tvorijo vektor v, vrednosti druga pa vektor w.

Interval zaupanja za korelacijski koeficient pri stopnji zaupanja β poiščemo z ukazom:

cor.test(v, w, method = "pearson" ali "kendall" ali "spearman", conf.level = β).

Določilo method pove, kateri korelacijski koeficient nas zanima.
Izbira "pearson" ali "p" ali opustitev določila pomeni običajni Pearsonov korelacijski koeficient, ki je primeren za številske spremenljivke, porazdeljene (približno) normalno.
Izbira "spearman" ali "s" pomeni Spearmanov, izbira "kendall" ali "k" pa Kendallov korelacijski koeficient; ta dva sta primerna za urejenostne spremenljivke. Spearmanov korelacijski koeficient (ρ) je lažji za računanje, o Kendallovem koeficientu (τ) pa dosti statistikov meni, da je verodostojnejši.

Hipotezo, da sta spremenljivki nekorelirani (oziroma neodvisni) pa testiramo z ukazom:

cor.test(v, w, method = "pearson" ali "kendall" ali "spearman", alternative = "two.sided" ali "less" ali "greater").

Določilo alternative pove, kaj je alternativna hipoteza:
izbira "two.sided" ali "t" ali izpustitev določila pomeni, da alternativna hipoteza trdi, da sta spremenljivki odvisni (oziroma korelirani).
Izbira "less" ali "l" pomeni, da alternativna hipoteza trdi, da sta spremenljivki pozitivno asociirani (oziroma korelirani).
Izbira "greater" ali "g" pa pomeni, da alternativna hipoteza trdi, da sta spremenljivki negativno asociirani (oziroma korelirani).

Računanje p-vrednosti za Kendallov korelacijski koeficient je zahtevno in R sam izbere, kdaj bo računal natančno vrednost in kdaj približek. To lahko spremenimo z določilom exact = TRUE ali exact = FALSE.