Skip to content

Commit

Permalink
version 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
mststats authored and cran-robot committed Feb 15, 2012
1 parent c5c9dda commit bb0442e
Show file tree
Hide file tree
Showing 32 changed files with 742 additions and 392 deletions.
10 changes: 5 additions & 5 deletions DESCRIPTION
@@ -1,17 +1,17 @@
Package: VBLPCM
Type: Package
Title: Variational Bayes Latent Position Cluster Model for networks.
Version: 1.3
Date: 2012-01-30
Version: 2.0
Date: 2012-02-08
Author: Michael Salter-Townshend
Maintainer: Michael Salter-Townshend <michael.salter-townshend@ucd.ie>
Description: A package to fit and simulate latent position and cluster
models for statistical networks using a Variational Bayes
approximation.
Depends: MASS, boot, mclust, network, sna, ergm
Depends: MASS, boot, mclust, network, ergm, sna
SystemRequirements: Gnu Scientific Library version >= 1.12
License: GPL (>= 2)
LazyLoad: yes
Packaged: 2012-01-30 14:59:12 UTC; saltertm
Packaged: 2012-02-15 15:40:36 UTC; ripley
Repository: CRAN
Date/Publication: 2012-01-30 16:10:41
Date/Publication: 2012-02-15 15:44:03
52 changes: 26 additions & 26 deletions MD5
@@ -1,20 +1,20 @@
8cac4d170db1b478543f5bbea69d8155 *DESCRIPTION
35d0e9ff023911f93119d82628796790 *NAMESPACE
af8e0411606e3d0a067f0e800c2fb2a3 *R/KL.R
3c451ca311a08c3d9ed5ed2fd8e39554 *R/VBLPCM.R
dfe1234ffc6159d8bc4cb879c2f68781 *DESCRIPTION
6066c73622b7572e7b444b0f1070c9cb *NAMESPACE
0ad99e90eeb440d8ce2350ebb220d2aa *R/KL.R
39bb7b6e908f3d787f79b01ef2f4dfa3 *R/VBLPCM.R
f5a063a6fb11f9872505867175805b1a *R/adjacency_to_edges.R
4828d8226c098d45657f2817ac60afb5 *R/covs.R
2c8072131eeb9ada5240d743045c5a7c *R/covs.R
579ace11895685c2763f4582f906a115 *R/fruchterman_reingold.R
b2971e93430601290bc92758c8587c1f *R/gof.vblpcm.R
03534f95ad52d2cc874dd67639dc55ff *R/log_like_forces.R
781d3e6b533229b14be15822f76df3f2 *R/plot_network.R
7a494d11c300d84a5340831236f00053 *R/predict.R
83e96f1021e251e334e988750b95aefa *R/log_like_forces.R
1de8958e527106faa14dacd0f7a1894f *R/plot_network.R
4f34bb8f64709bfd1f77f32e38d202c0 *R/predict.R
203861162888e86a84e9b20d62f2d8ba *R/print.vblpcm.R
32ef7505c44b2245b165b30aa1ebf816 *R/roc.R
207e34f74b411f38ebd8198bcbcaeb8e *R/start.R
2acb40309ab1d6f67d2c28bd86f73f7a *R/start.R
4f69c86b26fbc64b90e83eb39a6ac450 *R/summarise_groups.R
1c1489335fb6f8be56280af5240adaf6 *R/summary.vblpcm.R
59013909a32abdb61d6230bf35392b06 *R/vb_bic.R
647c54e4383eed4d7bf283ee020e968c *R/vb_bic.R
8ab59b000c16cff57af1aea4299dbaa8 *R/zzz.R
1215b49b49d2dcb0f996500bd0e7c5ce *configure
654b38e8f3726e7c9613425a5b50bbd8 *configure.ac
Expand All @@ -23,39 +23,39 @@ b2971e93430601290bc92758c8587c1f *R/gof.vblpcm.R
1276843b63a1602933616b872ee9317f *data/simulated.network.rda
4ccabdb12a6c7592d26cceab34755ee0 *man/E_to_Y.Rd
62b220ff6a4b95449f21d7eabbbd5848 *man/VBLPCM-internal.Rd
5946abf9a22a5596ca49d011b3720cb1 *man/VBLPCM-package.Rd
4db2abb48ae00cc3dde11aab8104e820 *man/VBLPCM-package.Rd
1d21ac5b8c3d8909d4782465e94cec14 *man/Y_to_E.Rd
b08842a305ad02114fee7ce021dbf4d5 *man/Y_to_M.Rd
722b273c922c4daaccf40eb94c0776a7 *man/Y_to_nonE.Rd
c402389b40f3d6263da75eca5e95b46a *man/aids.Rd
2a466bc056b8b1c4bf5729f5c25603a3 *man/fruchterman_reingold.Rd
258c2d9bd1e62a19585b9f1e2cb41263 *man/gof.vblpcm.Rd
9a832653115a125a4f7b4e1c9e42210a *man/gof.vblpcm.Rd
b7c30411b038367d5844c8f18b55eeb5 *man/hops_to_hopslist.Rd
c3589452029833005b975fe8b0e8c700 *man/log_like_forces.Rd
e8cb13745bc8110e00fd70d8b67f98a7 *man/log_like_forces.Rd
65d65a84e27489040342eabeadb09d26 *man/plot.vblpcm.Rd
c30ba66c70a847da0b132c9e811921c8 *man/predict.vblpcm.Rd
8e9b57714508a170b5d11ae4472b27a9 *man/predict.vblpcm.Rd
ebf0dedf3bb3c17568c54f79d34b752d *man/print.vblpcm.Rd
ca7266e009f2abc53b8256e28e55d427 *man/sampson.Rd
1d1c511715c82a3261f3d548fdf31e49 *man/simulated.network.Rd
e77ae23391ebacc4c3394ea97a7b9c4e *man/summary.vblpcm.Rd
e789ba859d2350aec768f8cdc477db31 *man/vblpcmBIC.Rd
9b07344bce55dd7bd95a1a3bbbe86081 *man/vblpcmBIC.Rd
08998eccc00f203c34c43a20b7686e87 *man/vblpcmKL.Rd
573677355fb1e0bbcaa2b56fb723c53d *man/vblpcmcovs.Rd
c06174c3626f5f8d352564b384bbccf5 *man/vblpcmcovs.Rd
7bb6ee8eec494bf59e5656905120a1d4 *man/vblpcmdrawpie.Rd
5fc302982635c3d8b25380fce4fae8a5 *man/vblpcmfit.Rd
0168242a2c896382b916a70d449451e6 *man/vblpcmgroups.Rd
5c4be52f6272def826fa69501171c448 *man/vblpcmroc.Rd
2a0802649a6ef4d11ce08d432a9403ea *man/vblpcmstart.Rd
940b07d011b17e5abd8a2577d9fd146a *src/KL_funcs.c
39dd9bf50f9c180505e8d2a2432966aa *man/vblpcmstart.Rd
58f585b3f9b59db8ae0198ece56ac607 *src/KL_funcs.c
0cacb14c872b3c9d87e81ab3bb4ce9b5 *src/Makevars
0cacb14c872b3c9d87e81ab3bb4ce9b5 *src/Makevars.in
0e72c822b6e841ee7cf8ce69a7df3382 *src/Makevars.win
39e47220d753fea571b6f4ee8f190402 *src/VBLPCM.c
db26274171b9a08ecd0cc28116f5a6f5 *src/Makevars.win
e307b98f346ca60d4c07dda8b32101f6 *src/VBLPCM.c
7d172a0d8910a5a4f7e77db217270a82 *src/adjacency_to_edges.c
7c3ddd2eff68eac43e5f0877e0d59536 *src/bb.c
ee19f0dd85dfbf936070bfde767813a3 *src/bb.c
61a39c5900a8b02859418ac8e209e974 *src/fruchterman_reingold.c
c20fcdd61b51b14fc24de30dc5a34863 *src/funcs.c
99e0aa34ee3c524d32460bc3f75c73e8 *src/headers.h
0f5512d7426f76942d2b077f8446947f *src/likelihoods.c
6d0f8d78b5879043b1b740752fc7ba56 *src/log_like_forces.c
605276d0140ac3219a6cb3f16b94797e *src/optim.c
20e27a73db81027f7729d7ebb6558f0a *src/funcs.c
52d9d358b91868310e7ab55588fc6030 *src/headers.h
d98ddaf9e02417fe0393f3253ae4bdb0 *src/likelihoods.c
b0f611bbd22d83475de2943dc77d7b11 *src/log_like_forces.c
97659a122e561689b480c55b2f360ee3 *src/optim.c
13 changes: 2 additions & 11 deletions NAMESPACE
@@ -1,12 +1,3 @@
# Export all names
exportPattern(".")
# Export everything
exportPattern("*")

