applyZ apply lahko uporabimo neko funkcijo na stolpcih ali pa vrsticah matrike.
N <- 100
n <- 9
mu <- 0
sd <- 1
Generirajmo podatke in jih uredimo v matriko
set.seed(1906)
A <- matrix(rnorm(N*n,mu,sd),N,n)
head(A)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] -0.7044098 -0.8110516 -1.58470687 0.3001331 -0.7964532 0.7571276
## [2,] -0.9699711 0.8481990 -1.86274821 0.6143037 -0.3124682 0.5371143
## [3,] -1.0441666 -0.8428976 1.15351674 -0.5070130 -0.3399565 0.4132697
## [4,] -0.5345256 -1.0147145 -0.06120336 0.5350865 -0.5440536 2.1957062
## [5,] 2.5216664 -1.5671690 1.78686949 -0.2030307 -1.0809696 2.7777414
## [6,] 1.1920201 0.7603192 -0.18927284 0.2734290 0.1435751 1.2987961
## [,7] [,8] [,9]
## [1,] -0.7961387 -0.9682794 -0.1884405
## [2,] 2.6095385 -0.4393865 0.9564861
## [3,] -1.4735579 0.4019704 -0.4927346
## [4,] -0.5135447 0.2706867 -0.1494888
## [5,] 0.1072300 1.0677550 -1.1076928
## [6,] 0.8703519 -0.5011438 0.4904350
tail(A)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [95,] 2.0713827 -0.1294242 -1.3504702 -0.1447354 2.20657884 0.7865765
## [96,] -0.1903930 -0.7060253 0.7420465 0.6165230 -0.49364086 -0.6483914
## [97,] -1.1249320 -0.1964624 1.2847127 0.8495554 -1.70126296 0.5519242
## [98,] -0.5903283 0.5270605 0.5474000 1.1475843 -2.09731272 -1.5295264
## [99,] 0.5144857 1.3288942 0.6845989 -0.4561285 0.06217497 -1.0847695
## [100,] -1.3890024 0.5532841 0.2353348 -0.5037092 0.75252262 -0.1516535
## [,7] [,8] [,9]
## [95,] 0.42719673 0.76591990 0.3762210
## [96,] 0.08452309 0.73628088 -1.2246322
## [97,] -0.44623991 0.06411625 0.7661967
## [98,] -1.40247442 -0.74222145 0.5524084
## [99,] 0.01003906 0.34056834 -0.1328869
## [100,] 0.55542504 -0.33283435 0.6848333
Izračun povprečij
head(apply(A,1,mean))
## [1] -0.53246882 0.22011860 -0.30350772 0.02043876 0.47804447 0.48205664
head(apply(A,1,sd))
## [1] 0.7087099 1.2930178 0.8232158 0.9406204 1.6299973 0.6097998
plot(A[1,],ylim=range(A),type="n",axes=FALSE,ylab="Vrednost")
axis(2)
axis(1,at=1:n)
box()
apply(A,1,lines)
## NULL
plot(A[1,],ylim=range(A),type="n",axes=FALSE,ylab="Vrednost")
axis(2)
axis(1,at=1:n)
box()
apply(A,1,lines,type="b")
## NULL
plot(A[1,],ylim=range(A),type="n",axes=FALSE,ylab="Vrednost")
axis(2)
axis(1,at=1:n)
box()
for( i in 1:N) lines(A[i,],col=i)
ci <- function(x,conf=0.95){
n <- length(x)
xbar <- mean(x)
s <- sd(x)
alpha <- 1-conf
t <- qt(c(alpha/2, 1-alpha/2),n-1)
meje <- xbar+t*s/sqrt(n)
# if(interactive()) print(c(n,xbar,s,t))
return(meje)
}
ci(rnorm(9))
## [1] -0.868824 0.499713
ciLimits <- apply(A,1,ci)
head(t(ciLimits))
## [,1] [,2]
## [1,] -1.07723148 0.01229384
## [2,] -0.77378289 1.21402009
## [3,] -0.93628737 0.32927194
## [4,] -0.70258605 0.74346356
## [5,] -0.77488240 1.73097133
## [6,] 0.01332301 0.95079028
plot(ciLimits,type="n",ylim=range(ciLimits),
xlim=c(1,N),xlab="Vzorec",ylab="Vrednost")
abline(h=0,lwd=5,col=rgb(1,0,1,0.25))
#abline(h=-2:2,col=8)
segments(1:N,ciLimits[1,],1:N,ciLimits[2,],lwd=1)
Poiščimo intervale, ki NE vsebujeo prave vrednosti \(\mu = 0\)
out <- apply(ciLimits,2,prod)
head(out)
## [1] -0.01324331 -0.93938798 -0.30829316 -0.52234713 -1.34129922 0.01266738
out <- apply(ciLimits,2,prod)>0
head(out)
## [1] FALSE FALSE FALSE FALSE FALSE TRUE
which(out)
## [1] 6 11 18 58 84 86 88
nOut <- sum(out)
barva <- out+1
head(barva)
## [1] 1 1 1 1 1 2
Naredimo barvast graf
plot(ciLimits,type="n",ylim=range(ciLimits),
xlim=c(1,N),xlab="Vzorec",ylab="Vrednost")
abline(h=0,lwd=1,col=rgb(1,0,1,0.25))
#abline(h=-2:2,col=8)
segments(1:N,ciLimits[1,],1:N,ciLimits[2,],
lwd=barva,
col=barva)
V našem primeru 7 od 100 ( ali 7% ) intervalov ne vsebuje prave vrednosti.