Update III [🇷 for BE/BA]
Look at this baby:
On my machine it gives:
rm(list=ls(all=TRUE))
###### par vector is c(varT, varBR, varWR)
######
###### Section 1: Household things
######
CreateX=function(D)
{
##first the two treatments
TrtT=as.numeric(as.character(D$Trt)=="T")
TrtR=as.numeric(as.character(D$Trt)=="R")
X=cbind(TrtT, TrtR)
R= qr(X)$rank
## subjects: in a mixed model with subj as random
## we do not do subjects also as fixed, therefore they are #'ed away here
## for (s in unique(D$Subj))
## {
## v=as.numeric(D$Subj==s)
## #print(v)
## XX=data.frame(X, v)
## names(XX)[ncol(XX)] = paste("S", s, sep="")
## rnk=qr(XX)$rank
## if (rnk>R)
## {
## X=XX
## R=rnk
## }
## }
##now the Pers
for (p in unique(D$Per))
{
v=as.numeric(D$Per==p)
#print(v)
XX=data.frame(X, v)
names(XX)[ncol(XX)] = paste("P", p, sep="")
rnk=qr(XX)$rank
if (rnk>R)
{
X=XX
R=rnk
}
}
for (q in unique(D$Seq))
{
v=as.numeric(D$Seq==q)
#print(v)
XX=data.frame(X, v)
names(XX)[ncol(XX)] = paste("Q", q, sep="")
rnk=qr(XX)$rank
if (rnk>R)
{
X=XX
R=rnk
}
}
return(as.matrix(X))
}
Create.CovM=function(Params)
##block diagonal covariance matrix
{
varT=Params[1]
varBR=Params[2]
varWR=Params[3]
#varRT=Params[4]
#cat("Vars:", varT, varBR, varWR,"\n")
Nobs=length(D$Y)
V=matrix(0,ncol=Nobs, nrow=Nobs)
for (iRow in 1:Nobs)
for (iCol in 1:Nobs)
{
## the diagonal
if (iCol==iRow)
{
if (D$Trt[iRow]=="T") V[iRow,iCol]=V[iRow,iCol]+varT
if (D$Trt[iRow]=="R") V[iRow,iCol]=V[iRow,iCol]+varWR +varBR
}
## off diagonal
if (iCol!=iRow)
if (D$Subj[iRow]==D$Subj[iCol])
{
if (D$Trt[iCol]==D$Trt[iRow]) V[iRow,iCol]= V[iRow,iCol]+varBR
#if (D$Trt[iCol]!=D$Trt[iRow]) V[iRow,iCol]= V[iRow,iCol]+varRT
}
}
return(as.matrix(V))
}
######
###### Section 2: Matrix things
######
Obj.F12=function(Pars)
##this is line 3 of page 10 of:
##http://people.csail.mit.edu/xiuming/docs/tutorials/reml.pdf
{
CovM=Create.CovM(Pars)
A= -0.5*log(det(CovM))
B= -0.5*log(det(t(X) %*% solve(CovM) %*% X))
est.b = solve(t(X) %*% solve(CovM) %*% X) %*% t(X) %*% solve(CovM) %*% y
tmp= y - X %*% est.b
C=-0.5 *(t(tmp) %*% solve(CovM) %*% tmp)
return(A+B+C)
}
Some.Initial.Guesses=function(foo)
{
#guess variance within R
D1=subset(D, D$Trt=="R")
m=lm(log(Y)~factor(Subj)+factor(Seq)+factor(Per) , data=D1)
#print(anova(m))
varWR= anova(m)["Residuals", "Mean Sq"]
m=lm(log(Y)~factor(Subj)+factor(Seq)+factor(Per)+factor(Trt) , data=D)
varBR= anova(m)["factor(Subj)", "Mean Sq"]
##total var T, cheaply
##actually, this may be much better: varT=varBR+varWR
D2=subset(D, D$Trt=="T")
varT=var(log(D2$Y))
varT=varBR+varWR
L=list(varT=varT, varBR=varBR, varWR=varWR)
return(L)
}
####
#### section 3: execution
####
D=read.csv("EMAII.a.csv" , header=T, sep="\t") ##public = easier
X=CreateX(D) ##public = easier
y=log(D$Y) ##public = easier
MyREML=function(foo.bar)
{
L=Some.Initial.Guesses(0)
print(L)
parIni=c(0.06, 0.032, 0.012)
F=optim(par=parIni, fn=Obj.F12,
#method="BFGS",
#lower=c(0.003,0.003,0.003), upper=c(1,1,1),
control=list(reltol=1e-11, trace=T, fnscale=-1))
print(F)
}
MyREML(0)
On my machine it gives:
$par
[1] 0.06776119 0.03636979 0.01237020
—
Pass or fail!
ElMaestro
Pass or fail!
ElMaestro
Complete thread:
- Semireplicated + REML in R ElMaestro 2020-07-10 13:19 [🇷 for BE/BA]
- Semireplicated + REML in R Helmut 2020-07-10 19:03
- Semireplicated + REML in R ElMaestro 2020-07-10 19:24
- Avoid partial replicate designs, pleeeze! Helmut 2020-07-11 11:57
- Avoid partial replicate designs, pleeeze! ElMaestro 2020-07-11 14:43
- Braveheart! Helmut 2020-07-11 15:38
- Who can help? ElMaestro 2020-07-12 12:28
- Who can help? ElMaestro 2020-07-12 13:26
- Update II ElMaestro 2020-07-12 21:36
- Update IIIElMaestro 2020-07-12 21:46
- Final update today ElMaestro 2020-07-12 22:27
- Medium rare. Helmut 2020-07-13 13:52
- took just 52 hrs to do it :-) ElMaestro 2020-07-13 14:18
- Will take much more hours still… Helmut 2020-07-13 15:34
- Negative determinant ElMaestro 2020-07-14 03:22
- Are we loosers? Helmut 2020-07-14 13:58
- "we"? Loosers? ElMaestro 2020-07-14 15:07
- Misunderstanding? Helmut 2020-07-14 15:32
- "we"? Loosers? ElMaestro 2020-07-14 15:07
- Are we loosers? Helmut 2020-07-14 13:58
- took just 52 hrs to do it :-) ElMaestro 2020-07-13 14:18
- Medium rare. Helmut 2020-07-13 13:52
- Braveheart! ElMaestro 2020-07-13 10:13
- Braveheart! Helmut 2020-07-13 14:16
- Braveheart! PharmCat 2020-07-15 14:19
- Braveheart! ElMaestro 2020-08-02 17:39
- Who can help? ElMaestro 2020-07-12 12:28
- Braveheart! Helmut 2020-07-11 15:38
- Avoid partial replicate designs, pleeeze! ElMaestro 2020-07-11 14:43
- Avoid partial replicate designs, pleeeze! Helmut 2020-07-11 11:57
- Semireplicated + REML in R ElMaestro 2020-07-10 19:24
- We were all blind (except Detlew) Helmut 2020-07-15 14:27
- It is the opposite way around for me ElMaestro 2020-07-15 16:25
- Desultory thoughts Helmut 2020-07-15 17:33
- FDA RSABE is ISC d_labes 2020-07-15 18:13
- FDA RSABE is ISC Helmut 2020-07-16 11:11
- Desultory thoughts ElMaestro 2020-07-15 23:06
- Desultory thoughts Helmut 2020-07-16 10:59
- FDA RSABE is ISC d_labes 2020-07-15 18:13
- Desultory thoughts Helmut 2020-07-15 17:33
- Phoenix - which template? mittyri 2020-07-19 00:42
- FDA RSABE Project template_ v1.4.phxproj Helmut 2020-07-19 01:45
- It is the opposite way around for me ElMaestro 2020-07-15 16:25
- "By popular demand": likelihood ElMaestro 2020-07-24 10:07
- And by the way.... ElMaestro 2020-07-24 12:52
- And by the way.... PharmCat 2020-08-03 14:24
- Not understood ElMaestro 2020-08-03 22:55
- Not understood PharmCat 2020-08-05 01:41
- Not understood ElMaestro 2020-08-05 08:13
- Not understood PharmCat 2020-08-05 16:37
- Open issues ElMaestro 2020-08-06 21:11
- Open issues PharmCat 2020-08-07 00:02
- Open issues ElMaestro 2020-08-07 07:49
- Open issues PharmCat 2020-08-07 11:29
- Still can't make it work ElMaestro 2020-08-07 13:08
- Still can't make it work PharmCat 2020-08-07 15:42
- Still can't make it work ElMaestro 2020-08-07 16:44
- Still can't make it work PharmCat 2020-08-07 18:14
- Still can't make it work ElMaestro 2020-08-07 18:23
- And now it works ElMaestro 2020-08-07 21:31
- Still can't make it work PharmCat 2020-08-08 01:08
- Speed improvement ElMaestro 2020-08-08 12:25
- Speed improvement PharmCat 2020-08-08 17:27
- Speed improvement ElMaestro 2020-08-08 18:10
- Speed improvement PharmCat 2020-08-09 18:22
- Some tests... PharmCat 2020-08-10 11:48
- Speed improvement ElMaestro 2020-08-08 12:25
- Still can't make it work ElMaestro 2020-08-07 18:23
- Still can't make it work PharmCat 2020-08-07 18:14
- Still can't make it work ElMaestro 2020-08-07 16:44
- Still can't make it work PharmCat 2020-08-07 15:42
- Still can't make it work ElMaestro 2020-08-07 13:08
- Open issues PharmCat 2020-08-07 11:29
- Open issues ElMaestro 2020-08-07 07:49
- Open issues PharmCat 2020-08-07 00:02
- Open issues ElMaestro 2020-08-06 21:11
- Not understood PharmCat 2020-08-05 16:37
- Not understood ElMaestro 2020-08-05 08:13
- Not understood PharmCat 2020-08-05 01:41
- Not understood ElMaestro 2020-08-03 22:55
- And by the way.... PharmCat 2020-08-03 14:24
- And by the way.... ElMaestro 2020-07-24 12:52
- Semireplicated + REML in R Helmut 2020-07-10 19:03