Nomen Omen
2010-Mar-27 11:19 UTC
[R] R runs in a usual way, but simulations are not performed
Dear addresses, I need perform a batch of 10 000 simulations for each of
4 options considered. (The idea is to obtain the parameter estimates in
a heteroskedastic linear regression model - with additive or mixed
heteroskedasticity - via the Kenward-Roger small-sample adjusted
covariance matrix of disturbances). For this purpose I wrote an R
program which would capture all possible options (true
heteroskedasticity = additive or mixed / assumed heteroskedasticity additive or
mixed): simulate data, compute ML estimates of covariance
components parameters (on the basis of maxLik package), and compute the
resulting beta estimates. Simulations are performed by repeat command
and, after every simulation step, the result is exported to an external
csv file. Since sometimes an error was encountered during the simulation
and the entire program broke down, I made use of the function TRY at
critical evaluation steps to prevent the cessation of the program
evaluation: R evaluates the result and if there should be a problem, it
moves onto another step. Therefore, I distinguish between bad
simulations and good simulations (and have two csv files for the
results). There, however, another problem arises: R seems to be working
(computing), it is not frozen or anything like that, and yet the saving
to the files stops. I should say that it looks as if R was functioning
fully but the simulations stopped. It is possible that R went into an
undesired loop for no reasons that I know of. It requires of me to
service all computers and, after the simulations have frozen, to restart
the repeat command, which is not sound for I cannot be (or perhaps am
not willing to be) with computers non-stop. The computers I use are of
2GB RAM and R is the version 2.10.1 (2009-12-14). I have no idea where
the problem can lie and how to solve it. Can you please give me some
suggestions how to handle this obstacle to speedy simulating? I shall be
much thankful for any suggestion. Later I paste the example of the set
of commands that I use, all though it might be not sensible, because it
all is too complicated. I am convinced that of foremost importance is
the last repeat command. Thank you very much. Faithfully yours, Martin
Bo?a (Matej Bel University / Faculty of Natural Sciences / Bansk?
Bystrica / Slovakia).
# zav?dza s?riu podporn?ch funkci?
# zav?dza trace, sigma, fi, xs, xs, fixs, sxfixs
tr <- function(M) sum(diag(M))
sigma_ADD <- function(alpha) diag(as.vector(alpha %*% t(z)),
nrow=nrow(z), ncol=nrow(z))
sigma_MIX <- function(alpha) diag((as.vector(alpha %*% t(z)))^2,
nrow=nrow(z), ncol=nrow(z))
sigma_EXP <- function(alpha) diag(exp(as.vector(alpha %*% t(z))),
nrow=nrow(z), ncol=nrow(z))
fi <- function(sigma) solve(crossprod(x, crossprod(solve(sigma),x)))
xs <- function(sigma) crossprod(x,solve(sigma))
sx <- function(sigma) crossprod(solve(sigma),x)
fixs <- function(sigma) crossprod(fi(sigma),xs(sigma))
sxfixs <- function(sigma)
crossprod(xs(sigma),crossprod(fi(sigma),xs(sigma)))
# zav?dza (ncol(z) x 1) vektor n?l, ktor? m? na i-tom mieste 1
ei <- function(i) { ei = rep(0,ncol(z))
ei[i] = 1
return(ei) }
# zav?dza deriv?ciu dSIGMA/dalfa_i a zmie?an? deriv?ciu
(dSIGMA^2)/(ddalfa_i*dalfa_j)
# zav?dza maticov? s??in (sigma)^(-1)*dSIGMA/dalfa_i
# zav?dza maticov? s??in (sigma)^(-1)*dSIGMA/dalfa_i*(sigma)^(-1)
dsigma.dalphai_ADD <- function(i) {
diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z), ncol=nrow(z)) }
dsigma.dalphai_MIX <- function(sigma,i) {
2*crossprod(diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z),
ncol=nrow(z)),sigma^(1/2)) }
dsigma.dalphai_EXP <- function(sigma,i) {
crossprod(diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z),
ncol=nrow(z)),sigma) }
d2sigma.dalphaij_MIX <- function(i,j) {
eiz <- diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
ejz <- diag(as.vector(ei(j) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
d2sigma.dalphaij <- 2*crossprod(eiz,ejz)
return(d2sigma.dalphaij) }
d2sigma.dalphaij_EXP <- function(sigma,i,j) {
eiz <- diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
ejz <- diag(as.vector(ei(j) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
d2sigma.dalphaij <- crossprod(crossprod(eiz,ejz),sigma)
return(d2sigma.dalphaij) }
sigmaDERIVi_ADD <- function(sigma,i)
crossprod(solve(sigma),dsigma.dalphai_ADD(i))
sigmaDERIVi_MIX <- function(sigma,i)
crossprod(solve(sigma),dsigma.dalphai_MIX(sigma,i))
sigmaDERIVi_EXP <- function(sigma,i)
crossprod(solve(sigma),dsigma.dalphai_EXP(sigma,i))
sigmaDERIVisigma_ADD <- function(sigma,i) {
crossprod(solve(sigma),crossprod(dsigma.dalphai_ADD(i),solve(sigma))) }
sigmaDERIVisigma_MIX <- function(sigma,i) {
crossprod(solve(sigma),crossprod(dsigma.dalphai_MIX(sigma,i),solve(sigma)))
}
sigmaDERIVisigma_EXP <- function(sigma,i) {
crossprod(solve(sigma),crossprod(dsigma.dalphai_EXP(sigma,i),solve(sigma)))
}
# zav?dza pi, qij, rij (iba pre zmie?an? a multiplikat?vny model
heteroskedasticity)
pi_ADD <- function(sigma,i)
-1*crossprod(x,crossprod(sigmaDERIVisigma_ADD(sigma,i),x))
pi_MIX <- function(sigma,i)
-1*crossprod(x,crossprod(sigmaDERIVisigma_MIX(sigma,i),x))
pi_EXP <- function(sigma,i)
-1*crossprod(x,crossprod(sigmaDERIVisigma_EXP(sigma,i),x))
qij_ADD <- function(sigma,i,j) {
SX <- sx(sigma)
dSIGMA.dalphaj <- dsigma.dalphai_ADD(j)
SIGMAderivi <- sigmaDERIVi_ADD(sigma,i)
qij <- crossprod(SX,crossprod(SIGMAderivi,crossprod(dSIGMA.dalphaj,SX)))
return(qij) }
qij_MIX <- function(sigma,i,j) {
SX <- sx(sigma)
dSIGMA.dalphaj <- dsigma.dalphai_MIX(sigma,j)
SIGMAderivi <- sigmaDERIVi_MIX(sigma,i)
qij <- crossprod(SX,crossprod(SIGMAderivi,crossprod(dSIGMA.dalphaj,SX)))
return(qij) }
qij_EXP <- function(sigma,i,j) {
SX <- sx(sigma)
dSIGMA.dalphaj <- dsigma.dalphai_EXP(sigma,j)
SIGMAderivi <- sigmaDERIVi_EXP(sigma,i)
qij <- crossprod(SX,crossprod(SIGMAderivi,crossprod(dSIGMA.dalphaj,SX)))
return(qij) }
rij_MIX <- function(sigma,i,j)
crossprod(sx(sigma),crossprod(d2sigma.dalphaij_MIX(i,j),sx(sigma)))
rij_EXP <- function(sigma,i,j) {
crossprod(sx(sigma),crossprod(d2sigma.dalphaij_EXP(sigma,i,j),sx(sigma)))
}
# zav?dza funkciu pre stanovenie REML likelihood
# je funkciou alpha conditional on x, y, z
#########################################################################################
reml.loglik_ADD <- function(alpha) { SIGMA <- sigma_ADD(alpha)
a <- -0.5*log(det(SIGMA))
b <- -0.5*log(det(crossprod(x,crossprod(solve(SIGMA),x))))
c <-
-0.5*as.numeric(crossprod(y,crossprod(solve(SIGMA)-sxfixs(SIGMA),y)))
logl <- a + b + c
return(logl) }
reml.loglik_MIX <- function(alpha) { SIGMA <- sigma_MIX(alpha)
a <- -0.5*log(det(SIGMA))
b <- -0.5*log(det(crossprod(x,crossprod(solve(SIGMA),x))))
c <-
-0.5*as.numeric(crossprod(y,crossprod(solve(SIGMA)-sxfixs(SIGMA),y)))
logl <- a + b + c
return(logl) }
reml.loglik_EXP <- function(alpha) { SIGMA <- sigma_EXP(alpha)
a <- -0.5*log(det(SIGMA))
b <- -0.5*log(det(crossprod(x,crossprod(solve(SIGMA),x))))
c <-
-0.5*as.numeric(crossprod(y,crossprod(solve(SIGMA)-sxfixs(SIGMA),y)))
logl <- a + b + c
return(logl) }
#########################################################################################
# zav?dza funkciu pre stanovenie gradientn?ho vektora pre REML
likelihood
# je funkciou alpha conditional on x, y, z
# obsahuje podfunkciu dl.dalphai, ktor? spo??tava deriv?ciu
likelihood function pod?a alpha i
#########################################################################################
######## gradientn? vektor adit?vneho modelu
############################################
gradvec_ADD = function(alpha) { dl.dalphai <- function(i) {
SIGMA <- sigma_ADD(alpha)
FI <- fi(SIGMA)
FIxs <- fixs(SIGMA)
sxFIxs <- sxfixs(SIGMA)
Pi <- pi_ADD(SIGMA,i)
dSIGMA.dalphai <- dsigma.dalphai_ADD(i)
SIGMAderiviSIGMA <- sigmaDERIVisigma_ADD(SIGMA,i)
dl.dalphai.1 <- -1/2*tr(crossprod(solve(SIGMA),dSIGMA.dalphai ))
dl.dalphai.2 <- -1/2*tr(crossprod(FI,Pi))
dl.dalphai.3 <-
+1/2*as.numeric(crossprod(y,crossprod(SIGMAderiviSIGMA,y)))
INSIDE1 <- crossprod(FIxs,crossprod(Pi,FIxs))
dl.dalphai.4 <- -1/2*as.numeric(crossprod(y,crossprod(INSIDE1,y)))
INSIDE2 <- crossprod(solve(SIGMA),crossprod(dSIGMA.dalphai ,sxFIxs))
dl.dalphai.5 <-
+1/2*(-2)*as.numeric(crossprod(y,crossprod(t(INSIDE2),y)))
dl.dalphai = dl.dalphai.1 + dl.dalphai.2 + dl.dalphai.3 + dl.dalphai.4 +
dl.dalphai.5
return(dl.dalphai)}
grad = rep(dl.dalphai(1),c(1))
for(i in 2:length(alpha)) {
grad = append(grad,rep(dl.dalphai(i),c(1)), after = c(i)) }
return(grad) }
######## gradientn? vektor zmie?an?ho modelu
############################################
gradvec_MIX = function(alpha) { dl.dalphai <- function(i) {
SIGMA <- sigma_MIX(alpha)
FI <- fi(SIGMA)
FIxs <- fixs(SIGMA)
sxFIxs <- sxfixs(SIGMA)
Pi <- pi_MIX(SIGMA,i)
dSIGMA.dalphai <- dsigma.dalphai_MIX(SIGMA,i)
SIGMAderiviSIGMA <- sigmaDERIVisigma_MIX(SIGMA,i)
dl.dalphai.1 <- -1/2*tr(crossprod(solve(SIGMA),dSIGMA.dalphai ))
dl.dalphai.2 <- -1/2*tr(crossprod(FI,Pi))
dl.dalphai.3 <-
+1/2*as.numeric(crossprod(y,crossprod(SIGMAderiviSIGMA,y)))
INSIDE1 <- crossprod(FIxs,crossprod(Pi,FIxs))
dl.dalphai.4 <- -1/2*as.numeric(crossprod(y,crossprod(INSIDE1,y)))
INSIDE2 <- crossprod(solve(SIGMA),crossprod(dSIGMA.dalphai ,sxFIxs))
dl.dalphai.5 <-
+1/2*(-2)*as.numeric(crossprod(y,crossprod(t(INSIDE2),y)))
dl.dalphai = dl.dalphai.1 + dl.dalphai.2 + dl.dalphai.3 + dl.dalphai.4 +
dl.dalphai.5
return(dl.dalphai)}
grad = rep(dl.dalphai(1),c(1))
for(i in 2:length(alpha)) {
grad = append(grad,rep(dl.dalphai(i),c(1)), after = c(i)) }
return(grad) }
######## gradientn? vektor multiplikat?vneho modelu
#####################################
gradvec_EXP = function(alpha) { dl.dalphai <- function(i) {
SIGMA <- sigma_EXP(alpha)
FI <- fi(SIGMA)
FIxs <- fixs(SIGMA)
sxFIxs <- sxfixs(SIGMA)
Pi <- pi_EXP(SIGMA,i)
dSIGMA.dalphai <- dsigma.dalphai_EXP(SIGMA,i)
SIGMAderiviSIGMA <- sigmaDERIVisigma_EXP(SIGMA,i)
dl.dalphai.1 <- -1/2*tr(crossprod(solve(SIGMA),dSIGMA.dalphai ))
dl.dalphai.2 <- -1/2*tr(crossprod(FI,Pi))
dl.dalphai.3 <-
+1/2*as.numeric(crossprod(y,crossprod(SIGMAderiviSIGMA,y)))
INSIDE1 <- crossprod(FIxs,crossprod(Pi,FIxs))
dl.dalphai.4 <- -1/2*as.numeric(crossprod(y,crossprod(INSIDE1,y)))
INSIDE2 <- crossprod(solve(SIGMA),crossprod(dSIGMA.dalphai ,sxFIxs))
dl.dalphai.5 <-
+1/2*(-2)*as.numeric(crossprod(y,crossprod(t(INSIDE2),y)))
dl.dalphai = dl.dalphai.1 + dl.dalphai.2 + dl.dalphai.3 + dl.dalphai.4 +
dl.dalphai.5
return(dl.dalphai)}
grad = rep(dl.dalphai(1),c(1))
for(i in 2:length(alpha)) {
grad = append(grad,rep(dl.dalphai(i),c(1)), after = c(i)) }
return(grad) }
#########################################################################################
# zav?dza funkciu pre stanovenie Hessovej matice pre REML likelihood
# je funkciou alpha conditional on x, y, z
# obsahuje podfunkciu d2l.dalphaij, ?o spo??tava druh? deriv?ciu
loglikelihood pod?a alpha i a alpha j
#########################################################################################
######## Hessova matica adit?vneho modelu
##############################################
hessmat_ADD = function(alpha) {
hess = matrix(nrow = ncol(z), ncol = ncol(z))
d2l.dalphaij <- function(i,j) {
SIGMA <- sigma_ADD(alpha)
FI <- fi(SIGMA)
XS <- xs(SIGMA)
SX <- sx(SIGMA)
FIxs <- fixs(SIGMA)
sxFI <- t(FIxs)
sxFIxs <- sxfixs(SIGMA)
Pi <- pi_ADD(SIGMA,i)
Pj <- pi_ADD(SIGMA,j)
Qij <- qij_ADD(SIGMA,i,j)
dSIGMA.dalphai <- dsigma.dalphai_ADD(i)
dSIGMA.dalphaj <- dsigma.dalphai_ADD(j)
SIGMAderiviSIGMA <- sigmaDERIVisigma_ADD(SIGMA,i)
SIGMAderivjSIGMA <- sigmaDERIVisigma_ADD(SIGMA,j)
SIGMAderivi <- sigmaDERIVi_ADD(SIGMA,i)
SIGMAderivj <- sigmaDERIVi_ADD(SIGMA,j)
d2l.dalphaij.11 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
d2l.dalphaij.12 = 0
d2l.dalpahij.21 = 1/2*tr(crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
d2l.dalphaij.22 = -1*tr(crossprod(FI,Qij))
d2l.dalphaij.23 = 0
d2l.dalphaij.31
-1*crossprod(y,crossprod(t(SIGMAderivj),crossprod(SIGMAderiviSIGMA,y)))
d2l.dalphaij.32 = 0
d2l.dalphaij.41
crossprod(y,crossprod(t(SIGMAderivj),crossprod(FIxs,crossprod(Pi,crossprod(sxFI,y)))))
d2l.dalphaij.42
crossprod(y,crossprod(FIxs,crossprod(Pi,crossprod(FI,crossprod(Pj,crossprod(sxFI,y))))))
d2l.dalphaij.43 -1*crossprod(y,crossprod(FIxs,crossprod(Qij,crossprod(sxFI,y))))
d2l.dalphaij.44 = 0
d2l.dalphaij.51
crossprod(y,crossprod(t(SIGMAderivj),crossprod(t(SIGMAderivi),crossprod(sxFIxs,y))))
d2l.dalphaij.52 = 0
d2l.dalphaij.53
crossprod(y,crossprod(t(SIGMAderivi),crossprod(t(SIGMAderivj),crossprod(sxFIxs,y))))
d2l.dalphaij.54
crossprod(y,crossprod(t(SIGMAderivi),crossprod(FIxs,crossprod(Pj,crossprod(sxFI,y)))))
d2l.dalphaij.55
crossprod(y,crossprod(t(SIGMAderivi),crossprod(sxFIxs,crossprod(SIGMAderivj,y))))
d2l.dalphaij = d2l.dalphaij.11 + d2l.dalphaij.12 + d2l.dalpahij.21 +
d2l.dalphaij.22 + d2l.dalphaij.23 +
d2l.dalphaij.31 + d2l.dalphaij.32 + d2l.dalphaij.41 + d2l.dalphaij.42 +
d2l.dalphaij.43 +
d2l.dalphaij.44 + d2l.dalphaij.51 + d2l.dalphaij.52 + d2l.dalphaij.53 +
d2l.dalphaij.54 +
d2l.dalphaij.55
return(d2l.dalphaij)}
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) hess[i,j] = d2l.dalphaij(i,j)
}
return(hess)}
######## Hessova matica zmie?an?ho modelu
##############################################
hessmat_MIX = function(alpha) {
hess = matrix(nrow = ncol(z), ncol = ncol(z))
d2l.dalphaij <- function(i,j) {
SIGMA <- sigma_MIX(alpha)
FI <- fi(SIGMA)
XS <- xs(SIGMA)
SX <- sx(SIGMA)
FIxs <- fixs(SIGMA)
sxFI <- t(FIxs)
sxFIxs <- sxfixs(SIGMA)
Pi <- pi_MIX(SIGMA,i)
Pj <- pi_MIX(SIGMA,j)
Qij <- qij_MIX(SIGMA,i,j)
Rij<- rij_MIX(SIGMA,i,j)
dSIGMA.dalphai <- dsigma.dalphai_MIX(SIGMA,i)
dSIGMA.dalphaj <- dsigma.dalphai_MIX(SIGMA,j)
d2SIGMA.dalphaij <- d2sigma.dalphaij_MIX(i,j)
SIGMAderiviSIGMA <- sigmaDERIVisigma_MIX(SIGMA,i)
SIGMAderivjSIGMA <- sigmaDERIVisigma_MIX(SIGMA,j)
SIGMAderivi <- sigmaDERIVi_MIX(SIGMA,i)
SIGMAderivj <- sigmaDERIVi_MIX(SIGMA,j)
d2l.dalphaij.11 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
d2l.dalphaij.12 = -1/2*tr(crossprod(solve(SIGMA),d2SIGMA.dalphaij))
d2l.dalpahij.21 = 1/2*tr(crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
d2l.dalphaij.22 = -1*tr(crossprod(FI,Qij))
d2l.dalphaij.23 = 1/2*tr(crossprod(FI,Rij))
d2l.dalphaij.31
-1*crossprod(y,crossprod(t(SIGMAderivj),crossprod(SIGMAderiviSIGMA,y)))
d2l.dalphaij.32
1/2*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(solve(SIGMA),y))))
d2l.dalphaij.41
crossprod(y,crossprod(t(SIGMAderivj),crossprod(FIxs,crossprod(Pi,crossprod(sxFI,y)))))
d2l.dalphaij.42
crossprod(y,crossprod(FIxs,crossprod(Pi,crossprod(FI,crossprod(Pj,crossprod(sxFI,y))))))
d2l.dalphaij.43 -1*crossprod(y,crossprod(FIxs,crossprod(Qij,crossprod(sxFI,y))))
d2l.dalphaij.44
1/2*crossprod(y,crossprod(FIxs,crossprod(Rij,crossprod(sxFI,y))))
d2l.dalphaij.51
crossprod(y,crossprod(t(SIGMAderivj),crossprod(t(SIGMAderivi),crossprod(sxFIxs,y))))
d2l.dalphaij.52
-1*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(sxFIxs,y))))
d2l.dalphaij.53
crossprod(y,crossprod(t(SIGMAderivi),crossprod(t(SIGMAderivj),crossprod(sxFIxs,y))))
d2l.dalphaij.54
crossprod(y,crossprod(t(SIGMAderivi),crossprod(FIxs,crossprod(Pj,crossprod(sxFI,y)))))
d2l.dalphaij.55
crossprod(y,crossprod(t(SIGMAderivi),crossprod(sxFIxs,crossprod(SIGMAderivj,y))))
d2l.dalphaij = d2l.dalphaij.11 + d2l.dalphaij.12 + d2l.dalpahij.21 +
d2l.dalphaij.22 + d2l.dalphaij.23 +
d2l.dalphaij.31 + d2l.dalphaij.32 + d2l.dalphaij.41 + d2l.dalphaij.42 +
d2l.dalphaij.43 +
d2l.dalphaij.44 + d2l.dalphaij.51 + d2l.dalphaij.52 + d2l.dalphaij.53 +
d2l.dalphaij.54 +
d2l.dalphaij.55
return(d2l.dalphaij)}
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) hess[i,j] = d2l.dalphaij(i,j)
}
return(hess)}
######## Hessova matica multiplikat?vneho modelu
#######################################
hessmat_EXP = function(alpha) {
hess = matrix(nrow = ncol(z), ncol = ncol(z))
d2l.dalphaij <- function(i,j) {
SIGMA <- sigma_EXP(alpha)
FI <- fi(SIGMA)
XS <- xs(SIGMA)
SX <- sx(SIGMA)
FIxs <- fixs(SIGMA)
sxFI <- t(FIxs)
sxFIxs <- sxfixs(SIGMA)
Pi <- pi_EXP(SIGMA,i)
Pj <- pi_EXP(SIGMA,j)
Qij <- qij_EXP(SIGMA,i,j)
Rij<- rij_EXP(SIGMA,i,j)
dSIGMA.dalphai <- dsigma.dalphai_EXP(SIGMA,i)
dSIGMA.dalphaj <- dsigma.dalphai_EXP(SIGMA,j)
d2SIGMA.dalphaij <- d2sigma.dalphaij_EXP(SIGMA,i,j)
SIGMAderiviSIGMA <- sigmaDERIVisigma_EXP(SIGMA,i)
SIGMAderivjSIGMA <- sigmaDERIVisigma_EXP(SIGMA,j)
SIGMAderivi <- sigmaDERIVi_EXP(SIGMA,i)
SIGMAderivj <- sigmaDERIVi_EXP(SIGMA,j)
d2l.dalphaij.11 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
d2l.dalphaij.12 = -1/2*tr(crossprod(solve(SIGMA),d2SIGMA.dalphaij))
d2l.dalpahij.21 = 1/2*tr(crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
d2l.dalphaij.22 = -1*tr(crossprod(FI,Qij))
d2l.dalphaij.23 = 1/2*tr(crossprod(FI,Rij))
d2l.dalphaij.31
-1*crossprod(y,crossprod(t(SIGMAderivj),crossprod(SIGMAderiviSIGMA,y)))
d2l.dalphaij.32
1/2*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(solve(SIGMA),y))))
d2l.dalphaij.41
crossprod(y,crossprod(t(SIGMAderivj),crossprod(FIxs,crossprod(Pi,crossprod(sxFI,y)))))
d2l.dalphaij.42
crossprod(y,crossprod(FIxs,crossprod(Pi,crossprod(FI,crossprod(Pj,crossprod(sxFI,y))))))
d2l.dalphaij.43 -1*crossprod(y,crossprod(FIxs,crossprod(Qij,crossprod(sxFI,y))))
d2l.dalphaij.44
1/2*crossprod(y,crossprod(FIxs,crossprod(Rij,crossprod(sxFI,y))))
d2l.dalphaij.51
crossprod(y,crossprod(t(SIGMAderivj),crossprod(t(SIGMAderivi),crossprod(sxFIxs,y))))
d2l.dalphaij.52
-1*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(sxFIxs,y))))
d2l.dalphaij.53
crossprod(y,crossprod(t(SIGMAderivi),crossprod(t(SIGMAderivj),crossprod(sxFIxs,y))))
d2l.dalphaij.54
crossprod(y,crossprod(t(SIGMAderivi),crossprod(FIxs,crossprod(Pj,crossprod(sxFI,y)))))
d2l.dalphaij.55
crossprod(y,crossprod(t(SIGMAderivi),crossprod(sxFIxs,crossprod(SIGMAderivj,y))))
d2l.dalphaij = d2l.dalphaij.11 + d2l.dalphaij.12 + d2l.dalpahij.21 +
d2l.dalphaij.22 + d2l.dalphaij.23 +
d2l.dalphaij.31 + d2l.dalphaij.32 + d2l.dalphaij.41 + d2l.dalphaij.42 +
d2l.dalphaij.43 +
d2l.dalphaij.44 + d2l.dalphaij.51 + d2l.dalphaij.52 + d2l.dalphaij.53 +
d2l.dalphaij.54 +
d2l.dalphaij.55
return(d2l.dalphaij)}
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) hess[i,j] = d2l.dalphaij(i,j)
}
return(hess)}
#########################################################################################
######## zav?dza information matrices a kovarian?n? matice
adit?vneho modelu ############
# expected information matrix
expmat_ADD <- function(alpha) { mat = matrix(nrow = ncol(z), ncol ncol(z))
matij <- function(i,j) {
SIGMA <- sigma_ADD(alpha)
FI <- fi(SIGMA)
Pi <- pi_ADD(SIGMA,i)
Pj <- pi_ADD(SIGMA,j)
Qij <- qij_ADD(SIGMA,i,j)
SIGMAderivi <- sigmaDERIVi_ADD(SIGMA,i)
SIGMAderivj <- sigmaDERIVi_ADD(SIGMA,j)
matij.1 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
matij.2
-1*tr(crossprod(FI,Qij)-1/2*crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
matij = matij.1 + matij.2
return(matij)}
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) mat[i,j] = matij(i,j) }
return(mat)}
# observed information matrix & average infromation matrix
obsmat_ADD <- function(alpha) -1*hessmat_ADD(alpha)
avgmat_ADD <- function(alpha) 1/2*(obsmat_ADD(alpha) +
expmat_ADD(alpha))
expcovmat_ADD <- function(alpha) solve(expmat_ADD(alpha))
obscovmat_ADD <- function(alpha) solve(obsmat_ADD(alpha))
avgcovmat_ADD <- function(alpha) solve(avgmat_ADD(alpha))
######## zav?dza information matrices a kovarian?n? matice
zmie?an?ho modelu ############
# expected information matrix
expmat_MIX = function(alpha) { mat = matrix(nrow = ncol(z), ncol ncol(z))
matij <- function(i,j) {
SIGMA <- sigma_MIX(alpha)
FI <- fi(SIGMA)
Pi <- pi_MIX(SIGMA,i)
Pj <- pi_MIX(SIGMA,j)
Qij <- qij_MIX(SIGMA,i,j)
SIGMAderivi <- sigmaDERIVi_MIX(SIGMA,i)
SIGMAderivj <- sigmaDERIVi_MIX(SIGMA,j)
matij.1 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
matij.2
-1*tr(crossprod(FI,Qij)-1/2*crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
matij = matij.1 + matij.2
return(matij)}
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) mat[i,j] = matij(i,j) }
return(mat)}
# observed information matrix & average infromation matrix
obsmat_MIX <- function(alpha) -1*hessmat_MIX(alpha)
avgmat_MIX <- function(alpha) 1/2*(obsmat_MIX(alpha) +
expmat_MIX(alpha))
expcovmat_MIX <- function(alpha) solve(expmat_MIX(alpha))
obscovmat_MIX <- function(alpha) solve(obsmat_MIX(alpha))
avgcovmat_MIX <- function(alpha) solve(avgmat_MIX(alpha))
######## zav?dza information matrices a kovarian?n? matice
mutliplikat?vneho modelu #####
# expected information matrix
expmat_EXP = function(alpha) { mat = matrix(nrow = ncol(z), ncol ncol(z))
matij <- function(i,j) {
SIGMA <- sigma_EXP(alpha)
FI <- fi(SIGMA)
Pi <- pi_EXP(SIGMA,i)
Pj <- pi_EXP(SIGMA,j)
Qij <- qij_EXP(SIGMA,i,j)
SIGMAderivi <- sigmaDERIVi_EXP(SIGMA,i)
SIGMAderivj <- sigmaDERIVi_EXP(SIGMA,j)
matij.1 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
matij.2
-1*tr(crossprod(FI,Qij)-1/2*crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
matij = matij.1 + matij.2
return(matij)}
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) mat[i,j] = matij(i,j) }
return(mat)}
# observed information matrix & average infromation matrix
obsmat_EXP <- function(alpha) -1*hessmat_EXP(alpha)
avgmat_EXP <- function(alpha) 1/2*(obsmat_EXP(alpha) +
expmat_EXP(alpha))
expcovmat_EXP <- function(alpha) solve(expmat_EXP(alpha))
obscovmat_EXP <- function(alpha) solve(obsmat_EXP(alpha))
avgcovmat_EXP <- function(alpha) solve(avgmat_EXP(alpha))
#########################################################################################
# zav?dza kni?nicu maxLik
library(maxLik)
# zavedie ?tartovacie hodnoty jednotky pre alpha
beta_ols <- function(x,y) crossprod(solve(crossprod(x)), crossprod(x,y))
resids_ols <- function(x,y) (y - crossprod(t(x),beta_ols(x,y)))
alpha_ols_ADD <- function(x,y)
crossprod(solve(crossprod(z)),crossprod(z,resids_ols(x,y)^2))
alpha_ols_MIX <- function(x,y)
crossprod(solve(crossprod(z)),crossprod(z,abs(resids_ols(x,y))))
alpha_ols_EXP <- function(x,y)
crossprod(solve(crossprod(z)),crossprod(z,log(resids_ols(x,y)^2)))
coefolsEST_ADD <- function(x,y) t(alpha_ols_ADD(x,y))
coefolsEST_MIX <- function(x,y) t(alpha_ols_MIX(x,y))
coefolsEST_EXP <- function(x,y) t(alpha_ols_EXP(x,y))
kenward_roger_both <- function(model,estimated_alpha,beta_tested,x,y,z)
{ x = x; y = y; z = z
if (model == "ADD") {
inner <- function(i,j,alpha) {
FI <- fi(sigma_ADD(alpha))
Pi <- pi_ADD(sigma_ADD(alpha),i)
Pj <- pi_ADD(sigma_ADD(alpha),j)
Qij <- qij_ADD(sigma_ADD(alpha),i,j)
W <- expcovmat_ADD(alpha)
inner = matrix(nrow = ncol(x), ncol = ncol(x))
inner = W[i,j]*(Qij-crossprod(Pi,crossprod(FI,Pj)))
return(inner) }
INNER = matrix(0, nrow = ncol(x), ncol = ncol(x))
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) INNER = INNER +
inner(i,j,estimated_alpha) }
a1a2ij <- function(i,j,alpha) {
FI <- fi(sigma_ADD(alpha))
Pi <- pi_ADD(sigma_ADD(alpha),i)
Pj <- pi_ADD(sigma_ADD(alpha),j)
W <- expcovmat_ADD(alpha)
a1a2 = vector(mode = "numeric",length = 2)
a1a2[1] <- W[i,j]*tr(crossprod(FI,Pi))*tr(crossprod(FI,Pj))
a1a2[2] <- W[i,j]*tr(crossprod(crossprod(Pi,FI),crossprod(FI,Pj)))
return(a1a2) }
A1A2 = vector(mode = "numeric", length = 2)
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) A1A2 = A1A2 +
a1a2ij(i,j,estimated_alpha) }
A1 = A1A2[1]
A2 = A1A2[2]
FI <- fi(sigma_ADD(estimated_alpha))
p <- ncol(x)
EF <- 1 + 1 / p * A2
DF <- 1 / p^2 * (A1 + 6 * A2 + 2 * p)
m <- 4 + (p + 2) / (p * DF / (2 * EF^2) - 1)
lam <- m / (EF * (m - 2))
beta_egls <-
crossprod(FI,crossprod(x,crossprod(solve(sigma_ADD(estimated_alpha)),y)))
beta_covmat_old <- FI + 2*crossprod(FI,crossprod(INNER,FI))
dif = beta_egls - beta_tested
F.kr = as.numeric(lam / p *
crossprod(dif,crossprod(solve(beta_covmat_old),dif)))
p.v <- pf(F.kr, df1 = p, df2 = m, lower.tail = FALSE, log.p = FALSE)
list <- list(A1 = A1, A2 = A2, EF = EF, DF = DF, df1 = p, df2 = m, F_old
= F.kr,
F_new = F.kr, sig_old = p.v, sig_new = p.v, beta_egls = beta_egls,
beta_covmat_old = beta_covmat_old, beta_covmat_new beta_covmat_old,model =
model)
list }
else if (model == "MIX") {
inner <- function(i,j,alpha) {
FI <- fi(sigma_MIX(alpha))
Pi <- pi_MIX(sigma_MIX(alpha),i)
Pj <- pi_MIX(sigma_MIX(alpha),j)
Qij <- qij_MIX(sigma_MIX(alpha),i,j)
Rij <- rij_MIX(sigma_MIX(alpha),i,j)
W <- expcovmat_MIX(alpha)
inner = matrix(nrow = ncol(x), ncol = ncol(x))
inner = W[i,j]*(Qij-crossprod(Pi,crossprod(FI,Pj))-1/4*Rij)
return(inner) }
INNER = matrix(0, nrow = ncol(x), ncol = ncol(x))
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) INNER = INNER +
inner(i,j,estimated_alpha) }
a1a2ij <- function(i,j,alpha) {
FI <- fi(sigma_MIX(alpha))
Pi <- pi_MIX(sigma_MIX(alpha),i)
Pj <- pi_MIX(sigma_MIX(alpha),j)
W <- expcovmat_MIX(alpha)
a1a2 = vector(mode = "numeric",length = 2)
a1a2[1] <- W[i,j]*tr(crossprod(FI,Pi))*tr(crossprod(FI,Pj))
a1a2[2] <- W[i,j]*tr(crossprod(crossprod(Pi,FI),crossprod(FI,Pj)))
return(a1a2) }
A1A2 = vector(mode = "numeric", length = 2)
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) A1A2 = A1A2 +
a1a2ij(i,j,estimated_alpha) }
A1 = A1A2[1]
A2 = A1A2[2]
BIAS_COR_MIX <- function(alpha) {
SIGMA <- sigma_MIX(alpha)
FI <- fi(sigma_MIX(alpha))
W <- expcovmat_MIX(alpha)
IN = matrix(0, nrow = nrow(x), ncol = nrow(x))
for(i in 1:ncol(z)) {
for(j in 1:ncol(z)) IN = IN + W[i,j]*d2sigma.dalphaij_MIX(i,j) } #
is symmetric
S <- crossprod(solve(SIGMA),crossprod(IN,solve(SIGMA))) # is
symmetric
V <- function(t) {
ancillary1 <- crossprod(S,dsigma.dalphai_MIX(SIGMA,t)) # is
symmetric
ancillary2 <- crossprod(x,crossprod(S,x)) # is symmetric
v1 <- tr(ancillary1)
v2 <-
-2*tr(crossprod(sx(SIGMA),crossprod(ancillary1,crossprod(t(x),FI))))
v3 <-
-1*tr(crossprod(ancillary2,crossprod(FI,crossprod(pi_MIX(SIGMA,t),FI))))
v <- v1 + v2 + v3
return(v) }
bias = matrix(0, nrow = ncol(x), ncol = ncol(x))
alpha = estimated_alpha
for(t in 1:ncol(z)) {
for(s in 1:ncol(z))
bias = bias +
(-1/4)*W[t,s]*V(t)*crossprod(FI,crossprod(pi_MIX(SIGMA,s),FI)) }
return(bias) }
FI <- fi(sigma_MIX(estimated_alpha))
p <- ncol(x)
EF <- 1 + 1 / p * A2
DF <- 1 / p^2 * (A1 + 6 * A2 + 2 * p)
m <- 4 + (p + 2) / (p * DF / (2 * EF^2) - 1)
lam <- m / (EF * (m - 2))
beta_egls <-
crossprod(FI,crossprod(x,crossprod(solve(sigma_MIX(estimated_alpha)),y)))
beta_covmat_old <- FI + 2*crossprod(FI,crossprod(INNER,FI))
beta_covmat_new <- beta_covmat_old + BIAS_COR_MIX(estimated_alpha)
dif = beta_egls - beta_tested
F.kr_old = as.numeric(lam / p *
crossprod(dif,crossprod(solve(beta_covmat_old),dif)))
p.v_old <- pf(F.kr_old, df1 = p, df2 = m, lower.tail = FALSE, log.p FALSE)
F.kr_new = as.numeric(lam / p *
crossprod(dif,crossprod(solve(beta_covmat_new),dif)))
p.v_new <- pf(F.kr_new, df1 = p, df2 = m, lower.tail = FALSE, log.p FALSE)
list <- list(A1 = A1, A2 = A2, EF = EF, DF = DF, df1 = p, df2 = m, F_old
= F.kr_old,
F_new = F.kr_new, sig_old = p.v_old, sig_new = p.v_new, beta_egls beta_egls,
beta_covmat_old = beta_covmat_old, beta_covmat_new beta_covmat_new,model =
model)
list }
else if (model == "EXP") {
inner <- function(i,j,alpha) {
FI <- fi(sigma_EXP(alpha))
Pi <- pi_EXP(sigma_EXP(alpha),i)
Pj <- pi_EXP(sigma_EXP(alpha),j)
Qij <- qij_EXP(sigma_EXP(alpha),i,j)
Rij <- rij_EXP(sigma_EXP(alpha),i,j)
W <- expcovmat_EXP(alpha)
inner = matrix(nrow = ncol(x), ncol = ncol(x))
inner = W[i,j]*(Qij-crossprod(Pi,crossprod(FI,Pj))-1/4*Rij)
return(inner) }
INNER = matrix(0, nrow = ncol(x), ncol = ncol(x))
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) INNER = INNER +
inner(i,j,estimated_alpha) }
a1a2ij <- function(i,j,alpha) {
FI <- fi(sigma_EXP(alpha))
Pi <- pi_EXP(sigma_EXP(alpha),i)
Pj <- pi_EXP(sigma_EXP(alpha),j)
W <- expcovmat_EXP(alpha)
a1a2 = vector(mode = "numeric",length = 2)
a1a2[1] <- W[i,j]*tr(crossprod(FI,Pi))*tr(crossprod(FI,Pj))
a1a2[2] <- W[i,j]*tr(crossprod(crossprod(Pi,FI),crossprod(FI,Pj)))
return(a1a2) }
A1A2 = vector(mode = "numeric", length = 2)
for(i in 1:ncol(z)) { for(j in 1:ncol(z)) A1A2 = A1A2 +
a1a2ij(i,j,estimated_alpha) }
A1 = A1A2[1]
A2 = A1A2[2]
BIAS_COR_EXP <- function(alpha) {
SIGMA <- sigma_EXP(alpha)
FI <- fi(sigma_EXP(alpha))
W <- expcovmat_EXP(alpha)
IN = matrix(0, nrow = nrow(x), ncol = nrow(x))
for(i in 1:ncol(z)) {
for(j in 1:ncol(z)) IN = IN + W[i,j]*d2sigma.dalphaij_EXP(SIGMA,i,j) }
# is symmetric
S <- crossprod(solve(SIGMA),crossprod(IN,solve(SIGMA))) # is
symmetric
V <- function(t) {
ancillary1 <- crossprod(S,dsigma.dalphai_EXP(SIGMA,t)) # is
symmetric
ancillary2 <- crossprod(x,crossprod(S,x)) # is symmetric
v1 <- tr(ancillary1)
v2 <-
-2*tr(crossprod(sx(SIGMA),crossprod(ancillary1,crossprod(t(x),FI))))
v3 <-
-1*tr(crossprod(ancillary2,crossprod(FI,crossprod(pi_EXP(SIGMA,t),FI))))
v <- v1 + v2 + v3
return(v) }
bias = matrix(0, nrow = ncol(x), ncol = ncol(x))
for(t in 1:ncol(z)) {
for(s in 1:ncol(z))
bias = bias +
(-1/4)*W[t,s]*V(t)*crossprod(FI,crossprod(pi_EXP(SIGMA,s),FI)) }
return(bias) }
FI <- fi(sigma_EXP(estimated_alpha))
p <- ncol(x)
EF <- 1 + 1 / p * A2
DF <- 1 / p^2 * (A1 + 6 * A2 + 2 * p)
m <- 4 + (p + 2) / (p * DF / (2 * EF^2) - 1)
lam <- m / (EF * (m - 2))
beta_egls <-
crossprod(FI,crossprod(x,crossprod(solve(sigma_EXP(estimated_alpha)),y)))
beta_covmat_old <- FI + 2*crossprod(FI,crossprod(INNER,FI))
beta_covmat_new <- beta_covmat_old + BIAS_COR_EXP(estimated_alpha)
dif = beta_egls - beta_tested
F.kr_old = as.numeric(lam / p *
crossprod(dif,crossprod(solve(beta_covmat_old),dif)))
p.v_old <- pf(F.kr_old, df1 = p, df2 = m, lower.tail = FALSE, log.p FALSE)
F.kr_new = as.numeric(lam / p *
crossprod(dif,crossprod(solve(beta_covmat_new),dif)))
p.v_new <- pf(F.kr_new, df1 = p, df2 = m, lower.tail = FALSE, log.p FALSE)
list <- list(A1 = A1, A2 = A2, EF = EF, DF = DF, df1 = p, df2 = m, F_old
= F.kr_old,
F_new = F.kr_new, sig_old = p.v_old, sig_new = p.v_new, beta_egls beta_egls,
beta_covmat_old = beta_covmat_old, beta_covmat_new beta_covmat_new,model =
model)
list }
else return(cat("The wrong argument (model) - must be either >ADD<,
or>MIX<, or >EXP<.\n")) }
kenward_roger_both_print <- function(krprocedure) {
A1 = krprocedure$A1; A2 = krprocedure$A2; EF = krprocedure$EF; DF krprocedure$DF
p = krprocedure$df1; m = krprocedure$df2; F.kr_old = krprocedure$F_old
F.kr_new = krprocedure$F_new; p.v_new= krprocedure$sig_new; p.v_old
krprocedure$sig_old
beta_egls = krprocedure$beta_egls; beta_covmat_new krprocedure$beta_covmat_new
beta_covmat_old = krprocedure$beta_covmat_old; beta_egls krprocedure$beta_egls
if (krprocedure$model == "ADD") {
summary1 <-
cbind(data.frame("Parameter"=c("Estimates")),BETA=t(as.vector(beta_egls)))
summary2 <- cbind(BETA=beta_covmat_old)
cat("**Parameter estimates of the additive heteroskedasticity
model**\n")
cat("-----------------------------------------------------------------------------\n")
print(summary1,row.names=FALSE)
cat("-----------------------------------------------------------------------------\n")
cat("**Both original 1997 and new 2009 Kenward-Roger procedure**\n")
cat(" \n")
cat("**Kenward-Roger small-sample adjusted estimate of the
covmat(beta)**\n")
print(summary2,row.names=FALSE)
cat(" \n")
cat("Small-sample adjusted F-statistics =",F.kr_old,"\n")
cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
=",p.v_old,"\n")
cat("-----------------------------------------------------------------------------\n")
}
else if (krprocedure$model == "MIX") {
summary1 <-
cbind(data.frame("Parameter"=c("Estimates")),BETA=t(as.vector(beta_egls)))
summary2_old <- cbind(BETA=beta_covmat_old)
summary2_new <- cbind(BETA=beta_covmat_new)
cat("**Parameter estimates of the mixed heteroskedasticity model**\n")
cat("-----------------------------------------------------------------------------\n")
print(summary1,row.names=FALSE)
cat("-----------------------------------------------------------------------------\n")
cat("**Original 1997 Kenward-Roger procedure**\n")
cat(" \n")
cat("**Kenward-Roger small-sample adjusted estimate of the
covmat(beta)**\n")
print(summary2_old,row.names=FALSE)
cat(" \n")
cat("Small-sample adjusted F-statistics =",F.kr_old,"\n")
cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
=",p.v_old,"\n")
cat("-----------------------------------------------------------------------------\n")
cat("**New 2009 Kenward-Roger procedure**\n")
cat(" \n")
cat("**Kenward-Roger small-sample adjusted estimate of the
covmat(beta)**\n")
print(summary2_new,row.names=FALSE)
cat(" \n")
cat("Small-sample adjusted F-statistics =",F.kr_new,"\n")
cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
=",p.v_new,"\n")
cat("-----------------------------------------------------------------------------\n")
}
else {
summary1 <-
cbind(data.frame("Parameter"=c("Estimates")),BETA=t(as.vector(beta_egls)))
summary2_old <- cbind(BETA=beta_covmat_old)
summary2_new <- cbind(BETA=beta_covmat_new)
cat("**Parameter estimates of the multiplicative heteroskedasticity
model**\n")
cat("-----------------------------------------------------------------------------\n")
print(summary1,row.names=FALSE)
cat("-----------------------------------------------------------------------------\n")
cat("**Original 1997 Kenward-Roger procedure**\n")
cat(" \n")
cat("**Kenward-Roger small-sample adjusted estimate of the
covmat(beta)**\n")
print(summary2_old,row.names=FALSE)
cat(" \n")
cat("Small-sample adjusted F-statistics =",F.kr_old,"\n")
cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
=",p.v_old,"\n")
cat("-----------------------------------------------------------------------------\n")
cat("**New 2009 Kenward-Roger procedure**\n")
cat(" \n")
cat("**Kenward-Roger small-sample adjusted estimate of the
covmat(beta)**\n")
print(summary2_new,row.names=FALSE)
cat(" \n")
cat("Small-sample adjusted F-statistics =",F.kr_new,"\n")
cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
=",p.v_new,"\n")
cat("-----------------------------------------------------------------------------\n")
}}
######## generovanie vektora ypsilonov
##################################################
generate_y <- function(x,z,beta,alpha,model) { res as.matrix(rnorm(nrow(x)))
if (model == "ADD") {
sigma_add = diag(as.vector(alpha %*% t(z)), nrow=nrow(z), ncol=nrow(z))
y = crossprod(t(x),beta) + crossprod(sigma_add^(1/2),res)
return(y) }
else if (model == "MIX") {
sigma_mix = diag((as.vector(alpha %*% t(z)))^2, nrow=nrow(z),
ncol=nrow(z))
y = crossprod(t(x),beta) + crossprod(sigma_mix^(1/2),res)
return(y) }
else if (model == "EXP") {
sigma_exp = diag(exp(as.vector(alpha %*% t(z))), nrow=nrow(z),
ncol=nrow(z))
y = crossprod(t(x),beta) + crossprod(sigma_exp^(1/2),res)
return(y) }
else return(cat("The wrong argument (type)- must be either >ADD<,
or>MIX<, or >EXP<.\n")) }
######## pomocn? funkcie pre simulovanie
################################################
loglk <- function(simtype) { if (simtype == "ADD") reml.loglik_ADD
else if (simtype == "MIX") reml.loglik_MIX
else reml.loglik_EXP }
gradvec <- function(simtype) { if (simtype == "ADD") gradvec_ADD
else if (simtype == "MIX") gradvec_MIX
else gradvec_EXP }
hessmat <- function(simtype) { if (simtype == "ADD") hessmat_ADD
else if (simtype == "MIX") hessmat_MIX
else hessmat_EXP }
starter <- function(simtype,x,y) { if (simtype == "ADD")
abs(coefolsEST_ADD(x,y))
else if (simtype == "MIX") coefolsEST_MIX(x,y)
else coefolsEST_EXP(x,y) }
existencecheck <- function(object)
exists(as.character(substitute(object)))
#######################################################################################
x <- as.matrix(read.table("C:/maddala_70.txt", header = F)) # dan?
pevn? x
z <- as.matrix(read.table("C:/maddala_70.txt", header = F)) # dan?
pevn? z
nsimsgood=5000; beta=c(0.85,0.90); beta_tested=c(0.85,0.90)
alpha=c(1, 0.50); realtype="ADD"; simtype="ADD"; prob=0.05
heading = matrix(nrow = 1, ncol = 15 + 2*ncol(z) + 2*ncol(x)); i = 0;
j = 0;
name1 <-
c("SimNo","realHET","simHET",rep("realALPHA",ncol(z)),rep("estALPHA",ncol(z)))
name2 <-
c("estALPHAlikTYPE",rep("realBETA",ncol(x)),rep("estBETA",ncol(x)))
name3 <-
c("A1","A2","EF","DF","df1","df2")
name4 <-
c("Fstatisticsold","Fstatisticsnew","Fquantile","inAreaOld","inAreaNew")
heading[1,] <- c(name1,name2,name3,name4)
write.table(heading, file="70addadd__goods.csv", append=T, quote=T,
sep=";", row.names=F, col.names=F)
write.table(c("Unsuccessful simulations"),
file="70addadd__bads.csv",
append=T, quote=T, sep=";", row.names=F, col.names=F)
repeat {
y <<- generate_y(x,z,beta,alpha,realtype); x <<- x; z <<- z
row = matrix(nrow = 1, ncol = 15 + 2*ncol(z) + 2*ncol(x))
NR <-
try(maxNR(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
if (is.list(NR) == TRUE) kr_nr <-
kenward_roger_both(simtype,NR$estimate,beta_tested,x,y,z)
if (is.list(NR) == TRUE) NRcode <- NR$code else NRcode <- 99
if (existencecheck(kr_nr) == TRUE) kr_nrF_old <- kr_nr$F_old else
kr_nrF_old <- -99
if (existencecheck(kr_nr) == TRUE) kr_nrF_new <- kr_nr$F_new else
kr_nrF_new <- -99
if (existencecheck(kr_nr) == TRUE) qff <-
qf(prob,df1=kr_nr$df1,df2=kr_nr$df2,lower.tail=TRUE) else qff <- NaN
{ if ((NRcode == 0 | NRcode == 1) & (kr_nrF_old >= 0 & kr_nrF_new
>= 0 &
is.nan(qff) == FALSE)) { i = i + 1
A1 <- kr_nr$A1; A2 <- kr_nr$A2; EF <- kr_nr$EF; DF <- kr_nr$DF
df1 <- kr_nr$df1; df2 <- kr_nr$df2
Fold <- kr_nr$F_old; Fnew <- kr_nr$F_new
f <- qf(prob,df1=kr_nr$df1,df2=kr_nr$df2,lower.tail=TRUE)
rowi1 = c(i, realtype, simtype, alpha, NR$estimate,
c("Nephton-Raphson"), beta)
rowi2 = c(t(kr_nr$beta_egls), A1, A2, EF, DF, df1, df2)
rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
row[1,] = c(rowi1,rowi2,rowi3)
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
rm(y, NR, kr_nr, NRcode, kr_nrF_old, kr_nrF_new, qff) }
else { BFGS <-
try(maxBFGS(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
if (is.list(BFGS) == TRUE) kr_bfgs <-
kenward_roger_both(simtype,BFGS$estimate,beta_tested,x,y,z)
if (is.list(BFGS) == TRUE) BFGScode <- BFGS$code else BFGScode <- 99
if (existencecheck(kr_bfgs) == TRUE) kr_bfgsF_old <- kr_bfgs$F_old else
kr_bfgsF_old <- -99
if (existencecheck(kr_bfgs) == TRUE) kr_bfgsF_new <- kr_bfgs$F_new else
kr_bfgsF_new <- -99
if (existencecheck(kr_bfgs) == TRUE) qff <-
qf(prob,df1=kr_bfgs$df1,df2=kr_bfgs$df2,lower.tail=TRUE) else qff <- NaN
{ if ((BFGScode == 0) & (kr_bfgsF_old >= 0 & kr_bfgsF_new >= 0
&
is.nan(qff) == FALSE)) { i = i + 1
A1 <- kr_bfgs$A1; A2 <- kr_bfgs$A2; EF <- kr_bfgs$EF; DF <-
kr_bfgs$DF
df1 <- kr_bfgs$df1; df2 <- kr_bfgs$df2
Fold <- kr_bfgs$F_old; Fnew <- kr_bfgs$F_new
f <- qf(prob,df1=kr_bfgs$df1,df2=kr_bfgs$df2,lower.tail=TRUE)
rowi1 = c(i, realtype, simtype, alpha, BFGS$estimate, c("BFGS"), beta)
rowi2 = c(t(kr_bfgs$beta_egls), A1, A2, EF, DF, df1, df2)
rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
row[1,] = c(rowi1,rowi2,rowi3)
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
rm(y, BFGS, kr_bfgs, BFGScode, kr_bfgsF_old, kr_bfgsF_new, qff) }
else { NM <-
try(maxNM(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
if (is.list(NM) == TRUE) kr_nm <-
kenward_roger_both(simtype,NM$estimate,beta_tested,x,y,z)
if (is.list(NM) == TRUE) NMcode <- NM$code else NMcode <- 99
if (existencecheck(kr_nm) == TRUE) kr_nmF_old <- kr_nm$F_old else
kr_nmF_old <- -99
if (existencecheck(kr_nm) == TRUE) kr_nmF_new <- kr_nm$F_new else
kr_nmF_new <- -99
if (existencecheck(kr_nm) == TRUE) qff <-
qf(prob,df1=kr_nm$df1,df2=kr_nm$df2,lower.tail=TRUE) else qff <- NaN
{ if ((NMcode == 0) & (kr_nmF_old >= 0 & kr_nmF_new >= 0 &
is.nan(qff)
== FALSE)) { i = i + 1
A1 <- kr_nm$A1; A2 <- kr_nm$A2; EF <- kr_nm$EF; DF <- kr_nm$DF
df1 <- kr_nm$df1; df2 <- kr_nm$df2
Fold <- kr_nm$F_old; Fnew <- kr_nm$F_new
f <- qf(prob,df1=kr_nm$df1,df2=kr_nm$df2,lower.tail=TRUE)
rowi1 = c(i, realtype, simtype, alpha, NM$estimate, c("Nelder-Mead"),
beta)
rowi2 = c(t(kr_nm$beta_egls), A1, A2, EF, DF, df1, df2)
rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
row[1,] = c(rowi1,rowi2,rowi3)
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
rm(y, NN, kr_nm, NMcode, kr_nmF_old, kr_nmF_new, qff) }
else { SANN <-
try(maxSANN(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
if (is.list(SANN) == TRUE) kr_sann <-
kenward_roger_both(simtype,SANN$estimate,beta_tested,x,y,z)
if (is.list(SANN) == TRUE) SANNcode <- SANN$code else SANNcode <- 99
if (existencecheck(kr_sann) == TRUE) kr_sannF_old <- kr_sann$F_old else
kr_sannF_old <- -99
if (existencecheck(kr_sann) == TRUE) kr_sannF_new <- kr_sann$F_new else
kr_sannF_new <- -99
if (existencecheck(kr_sann) == TRUE) qff <-
qf(prob,df1=kr_sann$df1,df2=kr_sann$df2,lower.tail=TRUE) else qff <- NaN
{ if ((SANNcode == 0) & (kr_sannF_old >= 0 & kr_sannF_new >= 0
&
is.nan(qff) == FALSE)) { i = i + 1
A1 <- kr_sann$A1; A2 <- kr_sann$A2; EF <- kr_sann$EF; DF <-
kr_sann$DF
df1 <- kr_sann$df1; df2 <- kr_sann$df2
Fold <- kr_sann$F_old; Fnew <- kr_sann$F_new
f <- qf(prob,df1=kr_sann$df1,df2=kr_sann$df2,lower.tail=TRUE)
rowi1 = c(i, realtype, simtype, alpha, SANN$estimate, c("SANN"), beta)
rowi2 = c(t(kr_sann$beta_egls), A1, A2, EF, DF, df1, df2)
rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
row[1,] = c(rowi1,rowi2,rowi3)
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
rm(y, SANN, kr_sann, SANNcode, kr_sannF_old, kr_sannF_new, qff) }
else { j = j + 1
write.table(j,file="70addadd__bads.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
rm(y, NR, BFGS, NM, SANN, NRcode, BFGScode, NMcode, SANNcode,
kr_nrF_old, kr_bfgsF_old, kr_nmF_old, kr_sannF_old)
rm(qff, kr_nrF_new, kr_bfgsF_new, kr_nmF_new, kr_sannF_new)
if (existencecheck(kr_nr) == TRUE) rm(kr_nr)
if (existencecheck(kr_bfgs) == TRUE) rm(kr_bfgs)
if (existencecheck(kr_nm) == TRUE) rm(kr_nm)
if (existencecheck(kr_sann) == TRUE) rm(kr_sann) } } } } } } } } }
if (i == nsimsgood) break
cat("-----------------------------------------------------------------------------\n")
cat("Number of successful good simulations = ",i,"\n")
cat("Number of unsuccessful simulations = ",j,"\n")
cat("-----------------------------------------------------------------------------\n")
jim holtman
2010-Mar-27 18:28 UTC
[R] R runs in a usual way, but simulations are not performed
The script you sent seems to be too large for me to spend time debugging,
plus it seems that there are files being read that are not part of the
data. I would suggest that if you have a long running program that you put
messages (cat('reached part 1\n')) throughout the program so you can
trace
what it is doing. R typically does not stop on its own; it is only
following the directions of the program you have written and there is a bug
in it somewhere. So you will have to apply some basic debugging skills to
help you track it down.
There are a lot of things to look for. Does it take longer doing through
each loop (e.g., you have a vector that is growing and taking longer to
access). Is the system paging because you have run out of physical memory?
Do you have some condition in a 'while' loop that is never satisfied?
Only
you will be able to determine this after you have put some trace statements
in your program and localized where the problem is.
On Sat, Mar 27, 2010 at 7:19 AM, Nomen Omen <hcd@azet.sk> wrote:
> Dear addresses, I need perform a batch of 10 000 simulations for each of
> 4 options considered. (The idea is to obtain the parameter estimates in
> a heteroskedastic linear regression model - with additive or mixed
> heteroskedasticity - via the Kenward-Roger small-sample adjusted
> covariance matrix of disturbances). For this purpose I wrote an R
> program which would capture all possible options (true
> heteroskedasticity = additive or mixed / assumed heteroskedasticity >
additive or mixed): simulate data, compute ML estimates of covariance
> components parameters (on the basis of maxLik package), and compute the
> resulting beta estimates. Simulations are performed by repeat command
> and, after every simulation step, the result is exported to an external
> csv file. Since sometimes an error was encountered during the simulation
> and the entire program broke down, I made use of the function TRY at
> critical evaluation steps to prevent the cessation of the program
> evaluation: R evaluates the result and if there should be a problem, it
> moves onto another step. Therefore, I distinguish between bad
> simulations and good simulations (and have two csv files for the
> results). There, however, another problem arises: R seems to be working
> (computing), it is not frozen or anything like that, and yet the saving
> to the files stops. I should say that it looks as if R was functioning
> fully but the simulations stopped. It is possible that R went into an
> undesired loop for no reasons that I know of. It requires of me to
> service all computers and, after the simulations have frozen, to restart
> the repeat command, which is not sound for I cannot be (or perhaps am
> not willing to be) with computers non-stop. The computers I use are of
> 2GB RAM and R is the version 2.10.1 (2009-12-14). I have no idea where
> the problem can lie and how to solve it. Can you please give me some
> suggestions how to handle this obstacle to speedy simulating? I shall be
> much thankful for any suggestion. Later I paste the example of the set
> of commands that I use, all though it might be not sensible, because it
> all is too complicated. I am convinced that of foremost importance is
> the last repeat command. Thank you very much. Faithfully yours, Martin
> Boïa (Matej Bel University / Faculty of Natural Sciences / Banská
> Bystrica / Slovakia).
>
> # zavádza sériu podporných funkcií
> # zavádza trace, sigma, fi, xs, xs, fixs, sxfixs
>
> tr <- function(M) sum(diag(M))
> sigma_ADD <- function(alpha) diag(as.vector(alpha %*% t(z)),
> nrow=nrow(z), ncol=nrow(z))
> sigma_MIX <- function(alpha) diag((as.vector(alpha %*% t(z)))^2,
> nrow=nrow(z), ncol=nrow(z))
> sigma_EXP <- function(alpha) diag(exp(as.vector(alpha %*% t(z))),
> nrow=nrow(z), ncol=nrow(z))
>
> fi <- function(sigma) solve(crossprod(x, crossprod(solve(sigma),x)))
>
> xs <- function(sigma) crossprod(x,solve(sigma))
> sx <- function(sigma) crossprod(solve(sigma),x)
> fixs <- function(sigma) crossprod(fi(sigma),xs(sigma))
> sxfixs <- function(sigma)
> crossprod(xs(sigma),crossprod(fi(sigma),xs(sigma)))
>
> # zavádza (ncol(z) x 1) vektor núl, ktorý má na i-tom mieste 1
>
> ei <- function(i) { ei = rep(0,ncol(z))
> ei[i] = 1
> return(ei) }
>
> # zavádza deriváciu dSIGMA/dalfa_i a zmie¹anú deriváciu
> (dSIGMA^2)/(ddalfa_i*dalfa_j)
> # zavádza maticový súèin (sigma)^(-1)*dSIGMA/dalfa_i
> # zavádza maticový súèin (sigma)^(-1)*dSIGMA/dalfa_i*(sigma)^(-1)
>
> dsigma.dalphai_ADD <- function(i) {
> diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z), ncol=nrow(z)) }
> dsigma.dalphai_MIX <- function(sigma,i) {
> 2*crossprod(diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z),
> ncol=nrow(z)),sigma^(1/2)) }
> dsigma.dalphai_EXP <- function(sigma,i) {
> crossprod(diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z),
> ncol=nrow(z)),sigma) }
>
> d2sigma.dalphaij_MIX <- function(i,j) {
> eiz <- diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
> ejz <- diag(as.vector(ei(j) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
> d2sigma.dalphaij <- 2*crossprod(eiz,ejz)
> return(d2sigma.dalphaij) }
> d2sigma.dalphaij_EXP <- function(sigma,i,j) {
> eiz <- diag(as.vector(ei(i) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
> ejz <- diag(as.vector(ei(j) %*% t(z)), nrow=nrow(z), ncol=nrow(z))
> d2sigma.dalphaij <- crossprod(crossprod(eiz,ejz),sigma)
> return(d2sigma.dalphaij) }
>
> sigmaDERIVi_ADD <- function(sigma,i)
> crossprod(solve(sigma),dsigma.dalphai_ADD(i))
> sigmaDERIVi_MIX <- function(sigma,i)
> crossprod(solve(sigma),dsigma.dalphai_MIX(sigma,i))
> sigmaDERIVi_EXP <- function(sigma,i)
> crossprod(solve(sigma),dsigma.dalphai_EXP(sigma,i))
>
> sigmaDERIVisigma_ADD <- function(sigma,i) {
> crossprod(solve(sigma),crossprod(dsigma.dalphai_ADD(i),solve(sigma))) }
> sigmaDERIVisigma_MIX <- function(sigma,i) {
> crossprod(solve(sigma),crossprod(dsigma.dalphai_MIX(sigma,i),solve(sigma)))
> }
> sigmaDERIVisigma_EXP <- function(sigma,i) {
> crossprod(solve(sigma),crossprod(dsigma.dalphai_EXP(sigma,i),solve(sigma)))
> }
>
>
> # zavádza pi, qij, rij (iba pre zmie¹ané a multiplikatívny model
> heteroskedasticity)
>
> pi_ADD <- function(sigma,i)
> -1*crossprod(x,crossprod(sigmaDERIVisigma_ADD(sigma,i),x))
> pi_MIX <- function(sigma,i)
> -1*crossprod(x,crossprod(sigmaDERIVisigma_MIX(sigma,i),x))
> pi_EXP <- function(sigma,i)
> -1*crossprod(x,crossprod(sigmaDERIVisigma_EXP(sigma,i),x))
>
> qij_ADD <- function(sigma,i,j) {
> SX <- sx(sigma)
> dSIGMA.dalphaj <- dsigma.dalphai_ADD(j)
> SIGMAderivi <- sigmaDERIVi_ADD(sigma,i)
> qij <- crossprod(SX,crossprod(SIGMAderivi,crossprod(dSIGMA.dalphaj,SX)))
> return(qij) }
> qij_MIX <- function(sigma,i,j) {
> SX <- sx(sigma)
> dSIGMA.dalphaj <- dsigma.dalphai_MIX(sigma,j)
> SIGMAderivi <- sigmaDERIVi_MIX(sigma,i)
> qij <- crossprod(SX,crossprod(SIGMAderivi,crossprod(dSIGMA.dalphaj,SX)))
> return(qij) }
> qij_EXP <- function(sigma,i,j) {
> SX <- sx(sigma)
> dSIGMA.dalphaj <- dsigma.dalphai_EXP(sigma,j)
> SIGMAderivi <- sigmaDERIVi_EXP(sigma,i)
> qij <- crossprod(SX,crossprod(SIGMAderivi,crossprod(dSIGMA.dalphaj,SX)))
> return(qij) }
>
> rij_MIX <- function(sigma,i,j)
> crossprod(sx(sigma),crossprod(d2sigma.dalphaij_MIX(i,j),sx(sigma)))
> rij_EXP <- function(sigma,i,j) {
> crossprod(sx(sigma),crossprod(d2sigma.dalphaij_EXP(sigma,i,j),sx(sigma)))
> }
>
> # zavádza funkciu pre stanovenie REML likelihood
> # je funkciou alpha conditional on x, y, z
>
>
>
#########################################################################################
> reml.loglik_ADD <- function(alpha) { SIGMA <- sigma_ADD(alpha)
> a <- -0.5*log(det(SIGMA))
> b <- -0.5*log(det(crossprod(x,crossprod(solve(SIGMA),x))))
> c <-
> -0.5*as.numeric(crossprod(y,crossprod(solve(SIGMA)-sxfixs(SIGMA),y)))
> logl <- a + b + c
> return(logl) }
>
> reml.loglik_MIX <- function(alpha) { SIGMA <- sigma_MIX(alpha)
> a <- -0.5*log(det(SIGMA))
> b <- -0.5*log(det(crossprod(x,crossprod(solve(SIGMA),x))))
> c <-
> -0.5*as.numeric(crossprod(y,crossprod(solve(SIGMA)-sxfixs(SIGMA),y)))
> logl <- a + b + c
> return(logl) }
>
> reml.loglik_EXP <- function(alpha) { SIGMA <- sigma_EXP(alpha)
> a <- -0.5*log(det(SIGMA))
> b <- -0.5*log(det(crossprod(x,crossprod(solve(SIGMA),x))))
> c <-
> -0.5*as.numeric(crossprod(y,crossprod(solve(SIGMA)-sxfixs(SIGMA),y)))
> logl <- a + b + c
> return(logl) }
>
>
#########################################################################################
>
> # zavádza funkciu pre stanovenie gradientného vektora pre REML
> likelihood
> # je funkciou alpha conditional on x, y, z
> # obsahuje podfunkciu dl.dalphai, ktorá spoèítava deriváciu
> likelihood function podµa alpha i
>
>
>
#########################################################################################
> ######## gradientný vektor aditívneho modelu
> ############################################
>
> gradvec_ADD = function(alpha) { dl.dalphai <- function(i) {
>
> SIGMA <- sigma_ADD(alpha)
> FI <- fi(SIGMA)
> FIxs <- fixs(SIGMA)
> sxFIxs <- sxfixs(SIGMA)
> Pi <- pi_ADD(SIGMA,i)
>
> dSIGMA.dalphai <- dsigma.dalphai_ADD(i)
> SIGMAderiviSIGMA <- sigmaDERIVisigma_ADD(SIGMA,i)
>
> dl.dalphai.1 <- -1/2*tr(crossprod(solve(SIGMA),dSIGMA.dalphai ))
> dl.dalphai.2 <- -1/2*tr(crossprod(FI,Pi))
> dl.dalphai.3 <-
> +1/2*as.numeric(crossprod(y,crossprod(SIGMAderiviSIGMA,y)))
> INSIDE1 <- crossprod(FIxs,crossprod(Pi,FIxs))
> dl.dalphai.4 <- -1/2*as.numeric(crossprod(y,crossprod(INSIDE1,y)))
> INSIDE2 <- crossprod(solve(SIGMA),crossprod(dSIGMA.dalphai ,sxFIxs))
> dl.dalphai.5 <-
> +1/2*(-2)*as.numeric(crossprod(y,crossprod(t(INSIDE2),y)))
>
> dl.dalphai = dl.dalphai.1 + dl.dalphai.2 + dl.dalphai.3 + dl.dalphai.4 +
> dl.dalphai.5
>
> return(dl.dalphai)}
>
>
> grad = rep(dl.dalphai(1),c(1))
>
> for(i in 2:length(alpha)) {
> grad = append(grad,rep(dl.dalphai(i),c(1)), after = c(i)) }
>
> return(grad) }
>
> ######## gradientný vektor zmie¹aného modelu
> ############################################
>
> gradvec_MIX = function(alpha) { dl.dalphai <- function(i) {
>
> SIGMA <- sigma_MIX(alpha)
> FI <- fi(SIGMA)
> FIxs <- fixs(SIGMA)
> sxFIxs <- sxfixs(SIGMA)
> Pi <- pi_MIX(SIGMA,i)
>
> dSIGMA.dalphai <- dsigma.dalphai_MIX(SIGMA,i)
> SIGMAderiviSIGMA <- sigmaDERIVisigma_MIX(SIGMA,i)
>
> dl.dalphai.1 <- -1/2*tr(crossprod(solve(SIGMA),dSIGMA.dalphai ))
> dl.dalphai.2 <- -1/2*tr(crossprod(FI,Pi))
> dl.dalphai.3 <-
> +1/2*as.numeric(crossprod(y,crossprod(SIGMAderiviSIGMA,y)))
> INSIDE1 <- crossprod(FIxs,crossprod(Pi,FIxs))
> dl.dalphai.4 <- -1/2*as.numeric(crossprod(y,crossprod(INSIDE1,y)))
> INSIDE2 <- crossprod(solve(SIGMA),crossprod(dSIGMA.dalphai ,sxFIxs))
> dl.dalphai.5 <-
> +1/2*(-2)*as.numeric(crossprod(y,crossprod(t(INSIDE2),y)))
>
> dl.dalphai = dl.dalphai.1 + dl.dalphai.2 + dl.dalphai.3 + dl.dalphai.4 +
> dl.dalphai.5
>
> return(dl.dalphai)}
>
>
> grad = rep(dl.dalphai(1),c(1))
>
> for(i in 2:length(alpha)) {
> grad = append(grad,rep(dl.dalphai(i),c(1)), after = c(i)) }
>
> return(grad) }
>
> ######## gradientný vektor multiplikatívneho modelu
> #####################################
>
> gradvec_EXP = function(alpha) { dl.dalphai <- function(i) {
>
> SIGMA <- sigma_EXP(alpha)
> FI <- fi(SIGMA)
> FIxs <- fixs(SIGMA)
> sxFIxs <- sxfixs(SIGMA)
> Pi <- pi_EXP(SIGMA,i)
>
> dSIGMA.dalphai <- dsigma.dalphai_EXP(SIGMA,i)
> SIGMAderiviSIGMA <- sigmaDERIVisigma_EXP(SIGMA,i)
>
> dl.dalphai.1 <- -1/2*tr(crossprod(solve(SIGMA),dSIGMA.dalphai ))
> dl.dalphai.2 <- -1/2*tr(crossprod(FI,Pi))
> dl.dalphai.3 <-
> +1/2*as.numeric(crossprod(y,crossprod(SIGMAderiviSIGMA,y)))
> INSIDE1 <- crossprod(FIxs,crossprod(Pi,FIxs))
> dl.dalphai.4 <- -1/2*as.numeric(crossprod(y,crossprod(INSIDE1,y)))
> INSIDE2 <- crossprod(solve(SIGMA),crossprod(dSIGMA.dalphai ,sxFIxs))
> dl.dalphai.5 <-
> +1/2*(-2)*as.numeric(crossprod(y,crossprod(t(INSIDE2),y)))
>
> dl.dalphai = dl.dalphai.1 + dl.dalphai.2 + dl.dalphai.3 + dl.dalphai.4 +
> dl.dalphai.5
>
> return(dl.dalphai)}
>
>
> grad = rep(dl.dalphai(1),c(1))
>
> for(i in 2:length(alpha)) {
> grad = append(grad,rep(dl.dalphai(i),c(1)), after = c(i)) }
>
> return(grad) }
>
>
>
#########################################################################################
>
> # zavádza funkciu pre stanovenie Hessovej matice pre REML likelihood
> # je funkciou alpha conditional on x, y, z
> # obsahuje podfunkciu d2l.dalphaij, èo spoèítava druhú deriváciu
> loglikelihood podµa alpha i a alpha j
>
>
>
#########################################################################################
> ######## Hessova matica aditívneho modelu
> ##############################################
>
> hessmat_ADD = function(alpha) {
>
> hess = matrix(nrow = ncol(z), ncol = ncol(z))
>
> d2l.dalphaij <- function(i,j) {
>
> SIGMA <- sigma_ADD(alpha)
> FI <- fi(SIGMA)
> XS <- xs(SIGMA)
> SX <- sx(SIGMA)
> FIxs <- fixs(SIGMA)
> sxFI <- t(FIxs)
> sxFIxs <- sxfixs(SIGMA)
> Pi <- pi_ADD(SIGMA,i)
> Pj <- pi_ADD(SIGMA,j)
> Qij <- qij_ADD(SIGMA,i,j)
> dSIGMA.dalphai <- dsigma.dalphai_ADD(i)
> dSIGMA.dalphaj <- dsigma.dalphai_ADD(j)
> SIGMAderiviSIGMA <- sigmaDERIVisigma_ADD(SIGMA,i)
> SIGMAderivjSIGMA <- sigmaDERIVisigma_ADD(SIGMA,j)
> SIGMAderivi <- sigmaDERIVi_ADD(SIGMA,i)
> SIGMAderivj <- sigmaDERIVi_ADD(SIGMA,j)
>
> d2l.dalphaij.11 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
> d2l.dalphaij.12 = 0
> d2l.dalpahij.21 = 1/2*tr(crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
> d2l.dalphaij.22 = -1*tr(crossprod(FI,Qij))
> d2l.dalphaij.23 = 0
> d2l.dalphaij.31 >
-1*crossprod(y,crossprod(t(SIGMAderivj),crossprod(SIGMAderiviSIGMA,y)))
> d2l.dalphaij.32 = 0
> d2l.dalphaij.41 >
>
crossprod(y,crossprod(t(SIGMAderivj),crossprod(FIxs,crossprod(Pi,crossprod(sxFI,y)))))
> d2l.dalphaij.42 >
>
crossprod(y,crossprod(FIxs,crossprod(Pi,crossprod(FI,crossprod(Pj,crossprod(sxFI,y))))))
> d2l.dalphaij.43 >
-1*crossprod(y,crossprod(FIxs,crossprod(Qij,crossprod(sxFI,y))))
> d2l.dalphaij.44 = 0
> d2l.dalphaij.51 >
>
crossprod(y,crossprod(t(SIGMAderivj),crossprod(t(SIGMAderivi),crossprod(sxFIxs,y))))
> d2l.dalphaij.52 = 0
> d2l.dalphaij.53 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(t(SIGMAderivj),crossprod(sxFIxs,y))))
> d2l.dalphaij.54 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(FIxs,crossprod(Pj,crossprod(sxFI,y)))))
> d2l.dalphaij.55 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(sxFIxs,crossprod(SIGMAderivj,y))))
>
> d2l.dalphaij = d2l.dalphaij.11 + d2l.dalphaij.12 + d2l.dalpahij.21 +
> d2l.dalphaij.22 + d2l.dalphaij.23 +
> d2l.dalphaij.31 + d2l.dalphaij.32 + d2l.dalphaij.41 + d2l.dalphaij.42 +
> d2l.dalphaij.43 +
> d2l.dalphaij.44 + d2l.dalphaij.51 + d2l.dalphaij.52 + d2l.dalphaij.53 +
> d2l.dalphaij.54 +
> d2l.dalphaij.55
>
> return(d2l.dalphaij)}
>
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) hess[i,j] = d2l.dalphaij(i,j)
> }
>
> return(hess)}
>
> ######## Hessova matica zmie¹aného modelu
> ##############################################
>
> hessmat_MIX = function(alpha) {
>
> hess = matrix(nrow = ncol(z), ncol = ncol(z))
>
> d2l.dalphaij <- function(i,j) {
>
> SIGMA <- sigma_MIX(alpha)
> FI <- fi(SIGMA)
> XS <- xs(SIGMA)
> SX <- sx(SIGMA)
> FIxs <- fixs(SIGMA)
> sxFI <- t(FIxs)
> sxFIxs <- sxfixs(SIGMA)
> Pi <- pi_MIX(SIGMA,i)
> Pj <- pi_MIX(SIGMA,j)
> Qij <- qij_MIX(SIGMA,i,j)
> Rij<- rij_MIX(SIGMA,i,j)
> dSIGMA.dalphai <- dsigma.dalphai_MIX(SIGMA,i)
> dSIGMA.dalphaj <- dsigma.dalphai_MIX(SIGMA,j)
> d2SIGMA.dalphaij <- d2sigma.dalphaij_MIX(i,j)
> SIGMAderiviSIGMA <- sigmaDERIVisigma_MIX(SIGMA,i)
> SIGMAderivjSIGMA <- sigmaDERIVisigma_MIX(SIGMA,j)
> SIGMAderivi <- sigmaDERIVi_MIX(SIGMA,i)
> SIGMAderivj <- sigmaDERIVi_MIX(SIGMA,j)
>
> d2l.dalphaij.11 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
> d2l.dalphaij.12 = -1/2*tr(crossprod(solve(SIGMA),d2SIGMA.dalphaij))
> d2l.dalpahij.21 = 1/2*tr(crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
> d2l.dalphaij.22 = -1*tr(crossprod(FI,Qij))
> d2l.dalphaij.23 = 1/2*tr(crossprod(FI,Rij))
> d2l.dalphaij.31 >
-1*crossprod(y,crossprod(t(SIGMAderivj),crossprod(SIGMAderiviSIGMA,y)))
> d2l.dalphaij.32 >
>
1/2*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(solve(SIGMA),y))))
> d2l.dalphaij.41 >
>
crossprod(y,crossprod(t(SIGMAderivj),crossprod(FIxs,crossprod(Pi,crossprod(sxFI,y)))))
> d2l.dalphaij.42 >
>
crossprod(y,crossprod(FIxs,crossprod(Pi,crossprod(FI,crossprod(Pj,crossprod(sxFI,y))))))
> d2l.dalphaij.43 >
-1*crossprod(y,crossprod(FIxs,crossprod(Qij,crossprod(sxFI,y))))
> d2l.dalphaij.44 >
1/2*crossprod(y,crossprod(FIxs,crossprod(Rij,crossprod(sxFI,y))))
> d2l.dalphaij.51 >
>
crossprod(y,crossprod(t(SIGMAderivj),crossprod(t(SIGMAderivi),crossprod(sxFIxs,y))))
> d2l.dalphaij.52 >
>
-1*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(sxFIxs,y))))
> d2l.dalphaij.53 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(t(SIGMAderivj),crossprod(sxFIxs,y))))
> d2l.dalphaij.54 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(FIxs,crossprod(Pj,crossprod(sxFI,y)))))
> d2l.dalphaij.55 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(sxFIxs,crossprod(SIGMAderivj,y))))
>
> d2l.dalphaij = d2l.dalphaij.11 + d2l.dalphaij.12 + d2l.dalpahij.21 +
> d2l.dalphaij.22 + d2l.dalphaij.23 +
> d2l.dalphaij.31 + d2l.dalphaij.32 + d2l.dalphaij.41 + d2l.dalphaij.42 +
> d2l.dalphaij.43 +
> d2l.dalphaij.44 + d2l.dalphaij.51 + d2l.dalphaij.52 + d2l.dalphaij.53 +
> d2l.dalphaij.54 +
> d2l.dalphaij.55
>
> return(d2l.dalphaij)}
>
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) hess[i,j] = d2l.dalphaij(i,j)
> }
>
> return(hess)}
>
> ######## Hessova matica multiplikatívneho modelu
> #######################################
>
> hessmat_EXP = function(alpha) {
>
> hess = matrix(nrow = ncol(z), ncol = ncol(z))
>
> d2l.dalphaij <- function(i,j) {
>
> SIGMA <- sigma_EXP(alpha)
> FI <- fi(SIGMA)
> XS <- xs(SIGMA)
> SX <- sx(SIGMA)
> FIxs <- fixs(SIGMA)
> sxFI <- t(FIxs)
> sxFIxs <- sxfixs(SIGMA)
> Pi <- pi_EXP(SIGMA,i)
> Pj <- pi_EXP(SIGMA,j)
> Qij <- qij_EXP(SIGMA,i,j)
> Rij<- rij_EXP(SIGMA,i,j)
> dSIGMA.dalphai <- dsigma.dalphai_EXP(SIGMA,i)
> dSIGMA.dalphaj <- dsigma.dalphai_EXP(SIGMA,j)
> d2SIGMA.dalphaij <- d2sigma.dalphaij_EXP(SIGMA,i,j)
> SIGMAderiviSIGMA <- sigmaDERIVisigma_EXP(SIGMA,i)
> SIGMAderivjSIGMA <- sigmaDERIVisigma_EXP(SIGMA,j)
> SIGMAderivi <- sigmaDERIVi_EXP(SIGMA,i)
> SIGMAderivj <- sigmaDERIVi_EXP(SIGMA,j)
>
>
>
> d2l.dalphaij.11 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
> d2l.dalphaij.12 = -1/2*tr(crossprod(solve(SIGMA),d2SIGMA.dalphaij))
> d2l.dalpahij.21 = 1/2*tr(crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
> d2l.dalphaij.22 = -1*tr(crossprod(FI,Qij))
> d2l.dalphaij.23 = 1/2*tr(crossprod(FI,Rij))
> d2l.dalphaij.31 >
-1*crossprod(y,crossprod(t(SIGMAderivj),crossprod(SIGMAderiviSIGMA,y)))
> d2l.dalphaij.32 >
>
1/2*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(solve(SIGMA),y))))
> d2l.dalphaij.41 >
>
crossprod(y,crossprod(t(SIGMAderivj),crossprod(FIxs,crossprod(Pi,crossprod(sxFI,y)))))
> d2l.dalphaij.42 >
>
crossprod(y,crossprod(FIxs,crossprod(Pi,crossprod(FI,crossprod(Pj,crossprod(sxFI,y))))))
> d2l.dalphaij.43 >
-1*crossprod(y,crossprod(FIxs,crossprod(Qij,crossprod(sxFI,y))))
> d2l.dalphaij.44 >
1/2*crossprod(y,crossprod(FIxs,crossprod(Rij,crossprod(sxFI,y))))
> d2l.dalphaij.51 >
>
crossprod(y,crossprod(t(SIGMAderivj),crossprod(t(SIGMAderivi),crossprod(sxFIxs,y))))
> d2l.dalphaij.52 >
>
-1*crossprod(y,crossprod(solve(SIGMA),crossprod(d2SIGMA.dalphaij,crossprod(sxFIxs,y))))
> d2l.dalphaij.53 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(t(SIGMAderivj),crossprod(sxFIxs,y))))
> d2l.dalphaij.54 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(FIxs,crossprod(Pj,crossprod(sxFI,y)))))
> d2l.dalphaij.55 >
>
crossprod(y,crossprod(t(SIGMAderivi),crossprod(sxFIxs,crossprod(SIGMAderivj,y))))
>
> d2l.dalphaij = d2l.dalphaij.11 + d2l.dalphaij.12 + d2l.dalpahij.21 +
> d2l.dalphaij.22 + d2l.dalphaij.23 +
> d2l.dalphaij.31 + d2l.dalphaij.32 + d2l.dalphaij.41 + d2l.dalphaij.42 +
> d2l.dalphaij.43 +
> d2l.dalphaij.44 + d2l.dalphaij.51 + d2l.dalphaij.52 + d2l.dalphaij.53 +
> d2l.dalphaij.54 +
> d2l.dalphaij.55
>
> return(d2l.dalphaij)}
>
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) hess[i,j] = d2l.dalphaij(i,j)
> }
>
> return(hess)}
>
>
>
#########################################################################################
> ######## zavádza information matrices a kovarianèné matice
> aditívneho modelu ############
>
> # expected information matrix
>
> expmat_ADD <- function(alpha) { mat = matrix(nrow = ncol(z), ncol >
ncol(z))
>
> matij <- function(i,j) {
>
> SIGMA <- sigma_ADD(alpha)
> FI <- fi(SIGMA)
> Pi <- pi_ADD(SIGMA,i)
> Pj <- pi_ADD(SIGMA,j)
> Qij <- qij_ADD(SIGMA,i,j)
> SIGMAderivi <- sigmaDERIVi_ADD(SIGMA,i)
> SIGMAderivj <- sigmaDERIVi_ADD(SIGMA,j)
>
> matij.1 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
> matij.2 >
-1*tr(crossprod(FI,Qij)-1/2*crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
>
> matij = matij.1 + matij.2
>
> return(matij)}
>
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) mat[i,j] = matij(i,j) }
>
> return(mat)}
>
> # observed information matrix & average infromation matrix
>
> obsmat_ADD <- function(alpha) -1*hessmat_ADD(alpha)
> avgmat_ADD <- function(alpha) 1/2*(obsmat_ADD(alpha) +
> expmat_ADD(alpha))
>
> expcovmat_ADD <- function(alpha) solve(expmat_ADD(alpha))
> obscovmat_ADD <- function(alpha) solve(obsmat_ADD(alpha))
> avgcovmat_ADD <- function(alpha) solve(avgmat_ADD(alpha))
>
> ######## zavádza information matrices a kovarianèné matice
> zmie¹aného modelu ############
>
> # expected information matrix
>
> expmat_MIX = function(alpha) { mat = matrix(nrow = ncol(z), ncol >
ncol(z))
>
> matij <- function(i,j) {
>
> SIGMA <- sigma_MIX(alpha)
> FI <- fi(SIGMA)
> Pi <- pi_MIX(SIGMA,i)
> Pj <- pi_MIX(SIGMA,j)
> Qij <- qij_MIX(SIGMA,i,j)
> SIGMAderivi <- sigmaDERIVi_MIX(SIGMA,i)
> SIGMAderivj <- sigmaDERIVi_MIX(SIGMA,j)
>
> matij.1 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
> matij.2 >
-1*tr(crossprod(FI,Qij)-1/2*crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
>
> matij = matij.1 + matij.2
>
> return(matij)}
>
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) mat[i,j] = matij(i,j) }
>
> return(mat)}
>
> # observed information matrix & average infromation matrix
>
> obsmat_MIX <- function(alpha) -1*hessmat_MIX(alpha)
> avgmat_MIX <- function(alpha) 1/2*(obsmat_MIX(alpha) +
> expmat_MIX(alpha))
>
> expcovmat_MIX <- function(alpha) solve(expmat_MIX(alpha))
> obscovmat_MIX <- function(alpha) solve(obsmat_MIX(alpha))
> avgcovmat_MIX <- function(alpha) solve(avgmat_MIX(alpha))
>
> ######## zavádza information matrices a kovarianèné matice
> mutliplikatívneho modelu #####
>
> # expected information matrix
>
> expmat_EXP = function(alpha) { mat = matrix(nrow = ncol(z), ncol >
ncol(z))
>
> matij <- function(i,j) {
>
> SIGMA <- sigma_EXP(alpha)
> FI <- fi(SIGMA)
> Pi <- pi_EXP(SIGMA,i)
> Pj <- pi_EXP(SIGMA,j)
> Qij <- qij_EXP(SIGMA,i,j)
> SIGMAderivi <- sigmaDERIVi_EXP(SIGMA,i)
> SIGMAderivj <- sigmaDERIVi_EXP(SIGMA,j)
>
> matij.1 = 1/2*tr(crossprod(t(SIGMAderivi),SIGMAderivj))
> matij.2 >
-1*tr(crossprod(FI,Qij)-1/2*crossprod(FI,crossprod(Pi,crossprod(FI,Pj))))
>
> matij = matij.1 + matij.2
>
> return(matij)}
>
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) mat[i,j] = matij(i,j) }
>
> return(mat)}
>
> # observed information matrix & average infromation matrix
>
> obsmat_EXP <- function(alpha) -1*hessmat_EXP(alpha)
> avgmat_EXP <- function(alpha) 1/2*(obsmat_EXP(alpha) +
> expmat_EXP(alpha))
>
> expcovmat_EXP <- function(alpha) solve(expmat_EXP(alpha))
> obscovmat_EXP <- function(alpha) solve(obsmat_EXP(alpha))
> avgcovmat_EXP <- function(alpha) solve(avgmat_EXP(alpha))
>
>
>
#########################################################################################
>
> # zavádza kni¾nicu maxLik
>
> library(maxLik)
>
> # zavedie ¹tartovacie hodnoty jednotky pre alpha
>
> beta_ols <- function(x,y) crossprod(solve(crossprod(x)), crossprod(x,y))
> resids_ols <- function(x,y) (y - crossprod(t(x),beta_ols(x,y)))
> alpha_ols_ADD <- function(x,y)
> crossprod(solve(crossprod(z)),crossprod(z,resids_ols(x,y)^2))
> alpha_ols_MIX <- function(x,y)
> crossprod(solve(crossprod(z)),crossprod(z,abs(resids_ols(x,y))))
> alpha_ols_EXP <- function(x,y)
> crossprod(solve(crossprod(z)),crossprod(z,log(resids_ols(x,y)^2)))
> coefolsEST_ADD <- function(x,y) t(alpha_ols_ADD(x,y))
> coefolsEST_MIX <- function(x,y) t(alpha_ols_MIX(x,y))
> coefolsEST_EXP <- function(x,y) t(alpha_ols_EXP(x,y))
>
>
> kenward_roger_both <- function(model,estimated_alpha,beta_tested,x,y,z)
> { x = x; y = y; z = z
> if (model == "ADD") {
> inner <- function(i,j,alpha) {
> FI <- fi(sigma_ADD(alpha))
> Pi <- pi_ADD(sigma_ADD(alpha),i)
> Pj <- pi_ADD(sigma_ADD(alpha),j)
> Qij <- qij_ADD(sigma_ADD(alpha),i,j)
> W <- expcovmat_ADD(alpha)
> inner = matrix(nrow = ncol(x), ncol = ncol(x))
> inner = W[i,j]*(Qij-crossprod(Pi,crossprod(FI,Pj)))
> return(inner) }
> INNER = matrix(0, nrow = ncol(x), ncol = ncol(x))
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) INNER = INNER +
> inner(i,j,estimated_alpha) }
> a1a2ij <- function(i,j,alpha) {
> FI <- fi(sigma_ADD(alpha))
> Pi <- pi_ADD(sigma_ADD(alpha),i)
> Pj <- pi_ADD(sigma_ADD(alpha),j)
> W <- expcovmat_ADD(alpha)
> a1a2 = vector(mode = "numeric",length = 2)
> a1a2[1] <- W[i,j]*tr(crossprod(FI,Pi))*tr(crossprod(FI,Pj))
> a1a2[2] <- W[i,j]*tr(crossprod(crossprod(Pi,FI),crossprod(FI,Pj)))
> return(a1a2) }
> A1A2 = vector(mode = "numeric", length = 2)
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) A1A2 = A1A2 +
> a1a2ij(i,j,estimated_alpha) }
> A1 = A1A2[1]
> A2 = A1A2[2]
>
> FI <- fi(sigma_ADD(estimated_alpha))
> p <- ncol(x)
> EF <- 1 + 1 / p * A2
> DF <- 1 / p^2 * (A1 + 6 * A2 + 2 * p)
> m <- 4 + (p + 2) / (p * DF / (2 * EF^2) - 1)
> lam <- m / (EF * (m - 2))
>
> beta_egls <-
> crossprod(FI,crossprod(x,crossprod(solve(sigma_ADD(estimated_alpha)),y)))
> beta_covmat_old <- FI + 2*crossprod(FI,crossprod(INNER,FI))
>
> dif = beta_egls - beta_tested
>
> F.kr = as.numeric(lam / p *
> crossprod(dif,crossprod(solve(beta_covmat_old),dif)))
> p.v <- pf(F.kr, df1 = p, df2 = m, lower.tail = FALSE, log.p = FALSE)
>
> list <- list(A1 = A1, A2 = A2, EF = EF, DF = DF, df1 = p, df2 = m, F_old
> = F.kr,
> F_new = F.kr, sig_old = p.v, sig_new = p.v, beta_egls = beta_egls,
> beta_covmat_old = beta_covmat_old, beta_covmat_new >
beta_covmat_old,model = model)
> list }
>
>
> else if (model == "MIX") {
> inner <- function(i,j,alpha) {
> FI <- fi(sigma_MIX(alpha))
> Pi <- pi_MIX(sigma_MIX(alpha),i)
> Pj <- pi_MIX(sigma_MIX(alpha),j)
> Qij <- qij_MIX(sigma_MIX(alpha),i,j)
> Rij <- rij_MIX(sigma_MIX(alpha),i,j)
> W <- expcovmat_MIX(alpha)
> inner = matrix(nrow = ncol(x), ncol = ncol(x))
> inner = W[i,j]*(Qij-crossprod(Pi,crossprod(FI,Pj))-1/4*Rij)
> return(inner) }
> INNER = matrix(0, nrow = ncol(x), ncol = ncol(x))
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) INNER = INNER +
> inner(i,j,estimated_alpha) }
> a1a2ij <- function(i,j,alpha) {
> FI <- fi(sigma_MIX(alpha))
> Pi <- pi_MIX(sigma_MIX(alpha),i)
> Pj <- pi_MIX(sigma_MIX(alpha),j)
> W <- expcovmat_MIX(alpha)
> a1a2 = vector(mode = "numeric",length = 2)
> a1a2[1] <- W[i,j]*tr(crossprod(FI,Pi))*tr(crossprod(FI,Pj))
> a1a2[2] <- W[i,j]*tr(crossprod(crossprod(Pi,FI),crossprod(FI,Pj)))
> return(a1a2) }
> A1A2 = vector(mode = "numeric", length = 2)
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) A1A2 = A1A2 +
> a1a2ij(i,j,estimated_alpha) }
> A1 = A1A2[1]
> A2 = A1A2[2]
>
> BIAS_COR_MIX <- function(alpha) {
> SIGMA <- sigma_MIX(alpha)
> FI <- fi(sigma_MIX(alpha))
>
> W <- expcovmat_MIX(alpha)
>
> IN = matrix(0, nrow = nrow(x), ncol = nrow(x))
>
> for(i in 1:ncol(z)) {
> for(j in 1:ncol(z)) IN = IN + W[i,j]*d2sigma.dalphaij_MIX(i,j) } #
> is symmetric
>
> S <- crossprod(solve(SIGMA),crossprod(IN,solve(SIGMA))) # is
> symmetric
> V <- function(t) {
> ancillary1 <- crossprod(S,dsigma.dalphai_MIX(SIGMA,t)) # is
> symmetric
> ancillary2 <- crossprod(x,crossprod(S,x)) # is symmetric
> v1 <- tr(ancillary1)
> v2 <-
> -2*tr(crossprod(sx(SIGMA),crossprod(ancillary1,crossprod(t(x),FI))))
> v3 <-
> -1*tr(crossprod(ancillary2,crossprod(FI,crossprod(pi_MIX(SIGMA,t),FI))))
> v <- v1 + v2 + v3
> return(v) }
>
> bias = matrix(0, nrow = ncol(x), ncol = ncol(x))
> alpha = estimated_alpha
> for(t in 1:ncol(z)) {
> for(s in 1:ncol(z))
> bias = bias +
> (-1/4)*W[t,s]*V(t)*crossprod(FI,crossprod(pi_MIX(SIGMA,s),FI)) }
> return(bias) }
>
> FI <- fi(sigma_MIX(estimated_alpha))
> p <- ncol(x)
> EF <- 1 + 1 / p * A2
> DF <- 1 / p^2 * (A1 + 6 * A2 + 2 * p)
> m <- 4 + (p + 2) / (p * DF / (2 * EF^2) - 1)
> lam <- m / (EF * (m - 2))
>
> beta_egls <-
> crossprod(FI,crossprod(x,crossprod(solve(sigma_MIX(estimated_alpha)),y)))
> beta_covmat_old <- FI + 2*crossprod(FI,crossprod(INNER,FI))
> beta_covmat_new <- beta_covmat_old + BIAS_COR_MIX(estimated_alpha)
>
> dif = beta_egls - beta_tested
>
> F.kr_old = as.numeric(lam / p *
> crossprod(dif,crossprod(solve(beta_covmat_old),dif)))
> p.v_old <- pf(F.kr_old, df1 = p, df2 = m, lower.tail = FALSE, log.p >
FALSE)
> F.kr_new = as.numeric(lam / p *
> crossprod(dif,crossprod(solve(beta_covmat_new),dif)))
> p.v_new <- pf(F.kr_new, df1 = p, df2 = m, lower.tail = FALSE, log.p >
FALSE)
>
> list <- list(A1 = A1, A2 = A2, EF = EF, DF = DF, df1 = p, df2 = m, F_old
> = F.kr_old,
> F_new = F.kr_new, sig_old = p.v_old, sig_new = p.v_new, beta_egls >
beta_egls,
> beta_covmat_old = beta_covmat_old, beta_covmat_new >
beta_covmat_new,model = model)
> list }
>
> else if (model == "EXP") {
> inner <- function(i,j,alpha) {
> FI <- fi(sigma_EXP(alpha))
> Pi <- pi_EXP(sigma_EXP(alpha),i)
> Pj <- pi_EXP(sigma_EXP(alpha),j)
> Qij <- qij_EXP(sigma_EXP(alpha),i,j)
> Rij <- rij_EXP(sigma_EXP(alpha),i,j)
> W <- expcovmat_EXP(alpha)
> inner = matrix(nrow = ncol(x), ncol = ncol(x))
> inner = W[i,j]*(Qij-crossprod(Pi,crossprod(FI,Pj))-1/4*Rij)
> return(inner) }
> INNER = matrix(0, nrow = ncol(x), ncol = ncol(x))
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) INNER = INNER +
> inner(i,j,estimated_alpha) }
> a1a2ij <- function(i,j,alpha) {
> FI <- fi(sigma_EXP(alpha))
> Pi <- pi_EXP(sigma_EXP(alpha),i)
> Pj <- pi_EXP(sigma_EXP(alpha),j)
> W <- expcovmat_EXP(alpha)
> a1a2 = vector(mode = "numeric",length = 2)
> a1a2[1] <- W[i,j]*tr(crossprod(FI,Pi))*tr(crossprod(FI,Pj))
> a1a2[2] <- W[i,j]*tr(crossprod(crossprod(Pi,FI),crossprod(FI,Pj)))
> return(a1a2) }
> A1A2 = vector(mode = "numeric", length = 2)
> for(i in 1:ncol(z)) { for(j in 1:ncol(z)) A1A2 = A1A2 +
> a1a2ij(i,j,estimated_alpha) }
> A1 = A1A2[1]
> A2 = A1A2[2]
>
> BIAS_COR_EXP <- function(alpha) {
> SIGMA <- sigma_EXP(alpha)
> FI <- fi(sigma_EXP(alpha))
> W <- expcovmat_EXP(alpha)
>
> IN = matrix(0, nrow = nrow(x), ncol = nrow(x))
>
> for(i in 1:ncol(z)) {
> for(j in 1:ncol(z)) IN = IN + W[i,j]*d2sigma.dalphaij_EXP(SIGMA,i,j) }
> # is symmetric
>
> S <- crossprod(solve(SIGMA),crossprod(IN,solve(SIGMA))) # is
> symmetric
> V <- function(t) {
> ancillary1 <- crossprod(S,dsigma.dalphai_EXP(SIGMA,t)) # is
> symmetric
> ancillary2 <- crossprod(x,crossprod(S,x)) # is symmetric
> v1 <- tr(ancillary1)
> v2 <-
> -2*tr(crossprod(sx(SIGMA),crossprod(ancillary1,crossprod(t(x),FI))))
> v3 <-
> -1*tr(crossprod(ancillary2,crossprod(FI,crossprod(pi_EXP(SIGMA,t),FI))))
> v <- v1 + v2 + v3
> return(v) }
>
> bias = matrix(0, nrow = ncol(x), ncol = ncol(x))
>
> for(t in 1:ncol(z)) {
> for(s in 1:ncol(z))
> bias = bias +
> (-1/4)*W[t,s]*V(t)*crossprod(FI,crossprod(pi_EXP(SIGMA,s),FI)) }
> return(bias) }
>
> FI <- fi(sigma_EXP(estimated_alpha))
> p <- ncol(x)
> EF <- 1 + 1 / p * A2
> DF <- 1 / p^2 * (A1 + 6 * A2 + 2 * p)
> m <- 4 + (p + 2) / (p * DF / (2 * EF^2) - 1)
> lam <- m / (EF * (m - 2))
>
> beta_egls <-
> crossprod(FI,crossprod(x,crossprod(solve(sigma_EXP(estimated_alpha)),y)))
> beta_covmat_old <- FI + 2*crossprod(FI,crossprod(INNER,FI))
> beta_covmat_new <- beta_covmat_old + BIAS_COR_EXP(estimated_alpha)
>
> dif = beta_egls - beta_tested
>
> F.kr_old = as.numeric(lam / p *
> crossprod(dif,crossprod(solve(beta_covmat_old),dif)))
> p.v_old <- pf(F.kr_old, df1 = p, df2 = m, lower.tail = FALSE, log.p >
FALSE)
> F.kr_new = as.numeric(lam / p *
> crossprod(dif,crossprod(solve(beta_covmat_new),dif)))
> p.v_new <- pf(F.kr_new, df1 = p, df2 = m, lower.tail = FALSE, log.p >
FALSE)
>
>
> list <- list(A1 = A1, A2 = A2, EF = EF, DF = DF, df1 = p, df2 = m, F_old
> = F.kr_old,
> F_new = F.kr_new, sig_old = p.v_old, sig_new = p.v_new, beta_egls >
beta_egls,
> beta_covmat_old = beta_covmat_old, beta_covmat_new >
beta_covmat_new,model = model)
> list }
>
> else return(cat("The wrong argument (model) - must be either
>ADD<, or
> >MIX<, or >EXP<.\n")) }
>
>
> kenward_roger_both_print <- function(krprocedure) {
>
> A1 = krprocedure$A1; A2 = krprocedure$A2; EF = krprocedure$EF; DF >
krprocedure$DF
> p = krprocedure$df1; m = krprocedure$df2; F.kr_old = krprocedure$F_old
> F.kr_new = krprocedure$F_new; p.v_new= krprocedure$sig_new; p.v_old >
krprocedure$sig_old
> beta_egls = krprocedure$beta_egls; beta_covmat_new >
krprocedure$beta_covmat_new
> beta_covmat_old = krprocedure$beta_covmat_old; beta_egls >
krprocedure$beta_egls
>
> if (krprocedure$model == "ADD") {
>
> summary1 <-
>
cbind(data.frame("Parameter"=c("Estimates")),BETA=t(as.vector(beta_egls)))
> summary2 <- cbind(BETA=beta_covmat_old)
>
> cat("**Parameter estimates of the additive heteroskedasticity
> model**\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> print(summary1,row.names=FALSE)
>
>
cat("-----------------------------------------------------------------------------\n")
> cat("**Both original 1997 and new 2009 Kenward-Roger
procedure**\n")
> cat(" \n")
> cat("**Kenward-Roger small-sample adjusted estimate of the
> covmat(beta)**\n")
> print(summary2,row.names=FALSE)
> cat(" \n")
> cat("Small-sample adjusted F-statistics
=",F.kr_old,"\n")
> cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
> =",p.v_old,"\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> }
>
> else if (krprocedure$model == "MIX") {
>
> summary1 <-
>
cbind(data.frame("Parameter"=c("Estimates")),BETA=t(as.vector(beta_egls)))
> summary2_old <- cbind(BETA=beta_covmat_old)
> summary2_new <- cbind(BETA=beta_covmat_new)
>
> cat("**Parameter estimates of the mixed heteroskedasticity
model**\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> print(summary1,row.names=FALSE)
>
>
cat("-----------------------------------------------------------------------------\n")
> cat("**Original 1997 Kenward-Roger procedure**\n")
> cat(" \n")
> cat("**Kenward-Roger small-sample adjusted estimate of the
> covmat(beta)**\n")
> print(summary2_old,row.names=FALSE)
> cat(" \n")
> cat("Small-sample adjusted F-statistics
=",F.kr_old,"\n")
> cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
> =",p.v_old,"\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> cat("**New 2009 Kenward-Roger procedure**\n")
> cat(" \n")
> cat("**Kenward-Roger small-sample adjusted estimate of the
> covmat(beta)**\n")
> print(summary2_new,row.names=FALSE)
> cat(" \n")
> cat("Small-sample adjusted F-statistics
=",F.kr_new,"\n")
> cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
> =",p.v_new,"\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> }
>
> else {
>
> summary1 <-
>
cbind(data.frame("Parameter"=c("Estimates")),BETA=t(as.vector(beta_egls)))
> summary2_old <- cbind(BETA=beta_covmat_old)
> summary2_new <- cbind(BETA=beta_covmat_new)
>
> cat("**Parameter estimates of the multiplicative heteroskedasticity
> model**\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> print(summary1,row.names=FALSE)
>
>
cat("-----------------------------------------------------------------------------\n")
> cat("**Original 1997 Kenward-Roger procedure**\n")
> cat(" \n")
> cat("**Kenward-Roger small-sample adjusted estimate of the
> covmat(beta)**\n")
> print(summary2_old,row.names=FALSE)
> cat(" \n")
> cat("Small-sample adjusted F-statistics
=",F.kr_old,"\n")
> cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
> =",p.v_old,"\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> cat("**New 2009 Kenward-Roger procedure**\n")
> cat(" \n")
> cat("**Kenward-Roger small-sample adjusted estimate of the
> covmat(beta)**\n")
> print(summary2_new,row.names=FALSE)
> cat(" \n")
> cat("Small-sample adjusted F-statistics
=",F.kr_new,"\n")
> cat("df1 (nominator) = ",p,", df2 (denominator) =
",m,", Significance
> =",p.v_new,"\n")
>
>
cat("-----------------------------------------------------------------------------\n")
> }}
>
> ######## generovanie vektora ypsilonov
> ##################################################
>
> generate_y <- function(x,z,beta,alpha,model) { res >
as.matrix(rnorm(nrow(x)))
> if (model == "ADD") {
> sigma_add = diag(as.vector(alpha %*% t(z)), nrow=nrow(z), ncol=nrow(z))
> y = crossprod(t(x),beta) + crossprod(sigma_add^(1/2),res)
> return(y) }
> else if (model == "MIX") {
> sigma_mix = diag((as.vector(alpha %*% t(z)))^2, nrow=nrow(z),
> ncol=nrow(z))
> y = crossprod(t(x),beta) + crossprod(sigma_mix^(1/2),res)
> return(y) }
> else if (model == "EXP") {
> sigma_exp = diag(exp(as.vector(alpha %*% t(z))), nrow=nrow(z),
> ncol=nrow(z))
> y = crossprod(t(x),beta) + crossprod(sigma_exp^(1/2),res)
> return(y) }
> else return(cat("The wrong argument (type)- must be either
>ADD<, or
> >MIX<, or >EXP<.\n")) }
>
>
> ######## pomocné funkcie pre simulovanie
> ################################################
>
> loglk <- function(simtype) { if (simtype == "ADD")
reml.loglik_ADD
> else if (simtype == "MIX") reml.loglik_MIX
> else reml.loglik_EXP }
>
> gradvec <- function(simtype) { if (simtype == "ADD")
gradvec_ADD
> else if (simtype == "MIX") gradvec_MIX
> else gradvec_EXP }
>
> hessmat <- function(simtype) { if (simtype == "ADD")
hessmat_ADD
> else if (simtype == "MIX") hessmat_MIX
> else hessmat_EXP }
>
> starter <- function(simtype,x,y) { if (simtype == "ADD")
> abs(coefolsEST_ADD(x,y))
> else if (simtype == "MIX") coefolsEST_MIX(x,y)
> else coefolsEST_EXP(x,y) }
>
> existencecheck <- function(object)
> exists(as.character(substitute(object)))
>
>
>
>
>
>
>
>
>
>
>
#######################################################################################
>
> x <- as.matrix(read.table("C:/maddala_70.txt", header = F)) #
dané
> pevné x
> z <- as.matrix(read.table("C:/maddala_70.txt", header = F)) #
dané
> pevné z
>
>
> nsimsgood=5000; beta=c(0.85,0.90); beta_tested=c(0.85,0.90)
> alpha=c(1, 0.50); realtype="ADD"; simtype="ADD";
prob=0.05
>
> heading = matrix(nrow = 1, ncol = 15 + 2*ncol(z) + 2*ncol(x)); i = 0;
> j = 0;
> name1 <-
>
>
c("SimNo","realHET","simHET",rep("realALPHA",ncol(z)),rep("estALPHA",ncol(z)))
> name2 <-
>
c("estALPHAlikTYPE",rep("realBETA",ncol(x)),rep("estBETA",ncol(x)))
> name3 <-
c("A1","A2","EF","DF","df1","df2")
> name4 <-
>
c("Fstatisticsold","Fstatisticsnew","Fquantile","inAreaOld","inAreaNew")
> heading[1,] <- c(name1,name2,name3,name4)
> write.table(heading, file="70addadd__goods.csv", append=T,
quote=T,
> sep=";", row.names=F, col.names=F)
> write.table(c("Unsuccessful simulations"),
file="70addadd__bads.csv",
> append=T, quote=T, sep=";", row.names=F, col.names=F)
>
>
>
>
> repeat {
> y <<- generate_y(x,z,beta,alpha,realtype); x <<- x; z <<-
z
> row = matrix(nrow = 1, ncol = 15 + 2*ncol(z) + 2*ncol(x))
>
> NR <-
>
>
try(maxNR(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
> if (is.list(NR) == TRUE) kr_nr <-
> kenward_roger_both(simtype,NR$estimate,beta_tested,x,y,z)
>
> if (is.list(NR) == TRUE) NRcode <- NR$code else NRcode <- 99
> if (existencecheck(kr_nr) == TRUE) kr_nrF_old <- kr_nr$F_old else
> kr_nrF_old <- -99
> if (existencecheck(kr_nr) == TRUE) kr_nrF_new <- kr_nr$F_new else
> kr_nrF_new <- -99
> if (existencecheck(kr_nr) == TRUE) qff <-
> qf(prob,df1=kr_nr$df1,df2=kr_nr$df2,lower.tail=TRUE) else qff <- NaN
>
> { if ((NRcode == 0 | NRcode == 1) & (kr_nrF_old >= 0 &
kr_nrF_new >= 0 &
> is.nan(qff) == FALSE)) { i = i + 1
> A1 <- kr_nr$A1; A2 <- kr_nr$A2; EF <- kr_nr$EF; DF <- kr_nr$DF
> df1 <- kr_nr$df1; df2 <- kr_nr$df2
> Fold <- kr_nr$F_old; Fnew <- kr_nr$F_new
> f <- qf(prob,df1=kr_nr$df1,df2=kr_nr$df2,lower.tail=TRUE)
>
> rowi1 = c(i, realtype, simtype, alpha, NR$estimate,
> c("Nephton-Raphson"), beta)
> rowi2 = c(t(kr_nr$beta_egls), A1, A2, EF, DF, df1, df2)
> rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
> row[1,] = c(rowi1,rowi2,rowi3)
>
>
>
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
> rm(y, NR, kr_nr, NRcode, kr_nrF_old, kr_nrF_new, qff) }
>
> else { BFGS <-
>
>
try(maxBFGS(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
> if (is.list(BFGS) == TRUE) kr_bfgs <-
> kenward_roger_both(simtype,BFGS$estimate,beta_tested,x,y,z)
>
> if (is.list(BFGS) == TRUE) BFGScode <- BFGS$code else BFGScode <- 99
> if (existencecheck(kr_bfgs) == TRUE) kr_bfgsF_old <- kr_bfgs$F_old else
> kr_bfgsF_old <- -99
> if (existencecheck(kr_bfgs) == TRUE) kr_bfgsF_new <- kr_bfgs$F_new else
> kr_bfgsF_new <- -99
> if (existencecheck(kr_bfgs) == TRUE) qff <-
> qf(prob,df1=kr_bfgs$df1,df2=kr_bfgs$df2,lower.tail=TRUE) else qff <- NaN
>
> { if ((BFGScode == 0) & (kr_bfgsF_old >= 0 & kr_bfgsF_new >=
0 &
> is.nan(qff) == FALSE)) { i = i + 1
> A1 <- kr_bfgs$A1; A2 <- kr_bfgs$A2; EF <- kr_bfgs$EF; DF <-
kr_bfgs$DF
> df1 <- kr_bfgs$df1; df2 <- kr_bfgs$df2
> Fold <- kr_bfgs$F_old; Fnew <- kr_bfgs$F_new
> f <- qf(prob,df1=kr_bfgs$df1,df2=kr_bfgs$df2,lower.tail=TRUE)
>
> rowi1 = c(i, realtype, simtype, alpha, BFGS$estimate, c("BFGS"),
beta)
> rowi2 = c(t(kr_bfgs$beta_egls), A1, A2, EF, DF, df1, df2)
> rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
> row[1,] = c(rowi1,rowi2,rowi3)
>
>
>
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
> rm(y, BFGS, kr_bfgs, BFGScode, kr_bfgsF_old, kr_bfgsF_new, qff) }
>
> else { NM <-
>
>
try(maxNM(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
> if (is.list(NM) == TRUE) kr_nm <-
> kenward_roger_both(simtype,NM$estimate,beta_tested,x,y,z)
>
> if (is.list(NM) == TRUE) NMcode <- NM$code else NMcode <- 99
> if (existencecheck(kr_nm) == TRUE) kr_nmF_old <- kr_nm$F_old else
> kr_nmF_old <- -99
> if (existencecheck(kr_nm) == TRUE) kr_nmF_new <- kr_nm$F_new else
> kr_nmF_new <- -99
> if (existencecheck(kr_nm) == TRUE) qff <-
> qf(prob,df1=kr_nm$df1,df2=kr_nm$df2,lower.tail=TRUE) else qff <- NaN
>
> { if ((NMcode == 0) & (kr_nmF_old >= 0 & kr_nmF_new >= 0
& is.nan(qff)
> == FALSE)) { i = i + 1
> A1 <- kr_nm$A1; A2 <- kr_nm$A2; EF <- kr_nm$EF; DF <- kr_nm$DF
> df1 <- kr_nm$df1; df2 <- kr_nm$df2
> Fold <- kr_nm$F_old; Fnew <- kr_nm$F_new
> f <- qf(prob,df1=kr_nm$df1,df2=kr_nm$df2,lower.tail=TRUE)
>
> rowi1 = c(i, realtype, simtype, alpha, NM$estimate,
c("Nelder-Mead"),
> beta)
> rowi2 = c(t(kr_nm$beta_egls), A1, A2, EF, DF, df1, df2)
> rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
> row[1,] = c(rowi1,rowi2,rowi3)
>
>
>
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
> rm(y, NN, kr_nm, NMcode, kr_nmF_old, kr_nmF_new, qff) }
>
> else { SANN <-
>
>
try(maxSANN(loglk(simtype),gradvec(simtype),hessmat(simtype),start=starter(simtype,x,y)),silent=TRUE)
> if (is.list(SANN) == TRUE) kr_sann <-
> kenward_roger_both(simtype,SANN$estimate,beta_tested,x,y,z)
>
> if (is.list(SANN) == TRUE) SANNcode <- SANN$code else SANNcode <- 99
> if (existencecheck(kr_sann) == TRUE) kr_sannF_old <- kr_sann$F_old else
> kr_sannF_old <- -99
> if (existencecheck(kr_sann) == TRUE) kr_sannF_new <- kr_sann$F_new else
> kr_sannF_new <- -99
> if (existencecheck(kr_sann) == TRUE) qff <-
> qf(prob,df1=kr_sann$df1,df2=kr_sann$df2,lower.tail=TRUE) else qff <- NaN
>
> { if ((SANNcode == 0) & (kr_sannF_old >= 0 & kr_sannF_new >=
0 &
> is.nan(qff) == FALSE)) { i = i + 1
> A1 <- kr_sann$A1; A2 <- kr_sann$A2; EF <- kr_sann$EF; DF <-
kr_sann$DF
> df1 <- kr_sann$df1; df2 <- kr_sann$df2
> Fold <- kr_sann$F_old; Fnew <- kr_sann$F_new
> f <- qf(prob,df1=kr_sann$df1,df2=kr_sann$df2,lower.tail=TRUE)
>
> rowi1 = c(i, realtype, simtype, alpha, SANN$estimate, c("SANN"),
beta)
> rowi2 = c(t(kr_sann$beta_egls), A1, A2, EF, DF, df1, df2)
> rowi3 = c(Fold, Fnew, f, Fold < f, Fnew < f)
> row[1,] = c(rowi1,rowi2,rowi3)
>
>
>
write.table(row,file="70addadd__goods.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
> rm(y, SANN, kr_sann, SANNcode, kr_sannF_old, kr_sannF_new, qff) }
>
> else { j = j + 1
>
>
write.table(j,file="70addadd__bads.csv",append=T,quote=T,sep=";",row.names=F,col.names=F)
> rm(y, NR, BFGS, NM, SANN, NRcode, BFGScode, NMcode, SANNcode,
> kr_nrF_old, kr_bfgsF_old, kr_nmF_old, kr_sannF_old)
> rm(qff, kr_nrF_new, kr_bfgsF_new, kr_nmF_new, kr_sannF_new)
> if (existencecheck(kr_nr) == TRUE) rm(kr_nr)
> if (existencecheck(kr_bfgs) == TRUE) rm(kr_bfgs)
> if (existencecheck(kr_nm) == TRUE) rm(kr_nm)
> if (existencecheck(kr_sann) == TRUE) rm(kr_sann) } } } } } } } } }
>
> if (i == nsimsgood) break
>
>
>
>
cat("-----------------------------------------------------------------------------\n")
> cat("Number of successful good simulations = ",i,"\n")
> cat("Number of unsuccessful simulations = ",j,"\n")
>
>
cat("-----------------------------------------------------------------------------\n")
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
>
http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>
--
Jim Holtman
Cincinnati, OH
+1 513 646 9390
What is the problem that you are trying to solve?
[[alternative HTML version deleted]]