1786
dctda.fast.only <- function(theta, wz, U, zmat, M, r, x1mat, x2mat,
1787
p2, Index.corner, Aimat, Bmat, Cimat,
1789
Structural.zero=NULL)
1695
dctda.fast.only = function(theta, wz, U, zmat, M, r, x1mat, x2mat,
1696
p2, Index.corner, Aimat, Bmat, Cimat,
1698
Structural.zero=NULL)
1793
1702
if(length(Structural.zero))
1794
stop("can't handle Structural.zero in dctda.fast.only()")
1703
stop("cannot handle Structural.zero in dctda.fast.only()")
1797
if(nrow(Cimat)!=p2 || ncol(Cimat)!=r)
1706
if(nrow(Cimat) != p2 || ncol(Cimat) != r)
1798
1707
stop("Cimat wrong shape")
1800
fred <- kronecker(matrix(1,1,r), x2mat)
1801
fred <- kronecker(fred, matrix(1,M,1))
1802
barney <- kronecker(Aimat, matrix(1,1,p2))
1803
barney <- kronecker(matrix(1,nn,1), barney)
1805
temp <- array(t(barney*fred), c(p2*r, M, nn))
1806
temp <- aperm(temp, c(2,1,3)) # M by p2*r by nn
1807
temp <- mux5(wz, temp, M=M, matrix.arg= TRUE)
1808
temp <- m2adefault(temp, M=p2*r) # Note M != M here!
1809
G <- solve(apply(temp,1:2,sum)) # p2*r by p2*r
1811
dc.da <- array(NA, c(p2, r, M, r)) # different from other functions
1709
fred = kronecker(matrix(1,1,r), x2mat)
1710
fred = kronecker(fred, matrix(1,M,1))
1711
barney = kronecker(Aimat, matrix(1,1,p2))
1712
barney = kronecker(matrix(1,nn,1), barney)
1714
temp = array(t(barney*fred), c(p2*r, M, nn))
1715
temp = aperm(temp, c(2,1,3)) # M by p2*r by nn
1716
temp = mux5(wz, temp, M=M, matrix.arg= TRUE)
1717
temp = m2adefault(temp, M=p2*r) # Note M != M here!
1718
G = solve(rowSums(temp, dims=2)) # p2*r by p2*r
1720
dc.da = array(NA, c(p2, r, M, r)) # different from other functions
1812
1721
if(length(Index.corner) == M)
1813
stop("can't handle full rank models yet")
1814
cbindex <- (1:M)[-Index.corner] # complement of Index.corner
1815
resid2 <- if(length(x1mat))
1816
mux22(t(wz), zmat - x1mat %*% Bmat, M=M, upper= FALSE, as.mat= TRUE) else
1817
mux22(t(wz), zmat , M=M, upper= FALSE, as.mat= TRUE)
1722
stop("cannot handle full rank models yet")
1723
cbindex = (1:M)[-Index.corner] # complement of Index.corner
1724
resid2 = if(length(x1mat))
1725
mux22(t(wz), zmat - x1mat %*% Bmat, M=M, upper=FALSE, as.mat=TRUE) else
1726
mux22(t(wz), zmat , M=M, upper=FALSE, as.mat=TRUE)
1820
for(tt in cbindex) {
1821
fred <- t(x2mat) * matrix(resid2[,tt], p2, nn, byrow= TRUE) # p2 * nn
1822
temp2 <- kronecker(ei(s,r), apply(fred,1,sum))
1824
Wiak <- mux22(t(wz), matrix(Aimat[,k], nn, M, byrow= TRUE),
1825
M=M, upper= FALSE, as.mat= TRUE) # nn * M
1826
wxx <- Wiak[,tt] * x2mat
1827
blocki <- t(x2mat) %*% wxx
1828
temp4a <- blocki %*% Cimat[,k]
1830
temp4b <- blocki %*% Cimat[,s]
1729
for(ttt in cbindex) {
1730
fred = t(x2mat) * matrix(resid2[,ttt], p2, nn, byrow= TRUE) # p2 * nn
1731
temp2 = kronecker(ei(sss,r), rowSums(fred))
1733
Wiak = mux22(t(wz), matrix(Aimat[,kkk], nn, M, byrow= TRUE),
1734
M=M, upper= FALSE, as.mat= TRUE) # nn * M
1735
wxx = Wiak[,ttt] * x2mat
1736
blocki = t(x2mat) %*% wxx
1737
temp4a = blocki %*% Cimat[,kkk]
1739
temp4b = blocki %*% Cimat[,sss]
1832
temp2 = temp2 - kronecker(ei(s,r), temp4a) -
1833
kronecker(ei(k,r), temp4b)
1741
temp2 = temp2 - kronecker(ei(sss,r), temp4a) -
1742
kronecker(ei(kkk,r), temp4b)
1835
dc.da[,,tt,s] <- G %*% temp2
1744
dc.da[,,ttt,sss] = G %*% temp2
1837
ans1 <- dc.da[,,cbindex,,drop=FALSE] # p2 x r x (M-r) x r
1838
ans1 <- aperm(ans1, c(2,1,3,4)) # r x p2 x (M-r) x r
1746
ans1 = dc.da[,,cbindex,,drop=FALSE] # p2 x r x (M-r) x r
1747
ans1 = aperm(ans1, c(2,1,3,4)) # r x p2 x (M-r) x r
1840
ans1 <- matrix(c(ans1), r*p2, (M-r)*r)
1749
ans1 = matrix(c(ans1), r*p2, (M-r)*r)
1847
dcda.fast <- function(theta, wz, U, z, M, r, xmat, pp, Index.corner,
1848
intercept= TRUE, xij=NULL)
1756
dcda.fast = function(theta, wz, U, z, M, r, xmat, pp, Index.corner,
1757
intercept= TRUE, xij=NULL)
1953
rrr.deriv.rss <- function(theta, wz, U, z, M, r, xmat,
1954
pp, Index.corner, intercept= TRUE,
1862
rrr.deriv.rss = function(theta, wz, U, z, M, r, xmat,
1863
pp, Index.corner, intercept= TRUE,
1958
Amat <- matrix(as.numeric(NA), M, r)
1959
Amat[Index.corner,] <- diag(r)
1960
Amat[-Index.corner,] <- theta # [-(1:M)]
1867
Amat = matrix(as.numeric(NA), M, r)
1868
Amat[Index.corner,] = diag(r)
1869
Amat[-Index.corner,] = theta # [-(1:M)]
1962
1871
if(intercept) {
1963
Blist <- vector("list", pp+1)
1964
Blist[[1]] <- diag(M)
1872
Blist = vector("list", pp+1)
1873
Blist[[1]] = diag(M)
1968
Blist <- vector("list", pp)
1877
Blist = vector("list", pp)
1973
vlm.wfit(xmat, z, Blist, U=U, matrix.out= FALSE, rss= TRUE, xij=xij)$rss
1882
vlm.wfit(xmat=xmat, z, Blist, U=U, matrix.out=FALSE,
1883
rss=TRUE, xij=xij)$rss
1979
rrr.deriv.gradient.fast <- function(theta, wz, U, z, M, r, xmat,
1980
pp, Index.corner, intercept= TRUE)
1889
rrr.deriv.gradient.fast = function(theta, wz, U, z, M, r, xmat,
1890
pp, Index.corner, intercept= TRUE)
1988
Aimat <- matrix(as.numeric(NA), M, r)
1989
Aimat[Index.corner,] <- diag(r)
1990
Aimat[-Index.corner,] <- theta # [-(1:M)]
1898
Aimat = matrix(as.numeric(NA), M, r)
1899
Aimat[Index.corner,] = diag(r)
1900
Aimat[-Index.corner,] = theta # [-(1:M)]
1992
1902
if(intercept) {
1993
Blist <- vector("list", pp+1)
1994
Blist[[1]] <- diag(M)
1903
Blist = vector("list", pp+1)
1904
Blist[[1]] = diag(M)
1995
1905
for(i in 2:(pp+1))
1998
Blist <- vector("list", pp)
1908
Blist = vector("list", pp)
1999
1909
for(i in 1:(pp))
2003
coeffs <- vlm.wfit(xmat, z, Blist, U=U, matrix.out= TRUE,
1913
coeffs = vlm.wfit(xmat, z, Blist, U=U, matrix.out= TRUE,
2004
1914
xij=NULL)$mat.coef
2005
c3 <- coeffs <- t(coeffs) # transpose to make M x (pp+1)
2008
int.vec <- if(intercept) c3[,1] else 0 # \boldeta_0
2009
Cimat <- if(intercept) t(c3[Index.corner,-1,drop=FALSE]) else
1915
c3 = coeffs = t(coeffs) # transpose to make M x (pp+1)
1918
int.vec = if(intercept) c3[,1] else 0 # \boldeta_0
1919
Cimat = if(intercept) t(c3[Index.corner,-1,drop=FALSE]) else
2010
1920
t(c3[Index.corner,,drop=FALSE])
2011
1921
if(nrow(Cimat)!=pp || ncol(Cimat)!=r)
2012
1922
stop("Cimat wrong shape")
2014
1924
fred = kronecker(matrix(1,1,r), if(intercept) xmat[,-1,drop=FALSE] else xmat)
2015
fred <- kronecker(fred, matrix(1,M,1))
2016
barney <- kronecker(Aimat, matrix(1,1,pp))
2017
barney <- kronecker(matrix(1,nn,1), barney)
2019
temp <- array(t(barney*fred), c(r*pp,M,nn))
2020
temp <- aperm(temp, c(2,1,3))
2021
temp <- mux5(wz, temp, M=M, matrix.arg= TRUE)
2022
temp <- m2adefault(temp, M=r*pp) # Note M != M here!
2023
G <- solve(apply(temp,1:2,sum))
2025
dc.da <- array(NA,c(pp,r,r,M))
2026
cbindex <- (1:M)[-Index.corner]
2027
resid2 <- mux22(t(wz), z - matrix(int.vec,nn,M,byrow= TRUE), M=M,
1925
fred = kronecker(fred, matrix(1,M,1))
1926
barney = kronecker(Aimat, matrix(1,1,pp))
1927
barney = kronecker(matrix(1,nn,1), barney)
1929
temp = array(t(barney*fred), c(r*pp,M,nn))
1930
temp = aperm(temp, c(2,1,3))
1931
temp = mux5(wz, temp, M=M, matrix.arg= TRUE)
1932
temp = m2adefault(temp, M=r*pp) # Note M != M here!
1933
G = solve(rowSums(temp, dims=2))
1935
dc.da = array(NA,c(pp,r,r,M))
1936
cbindex = (1:M)[-Index.corner]
1937
resid2 = mux22(t(wz), z - matrix(int.vec,nn,M,byrow= TRUE), M=M,
2028
1938
upper= FALSE, as.mat= TRUE) # mat= TRUE,
2031
1941
for(tt in cbindex) {
2032
fred <- (if(intercept) t(xmat[,-1,drop=FALSE]) else
1942
fred = (if(intercept) t(xmat[,-1,drop=FALSE]) else
2033
1943
t(xmat)) * matrix(resid2[,tt],pp,nn,byrow= TRUE)
2034
temp2 <- kronecker(ei(s,r), apply(fred,1,sum))
1944
temp2 = kronecker(ei(s,r), rowSums(fred))
2037
1947
for(k in 1:r) {
2038
Wiak <- mux22(t(wz), matrix(Aimat[,k],nn,M,byrow= TRUE),
1948
Wiak = mux22(t(wz), matrix(Aimat[,k],nn,M,byrow= TRUE),
2039
1949
M=M, upper= FALSE, as.mat= TRUE) # mat= TRUE,
2040
wxx <- Wiak[,tt] * (if(intercept) xmat[,-1,drop=FALSE] else xmat)
2041
blocki <- (if(intercept) t(xmat[,-1,drop=FALSE]) else t(xmat)) %*% wxx
2042
temp4 <- temp4 + blocki %*% Cimat[,k]
1950
wxx = Wiak[,tt] * (if(intercept) xmat[,-1,drop=FALSE] else xmat)
1951
blocki = (if(intercept) t(xmat[,-1,drop=FALSE]) else t(xmat)) %*% wxx
1952
temp4 = temp4 + blocki %*% Cimat[,k]
2044
dc.da[,,s,tt] <- G %*% (temp2 - 2 * kronecker(ei(s,r),temp4))
1954
dc.da[,,s,tt] = G %*% (temp2 - 2 * kronecker(ei(s,r),temp4))
2047
detastar.da <- array(0,c(M,r,r,nn))
1957
detastar.da = array(0,c(M,r,r,nn))
2049
1959
for(j in 1:r) {
2050
t1 <- t(dc.da[,j,s,])
2051
t1 <- matrix(t1, M, pp)
2052
detastar.da[,j,s,] <- t1 %*% (if(intercept)
1960
t1 = t(dc.da[,j,s,])
1961
t1 = matrix(t1, M, pp)
1962
detastar.da[,j,s,] = t1 %*% (if(intercept)
2053
1963
t(xmat[,-1,drop=FALSE]) else t(xmat))
2056
etastar <- (if(intercept) xmat[,-1,drop=FALSE] else xmat) %*% Cimat
2057
eta <- matrix(int.vec, nn, M, byrow= TRUE) + etastar %*% t(Aimat)
2059
sumWinv <- solve((m2adefault(t(apply(wz, 2, sum)), M=M))[,,1])
2061
deta0.da <- array(0,c(M,M,r))
2063
AtWi <- kronecker(matrix(1,nn,1), Aimat)
2064
AtWi <- mux111(t(wz), AtWi, M=M, upper= FALSE) # matrix.arg= TRUE,
2065
AtWi <- array(t(AtWi), c(r,M,nn))
1966
etastar = (if(intercept) xmat[,-1,drop=FALSE] else xmat) %*% Cimat
1967
eta = matrix(int.vec, nn, M, byrow= TRUE) + etastar %*% t(Aimat)
1969
sumWinv = solve((m2adefault(t(colSums(wz)), M=M))[,,1])
1971
deta0.da = array(0,c(M,M,r))
1973
AtWi = kronecker(matrix(1,nn,1), Aimat)
1974
AtWi = mux111(t(wz), AtWi, M=M, upper= FALSE) # matrix.arg= TRUE,
1975
AtWi = array(t(AtWi), c(r,M,nn))
2067
1977
for(ss in 1:r) {
2068
temp90 <- (m2adefault(t(apply(etastar[,ss]*wz,2,sum)), M=M))[,,1] # M x M
2069
temp92 <- array(detastar.da[,,ss,],c(M,r,nn))
2070
temp93 <- mux7(temp92,AtWi)
2071
temp91 <- apply(temp93,1:2,sum) # M x M
2072
deta0.da[,,ss] <- -(temp90 + temp91) %*% sumWinv
1978
temp90 = (m2adefault(t(colSums(etastar[,ss]*wz)), M=M))[,,1] # M x M
1979
temp92 = array(detastar.da[,,ss,],c(M,r,nn))
1980
temp93 = mux7(temp92,AtWi)
1981
temp91 = rowSums(temp93, dims=2) # M x M
1982
deta0.da[,,ss] = -(temp90 + temp91) %*% sumWinv
2075
ans <- matrix(0,M,r)
2076
fred <- mux22(t(wz), z-eta, M=M, upper= FALSE, as.mat= TRUE) # mat= TRUE,
2077
fred.array <- array(t(fred %*% Aimat),c(r,1,nn))
1986
fred = mux22(t(wz), z-eta, M=M, upper= FALSE, as.mat= TRUE) # mat= TRUE,
1987
fred.array = array(t(fred %*% Aimat),c(r,1,nn))
2078
1988
for(s in 1:r) {
2079
a1 <- apply(fred %*% t(deta0.da[,,s]),2,sum)
2080
a2 <- apply(fred * etastar[,s],2,sum)
2081
temp92 <- array(detastar.da[,,s,],c(M,r,nn))
2082
temp93 <- mux7(temp92, fred.array)
2083
a3 <- apply(temp93,1:2,sum)
2084
ans[,s] <- a1 + a2 + a3
1989
a1 = colSums(fred %*% t(deta0.da[,,s]))
1990
a2 = colSums(fred * etastar[,s])
1991
temp92 = array(detastar.da[,,s,],c(M,r,nn))
1992
temp93 = mux7(temp92, fred.array)
1993
a3 = rowSums(temp93, dims=2)
1994
ans[,s] = a1 + a2 + a3
2087
ans <- -2 * c(ans[cbindex,])
1997
ans = -2 * c(ans[cbindex,])