# Import all packages listed as Imports or Depends
import(
MASS,
boot,
mclust,
network,
sna,
ergm
)
35 changes: 20 additions & 15 deletions R/KL.R
@@ -1,6 +1,7 @@
vblpcmKL<-function(x)
{
P<-x$P
P_n<-x$P_n
P_e<-x$P_e
d<-x$d
N<-x$N
NE<-x$NE
Expand All @@ -15,9 +16,12 @@ vblpcmKL<-function(x)
EnonE<-x$EnonE
diam<-x$diam
hopslist<-x$hopslist
XX<-x$XX
V_xi<-x$V_xi
V_psi2<-x$V_psi2
XX_n<-x$XX_n
XX_e<-x$XX_e
V_xi_n<-x$V_xi_n
V_xi_e<-x$V_xi_e
V_psi2_n<-x$V_psi2_n
V_psi2_e<-x$V_psi2_e
V_z<-x$V_z
V_sigma2<-x$V_sigma2
V_eta<-x$V_eta
Expand All @@ -36,27 +40,28 @@ vblpcmKL<-function(x)
x$STRAT=1
STRAT=x$STRAT
KL=0
total_KL<-function(P, D, N, NE, NnonE, NM, G, Y, E, nonE, M, numedges, EnonE, diam, hopslist, XX, V_xi, V_psi2, V_z, V_sigma2, V_eta, V_lambda,
V_omega2, V_nu, V_alpha, xi, psi2, sigma02, omega2, nu, alpha, inv_sigma02, STRAT, KL)
{
ans<-.C("KL_total", NAOK=TRUE, P=as.integer(P),D=as.integer(d), N=as.integer(N),
total_KL<-function(P_n, P_e, D, N, NE, NnonE, NM, G, Y, E, nonE, M, numedges, EnonE, diam, hopslist, XX_n, XX_e,
V_xi_n, V_xi_e, V_psi2_n, V_psi2_e, V_z, V_sigma2, V_eta, V_lambda, V_omega2, V_nu, V_alpha, xi,
psi2, sigma02, omega2, nu, alpha, inv_sigma02, STRAT, KL)
{
ans<-.C("KL_total", NAOK=TRUE, P_n=as.integer(P_n),P_e=as.integer(P_e),D=as.integer(d), N=as.integer(N),
NE=as.integer(NE), NnonE=as.integer(NnonE), NM=as.integer(NM),
G=as.integer(G), Y=as.numeric(t(Y)), E=as.integer(t(E)), nonE=as.integer(t(nonE)), M=as.integer(t(M)),
numedges=as.integer(t(numedges)), EnonE=as.integer(t(EnonE)),
diam=as.integer(diam), hopslist=as.integer(t(hopslist)),
XX=as.double(t(XX)), V_xi=as.double(V_xi), V_psi2=as.double(V_psi2), V_z=as.double(t(V_z)),
V_sigma2=as.double(V_sigma2), V_eta=as.double(t(V_eta)),
V_lambda=as.double(t(V_lambda)),
diam=as.integer(diam), hopslist=as.integer(t(hopslist)), XX_n=as.double(t(XX_n)),
XX_e=as.double(t(XX_e)), V_xi_n=as.double(V_xi_n), V_xi_e=as.double(V_xi_e),
V_psi2_n=as.double(V_psi2_n), V_psi2_e=as.double(V_psi2_e), V_z=as.double(t(V_z)),
V_sigma2=as.double(V_sigma2), V_eta=as.double(t(V_eta)), V_lambda=as.double(t(V_lambda)),
V_omega2=as.double(V_omega2), V_nu=as.double(V_nu), V_alpha=as.double(V_alpha),
xi=as.double(xi), psi2=as.double(psi2), sigma02=as.double(sigma02),
omega2=as.double(omega2), nu=as.double(nu), alpha=as.double(alpha),
inv_sigma02=as.double(inv_sigma02), dists=as.double(t(as.matrix(dist(V_z)))),
STRAT=as.double(STRAT), KL=as.double(KL), PACKAGE="VBLPCM")
return(ans)
}
final_KL<-total_KL(P, d, N, NE, NnonE, NM, G, Y, E, nonE, M, numedges, EnonE, diam, hopslist, XX, V_xi, V_psi2, V_z, V_sigma2, V_eta,
V_lambda, V_omega2, V_nu, V_alpha, xi, psi2, sigma02, omega2, nu, alpha,
inv_sigma02, STRAT, KL)
final_KL<-total_KL(P_n, P_e, d, N, NE, NnonE, NM, G, Y, E, nonE, M, numedges, EnonE, diam, hopslist, XX_n, XX_e, V_xi_n, V_xi_e,
V_psi2_n, V_psi2_e, V_z, V_sigma2, V_eta, V_lambda, V_omega2, V_nu, V_alpha, xi, psi2, sigma02, omega2, nu, alpha,
inv_sigma02, STRAT, KL)
cat("KL distance to true posterior is ", final_KL$KL, "+ constant \n")
final_KL$KL
}
Expand Down
42 changes: 26 additions & 16 deletions R/VBLPCM.R
Expand Up @@ -2,7 +2,8 @@ vblpcmfit<-function(variational.start, STEPS=30, maxiter=100, tol=1e-6, STRAT=1,
{
if (length(d_vector)!=9)
stop("You must supply a d_vector of length 9. Please refer to the help file for vblpcmfit\n")
P<-variational.start$P
P_n<-variational.start$P_n
P_e<-variational.start$P_e
model<-variational.start$model
d<-variational.start$d
N<-variational.start$N
Expand All @@ -18,9 +19,12 @@ vblpcmfit<-function(variational.start, STEPS=30, maxiter=100, tol=1e-6, STRAT=1,
EnonE<-variational.start$EnonE
diam<-variational.start$diam
hopslist<-variational.start$hopslist
XX<-variational.start$XX
V_xi<-variational.start$V_xi
V_psi2<-variational.start$V_psi2
XX_n<-variational.start$XX_n
XX_e<-variational.start$XX_e
V_xi_n<-variational.start$V_xi_n
V_xi_e<-variational.start$V_xi_e
V_psi2_n<-variational.start$V_psi2_n
V_psi2_e<-variational.start$V_psi2_e
V_z<-variational.start$V_z
V_sigma2<-variational.start$V_sigma2
V_eta<-variational.start$V_eta
Expand All @@ -36,37 +40,40 @@ vblpcmfit<-function(variational.start, STEPS=30, maxiter=100, tol=1e-6, STRAT=1,
alpha<-variational.start$alpha
inv_sigma02<-variational.start$inv_sigma02
conv=0 # not converged to start with
out<-.C("Rf_VB_bbs", NAOK=TRUE, steps=as.integer(STEPS), max_iter=as.integer(maxiter), P=as.integer(P),
D=as.integer(d), N=as.integer(N), NE=as.integer(NE), NnonE=as.integer(NnonE), NM=as.integer(NM),
out<-.C("Rf_VB_bbs", NAOK=TRUE, steps=as.integer(STEPS), max_iter=as.integer(maxiter), P_n=as.integer(P_n),
P_e=as.integer(P_e), D=as.integer(d), N=as.integer(N), NE=as.integer(NE), NnonE=as.integer(NnonE), NM=as.integer(NM),
G=as.integer(G), Y=as.numeric(t(Y)), E=as.integer(t(E)), nonE=as.integer(t(nonE)), M=as.integer(t(M)),
numedges=as.integer(t(numedges)), EnonE=as.integer(t(EnonE)), diam=as.integer(diam),
hopslist=as.integer(t(hopslist)), XX=as.double(t(XX)),
V_xi=as.double(V_xi), V_psi2=as.double(V_psi2), V_z=as.double(t(V_z)),
V_sigma2=as.double(V_sigma2), V_eta=as.double(t(V_eta)),
V_lambda=as.double(t(V_lambda)),
hopslist=as.integer(t(hopslist)), XX_n=as.double(t(XX_n)), XX_e=as.double(t(XX_e)),
V_xi_n=as.double(t(V_xi_n)), V_xi_e=as.double(V_xi_e), V_psi2_n=as.double(V_psi2_n),
V_psi2_e=as.double(V_psi2_e), V_z=as.double(t(V_z)), V_sigma2=as.double(V_sigma2),
V_eta=as.double(t(V_eta)), V_lambda=as.double(t(V_lambda)),
V_omega2=as.double(V_omega2), V_nu=as.double(V_nu), V_alpha=as.double(V_alpha),
xi=as.double(xi), psi2=as.double(psi2), sigma02=as.double(sigma02),
omega2=as.double(omega2), nu=as.double(nu), alpha=as.double(alpha),
inv_sigma02=as.double(inv_sigma02), tol=as.double(tol), STRAT=as.double(STRAT),
seed=as.double(seed), d_vector=as.double(d_vector), conv=as.integer(conv),
PACKAGE="VBLPCM")

V_xi<-out$V_xi
V_xi_n<-out$V_xi_n
V_xi_e<-out$V_xi_e
V_z<-t(matrix(out$V_z,ncol=N))
V_sigma2<-out$V_sigma2
V_eta<-t(matrix(out$V_eta,ncol=G))
V_omega2<-out$V_omega2
V_lambda<-t(matrix(out$V_lambda,ncol=G))
V_nu<-out$V_nu
V_alpha<-out$V_alpha
V_psi2<-out$V_psi2
V_psi2_n<-out$V_psi2_n
V_psi2_e<-out$V_psi2_e

V_eta<-t(apply(V_eta, 1, "-", apply(V_z, 2, mean)))
V_z<-t(apply(V_z, 1, "-", apply(V_z, 2, mean)))

variational.params<-list()
variational.params$net<-variational.start$net
P->variational.params$P
P_n->variational.params$P_n
P_e->variational.params$P_e
model->variational.params$model
d->variational.params$d
N->variational.params$N
Expand All @@ -82,9 +89,12 @@ vblpcmfit<-function(variational.start, STEPS=30, maxiter=100, tol=1e-6, STRAT=1,
EnonE->variational.params$EnonE
diam->variational.params$diam
hopslist->variational.params$hopslist
XX->variational.params$XX
V_xi->variational.params$V_xi
V_psi2->variational.params$V_psi2
XX_n->variational.params$XX_n
XX_e->variational.params$XX_e
V_xi_n->variational.params$V_xi_n
V_xi_e->variational.params$V_xi_e
V_psi2_n->variational.params$V_psi2_n
V_psi2_e->variational.params$V_psi2_e
V_z->variational.params$V_z
V_sigma2->variational.params$V_sigma2
V_eta->variational.params$V_eta
Expand Down
49 changes: 12 additions & 37 deletions R/covs.R
@@ -1,58 +1,33 @@
vblpcmcovs<-function(N, model, Y, edgecovs=NULL,nodecovs=NULL)
{
XX<-matrix(rep(1,N^2),ncol=1) # all get the intercept term
P=ncol(XX)
if (model=="receiver")
XX_n<-NULL
XX_e<-matrix(rep(1,N^2),ncol=1) # all get the intercept term
if (model=="rreceiver")
{
# receiver random effects
#P=P+N
#XX<-cbind(XX,t(matrix(rep(diag(1,N),N),N)))
P=P+1
tmp<-apply(Y,2,sum,na.rm=1)
tmp<-(tmp-mean(tmp))/sd(tmp)
XX<-cbind(XX,rep(tmp,N))
XX_n<-cbind(XX_n,rep(1,N))
}

if (model=="sender")
if (model=="rsender")
{
# sender random effects
#XX<-cbind(XX,matrix(0,N^2,N))
#for (i in 1:N)
# XX[((i-1)*N+1):(i*N),i+P]<-1
#P=P+N
P=P+1
tmp<-apply(Y,1,sum,na.rm=1)
tmp<-(tmp-mean(tmp))/sd(tmp)
XX<-cbind(XX,c(t(matrix(rep(tmp,N),N))))
XX_n<-cbind(XX_n,rep(1,N))
}

if (model=="social")
if (model=="rsocial")
{
# sender random effects
#XX<-cbind(XX,matrix(0,N^2,N))
#for (i in 1:N)
# XX[((i-1)*N+1):(i*N),i+P]<-1
#P=P+N
#XX[,(P-N+1):P]<-XX[,(P-N+1):P]+t(matrix(rep(diag(1,N),N),N))
#XX[,(P-N+1):P][XX[,(P-N+1):P]>1]<-1
tmp1<-apply(Y,1,sum,na.rm=1)
tmp1<-(tmp1-mean(tmp1))/sd(tmp1)
tmp2<-apply(Y,2,sum,na.rm=1)
tmp2<-(tmp2-mean(tmp2))/sd(tmp2)
P=P+2
XX<-cbind(XX,c(t(matrix(rep(tmp1,N),N))),rep(tmp2,N))
XX_n<-cbind(XX_n,rep(1,N),rep(1,N))
}
if (!is.null(nodecovs))
if (!is.null(nodecovs)) # include option to not model nodecovs as edgecovs?
{
tmp<-expand.grid(1:N,1:N)
nodecovs<-as.matrix(nodecovs)
nodeedgecovs<-nodecovs[tmp[,1],]-nodecovs[tmp[,2],]
}
if (!is.null(nodecovs))
XX<-cbind(XX,nodeedgecovs)
XX_n<-cbind(XX_n,nodeedgecovs)
if (!is.null(edgecovs))
XX<-cbind(XX,edgecovs)
return(as.matrix(XX))
XX_e<-cbind(XX_e,edgecovs)
return(list("XX_n"=XX_n,"XX_e"=XX_e))
}


Empty file modified R/fruchterman_reingold.R 100644 → 100755
Empty file.
16 changes: 6 additions & 10 deletions R/log_like_forces.R
@@ -1,25 +1,21 @@
log_like_forces<-function(net, D, P, X, B, XX, m=network.size(net), steps=1e3)
log_like_forces<-function(net, D, X, B, m=network.size(net), steps=1e3)
{
directed<-is.directed(net)
N<-network.size(net)
Y<-as.sociomatrix(net)
C_log_like_forces<- function(directed, N, D, P, steps, Y, X, B, XX, m)
C_log_like_forces<- function(directed, N, D, steps, Y, X, B, m)
{
ans<-.C("log_like_forces", NAOK=TRUE, directed=as.integer(directed), N=as.integer(N),
D=as.integer(D), P=as.integer(P), steps=as.integer(steps),
Y=as.double(t(Y)), X=as.numeric(t(X)), B=as.numeric(B), XX=as.numeric(t(XX)), m=as.numeric(m),
PACKAGE="VBLPCM")
D=as.integer(D), steps=as.integer(steps), Y=as.double(t(Y)), X=as.numeric(t(X)),
B=as.numeric(B), m=as.numeric(m), PACKAGE="VBLPCM")
return(ans)
}

delete<-seq(from=1, to=N*N, by=(N+1))
y<-c(Y)[-delete]# logistic regression
y[is.na(y)]<-0
loglike<-function(Beta, x, y)
{
covs<-(XX%*%Beta)[-delete]
sum(y*(covs-x)) - sum(log(1+exp(covs-x)))
}
sum(y*(Beta-x)) - sum(log(1+exp(Beta-x)))

if (!exists("doB")) doB<-1

Expand All @@ -30,7 +26,7 @@ log_like_forces<-function(net, D, P, X, B, XX, m=network.size(net), steps=1e3)
if (doB==1)
B<-optim(B, loglike, x=tmpx, y=y, method="BFGS", control=list(fnscale=-1))$par
# update X
out<-C_log_like_forces(directed, N, D, P, steps, Y, X, B, XX, m=N)
out<-C_log_like_forces(directed, N, D, steps, Y, X, B, m=N)
out$X<-t(matrix(out$X,ncol=N))
# centre
out$X <- out$X - t(matrix(rep(apply(out$X,2,mean),N),nrow=D))
Expand Down

0 comments on commit bb0442e

Please sign in to comment.