x <- round(runif(30)) y <- round(runif(30)) z <- x + y df <- data.frame(x=x,y=y,z=z) # generalasbol adodoan: x es y fuggetlen # de x,z fuggo es y,z szinten fuggo table(x) table(x,y) table(x,z) # vannak ures cellak, # tendencia: kis x-hez kis z, # nagy x-hez nagy z # "latszik" a fuggoseg chisq.test(x,z) -> teszt # teszt: komplex objektum # statisztika erteke chisq <- teszt$stat # parameter(ek): szabadsagi.fok <- teszt$par # milyen kvantilis, mennyire gyakori ertek # ebbol az eloszlasbol a kapott statisztika? pchisq(chisq,df=2) # eo-fv erteke: tole balra a # fuggveny alatti terulet ennyied resze # tole jobbra mekkora terulet: 1 - pchisq(chisq,df=2) teszt$p.value # jelen peldaban: nagyon keves van # tole jobbra, nagyon kiugro ertek! # ha fuggetlenek lennenek, khi^2 tipikusan # sokkal kisebb kene, hogy legyen. # ezert elhisszuk, hogy fuggoek. # tenyleges tszthez: elore eldontjuk, mekkora # esellyel lehet "hamis negativ", # puszta veletlen folytan is # lehetnek kiugro ertekek! # legyen elsofaju hiba, pl. p=0.1 ~ 10% p <- 0.1 teszt$p.value < p # ha kisebb: akokr hisszuk el a fuggoseget # ha p.value nagy, akkor fuggetlenek t <- seq(0,20,0.5) plot(t,dchisq(t,df=2),type="l") abline(v=chisq) abline(v=qchisq(1-p,df=2),col="red") # piros vonaltol jobbra: gorbe alatti # terulet 10%-a - -10% hibavaloszinuseg: # ha a chisq stat ettol jobbra, akkor # elhisszuk, hogy fuggoek # 10% esellyel hamis negativ: # fuggetlenseg eseten az esetek 10%-aban # kaphatok ilyen kiugro ertket # a veletlen folytan is. # "hamis negativ" hibavaloszinuseg: # kompromisszum, kulonben a "hamis pozitiv" # lesz nagyon gyakori # "hamis pozitiv" eselyet nem tudjuk # szamszerusiteni # nagyobb mintara mindket hiba eselye csokken # "haims negativ" eselye nagyobb mintara lehet # kisebb: pl 5%, 1% ## masik pelda: chisq.test(x,y) # kicsi chi^2 ertek, nagy p.value # ez fuggetlenseget jelentű # folytonos fuggelenseg teszt x <- rnorm(30) v <- x + rnorm(30) # x,v fuggo y <- rnorm(30)+2 # x,y fuggetlen # intervallumokra kell vagni, hogy legyen gyakorisg tabla! xint <- cut(x,breaks=3) # automatikusan szamolt, 3 intervallumra vint <- cut(v,breaks=seq(-3,3,2)) # kezzel definialt torespontok yint <- cut(y,breaks=2) chisq.test(xint,vint) # tipikusan: nagy chi^2, kis p, -> fuggoseg chisq.test(xint,yint) # tipikusan: kis chi^2, nagy p, -> fuggetlenseg