[Rsiena-commits] r231 - in pkg: RSiena RSiena/R RSiena/inst/doc RSiena/man RSiena/tests RSienaTest RSienaTest/R RSienaTest/doc RSienaTest/inst/doc RSienaTest/man
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Sat Jun 15 23:01:06 CEST 2013
Author: tomsnijders
Date: 2013-06-15 23:01:05 +0200 (Sat, 15 Jun 2013)
New Revision: 231
Modified:
pkg/RSiena/DESCRIPTION
pkg/RSiena/R/globals.r
pkg/RSiena/R/initializeFRAN.r
pkg/RSiena/R/phase1.r
pkg/RSiena/R/phase2.r
pkg/RSiena/R/phase3.r
pkg/RSiena/R/print01Report.r
pkg/RSiena/R/sienaGOF.r
pkg/RSiena/R/sienaTimeTest.r
pkg/RSiena/R/sienaprint.r
pkg/RSiena/changeLog
pkg/RSiena/inst/doc/RSiena.bib
pkg/RSiena/inst/doc/RSiena_Manual.pdf
pkg/RSiena/inst/doc/RSiena_Manual.tex
pkg/RSiena/man/RSiena-package.Rd
pkg/RSiena/man/coCovar.Rd
pkg/RSiena/man/coDyadCovar.Rd
pkg/RSiena/man/plot.sienaTimeTest.Rd
pkg/RSiena/man/sienaAlgorithmCreate.Rd
pkg/RSiena/man/sienaCompositionChange.Rd
pkg/RSiena/man/sienaDependent.Rd
pkg/RSiena/man/sienaGOF-auxiliary.Rd
pkg/RSiena/man/sienaGOF.Rd
pkg/RSiena/man/sienaTimeTest.Rd
pkg/RSiena/man/varCovar.Rd
pkg/RSiena/man/varDyadCovar.Rd
pkg/RSiena/tests/scripts.Rout.save
pkg/RSienaTest/DESCRIPTION
pkg/RSienaTest/R/globals.r
pkg/RSienaTest/R/initializeFRAN.r
pkg/RSienaTest/R/phase1.r
pkg/RSienaTest/R/phase2.r
pkg/RSienaTest/R/phase3.r
pkg/RSienaTest/R/print01Report.r
pkg/RSienaTest/R/sienaGOF.r
pkg/RSienaTest/R/sienaTimeTest.r
pkg/RSienaTest/R/sienaprint.r
pkg/RSienaTest/changeLog
pkg/RSienaTest/doc/
pkg/RSienaTest/doc/RSienaDeveloper.tex
pkg/RSienaTest/doc/Siena_algorithms4.tex
pkg/RSienaTest/inst/doc/RSiena.bib
pkg/RSienaTest/inst/doc/RSiena_Manual.pdf
pkg/RSienaTest/inst/doc/RSiena_Manual.tex
pkg/RSienaTest/man/RSiena-package.Rd
pkg/RSienaTest/man/coCovar.Rd
pkg/RSienaTest/man/coDyadCovar.Rd
pkg/RSienaTest/man/plot.sienaTimeTest.Rd
pkg/RSienaTest/man/sienaAlgorithmCreate.Rd
pkg/RSienaTest/man/sienaCompositionChange.Rd
pkg/RSienaTest/man/sienaDependent.Rd
pkg/RSienaTest/man/sienaGOF-auxiliary.Rd
pkg/RSienaTest/man/sienaGOF.Rd
pkg/RSienaTest/man/varCovar.Rd
pkg/RSienaTest/man/varDyadCovar.Rd
Log:
Bug fixes of auxiliary functions for sienaGOF.
If there is a composition change, force estimation to be non-conditional.
Some other small changes.
Modified: pkg/RSiena/DESCRIPTION
===================================================================
--- pkg/RSiena/DESCRIPTION 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/DESCRIPTION 2013-06-15 21:01:05 UTC (rev 231)
@@ -1,8 +1,8 @@
Package: RSiena
Type: Package
Title: Siena - Simulation Investigation for Empirical Network Analysis
-Version: 1.1-230
-Date: 2013-05-10
+Version: 1.1-231
+Date: 2013-06-15
Author: Various
Depends: R (>= 2.15.0)
Imports: Matrix
Modified: pkg/RSiena/R/globals.r
===================================================================
--- pkg/RSiena/R/globals.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/globals.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -1,7 +1,7 @@
##/*****************************************************************************
## * SIENA: Simulation Investigation for Empirical Network Analysis
## *
-## * Web: http://www.stats.ox.ac.uk/~snidjers/siena
+## * Web: http://www.stats.ox.ac.uk/~snijders/siena
## *
## * File: globals.r
## *
Modified: pkg/RSiena/R/initializeFRAN.r
===================================================================
--- pkg/RSiena/R/initializeFRAN.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/initializeFRAN.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -176,7 +176,7 @@
types <- sapply(data[[1]]$depvars, function(x) attr(x, "type"))
## now check if conditional estimation is OK and copy to z if so
z$cconditional <- FALSE
- if (x$cconditional)
+ if ((x$cconditional) & (!(attr(data, "compositionChange"))))
{
if (x$maxlike)
{
@@ -299,8 +299,24 @@
z$haveDfra <- TRUE
z$dfra <- prevAns$dfra
z$dinv <- prevAns$dinv
- z$dinvv <- prevAns$dinvv
- z$sf <- prevAns$sf
+ # z$dinvv must not be taken from prevAns,
+ # because the value of diagonalize
+ # is defined in x and may have changed.
+ # Therefore here we copy the corresponding lines
+ # from phase1.r.
+ if (!x$diagg)
+ {
+ # Partial diagonalization of derivative matrix
+ # for use if 0 < x$diagonalize < 1.
+ temp <- (1-x$diagonalize)*z$dfra +
+ x$diagonalize*diag(diag(z$dfra))
+ temp[z$fixed, ] <- 0.0
+ temp[, z$fixed] <- 0.0
+ diag(temp)[z$fixed] <- 1.0
+ # Invert this matrix
+ z$dinvv <- solve(temp)
+ }
+ z$sf <- prevAns$sf
# check for backward compatibility with pre-1.1-220 versions:
if (is.null(prevAns$regrCoef))
{
Modified: pkg/RSiena/R/phase1.r
===================================================================
--- pkg/RSiena/R/phase1.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/phase1.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -185,6 +185,7 @@
z$mnfra[z$fixed] <- 0.0
z$sf[ , z$fixed] <- 0
}
+ # Manage derivative matrix
if (any(diag(z$dfra) < 1e-8))
{
sml <- (1 : z$pp)[diag(z$dfra) < 1e-8]
@@ -192,6 +193,7 @@
Report(c('Diagonal elements(s)', sml,
'of derivative matrix amended in phase 1.'), cf, fill=80)
}
+ # Invert derivative matrix and define step fchange that will not be made.
if (inherits(try(dinv <- solve(z$dfra)), "try-error"))
{
Report('Error message for inversion of dfra: \n', cf)
@@ -217,10 +219,13 @@
}
if (!x$diagg)
{
+ # Partial diagonalization of derivative matrix
+ # for use if 0 < x$diagonalize < 1.
temp <- (1-x$diagonalize)*z$dfra + x$diagonalize*diag(diag(z$dfra))
temp[z$fixed, ] <- 0.0
temp[, z$fixed] <- 0.0
diag(temp)[z$fixed] <- 1.0
+ # Invert this matrix
z$dinvv <- solve(temp)
}
Report('dfra :\n', cf)
Modified: pkg/RSiena/R/phase2.r
===================================================================
--- pkg/RSiena/R/phase2.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/phase2.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -145,7 +145,7 @@
}
if (useAverage)
{
- z$theta <- z$thav / z$thavn #(z$nit + 1)
+ z$theta <- z$thav / z$thavn # z$thavn = (z$nit + 1)
}
else
{
@@ -302,9 +302,7 @@
z$OK <- FALSE
break
}
-
-
-
+
}
## setup check for end of phase. either store or calculate
if (z$nit %% 2 == 1)
Modified: pkg/RSiena/R/phase3.r
===================================================================
--- pkg/RSiena/R/phase3.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/phase3.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -142,6 +142,8 @@
##calculate t-ratios
dmsf <- diag(z$msf)
sf <- colMeans(z$sf)
+ # TS: I wonder why "use" and "use2" are the names in the following lines;
+ # the coordinates with "use" are <<not>> used.
use <- dmsf < 1e-20 * z$scale * z$scale
use2 <- abs(sf) < 1e-10 * z$scale
dmsf[use] <- 1e-20 * z$scale[use] * z$scale[use]
@@ -150,13 +152,13 @@
tstat[use & use2] <- 0
tstat[use & !use2] <- 999
z$tstat <- tstat
- # tconv.max = Maximum value of t-ratio for convergence,
+ # tconv.max = Maximum value of t-ratio for convergence,
# for any linear combination.
z$tconv.max <- NA
if (sum(!z$fixed) > 0)
{
mean.dev <- colSums(z$sf)[!z$fixed]/dim(z$sf)[1]
- cov.dev <- z$msf[!z$fixed,!z$fixed]
+ cov.dev <- z$msf[!z$fixed,!z$fixed]
if (inherits(try(thisproduct <- solve(cov.dev, mean.dev)),"try-error"))
{
Report('Maximum t-ratio for convergence not computable.\n', outf)
@@ -192,7 +194,7 @@
{
Report(c('(Since the diagnostic checks now are based only on ',
z$Phase3nits,
- ' iterations', '\nThey are not reliable.)'), sep='', outf)
+ ' iterations,', '\nthey are not reliable.)\n'), sep='', outf)
}
if (error) ## also test subphase here but not relevant to phase 3, I think
{
@@ -204,7 +206,7 @@
## removed repfortotal loop possibility here as not functioning now
if (z$Phase3nits <= 50)
{
- Report(c('However, the standard deviations are based on',
+ Report(c('Note that the standard deviations are based on',
'few simulations.\n'), outf)
}
}
@@ -387,6 +389,7 @@
fchange <- dinv%*%colMeans(z$sf)
z$dinv <- dinv
}
+ z$fchange <- fchange
Report('dfrac :\n', cf)
PrtOutMat(z$dfrac, cf)
Report('inverse of dfra :\n', cf)
Modified: pkg/RSiena/R/print01Report.r
===================================================================
--- pkg/RSiena/R/print01Report.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/print01Report.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -524,9 +524,12 @@
format(round(atts$mean, 3),
nsmall=3, width=10), "\n"), outf)
}
- Report(c("The mean value", ifelse(nCovars == 1, " is", "s are"),
+ if (nData <= 1)
+ {
+ Report(c("The mean value", ifelse(nCovars == 1, " is", "s are"),
" subtracted from the covariate",
ifelse(nCovars == 1, ".\n\n", "s.\n\n")), sep="", outf)
+ }
}
##@reportChangingCovariates internal print01Report
reportChangingCovariates <- function()
@@ -616,15 +619,18 @@
format(round(atts$meanp[j], 3),
nsmall=3, width=10), "\n"), outf)
}
- Report(c(format("Overall", width=28),
+ Report(c(format("Overall", width=29),
format(round(atts$mean, 3), width=10, nsmall=3),
"\n"), outf)
}
}
- Report("\nThe overall mean value", outf)
- Report(c(ifelse(nCovars == 1, " is", "s are"),
+ if (nData <= 1)
+ {
+ Report("\nThe overall mean value", outf)
+ Report(c(ifelse(nCovars == 1, " is", "s are"),
"subtracted from the covariate.\n\n"), outf)
+ }
}
##@reportConstantDyadicCovariates internal print01Report
reportConstantDyadicCovariates <- function()
@@ -876,6 +882,7 @@
nets <- atts$types != "behavior"
if (length(data) > 1)
{
+ Heading(1, outf, "Further processing of multi-group data.")
Report("Series of observations for the multi-group project:\n", outf)
periodFromStart <- 0
for (i in seq(along=data))
@@ -885,6 +892,22 @@
periodFromStart <- periodFromStart + data[[i]]$observations
}
Report("\n", outf)
+ if (length(atts$vCovars) == 1)
+ {
+ Report(c("The overall mean value ",
+ format(round(atts$vCovarMean, 4), nsmall=3, width=12),
+ " is subtracted from covariate ", atts$vCovars,
+ ".\n\n"), sep="", outf)
+ }
+ else if (length(atts$vCovars) >= 2)
+ {
+ Report(c("The mean values are subtracted from the covariates:\n"), outf)
+ for (i in seq(along=atts$vCovars))
+ {
+ Report(c(format(atts$vCovars[i], width=15),
+ format(round(atts$vCovarMean[i], 4), nsmall=3, width=12), '\n'), outf)
+ }
+ }
}
periodNos <- attr(data, "periodNos")
if (any(atts$anyUpOnly[nets]))
Modified: pkg/RSiena/R/sienaGOF.r
===================================================================
--- pkg/RSiena/R/sienaGOF.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/sienaGOF.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -40,8 +40,18 @@
stop("You need to supply the parameter <<auxiliaryFunction>>.")
}
groups <- length(sienaFitObject$f$groupNames)
- if (verbose) cat("Detected", iterations, "iterations and", groups,
- "groups.\n")
+ if (verbose)
+ {
+ if (groups <= 1)
+ {
+ cat("Detected", iterations, "iterations and", groups, "group.\n")
+ }
+ else
+ {
+ cat("Detected", iterations, "iterations and", groups, "groups.\n")
+ }
+ }
+
if (is.null(period) )
{
period <- 1:(attr(sienaFitObject$f[[1]]$depvars[[1]], "netdims")[3] - 1)
@@ -72,7 +82,17 @@
attr(obsStats,"joint") <- join
## Calculate the simulated auxiliary statistics
- if (verbose) cat("Calculating auxiliary statistics for periods", period, ".\n")
+ if (verbose)
+ {
+ if (length(period) <= 1)
+ {
+ cat("Calculating auxiliary statistics for period", period, ".\n")
+ }
+ else
+ {
+ cat("Calculating auxiliary statistics for periods", period, ".\n")
+ }
+ }
if (!is.null(cluster)) {
ttcSimulation <- system.time(simStatsByPeriod <- lapply(period,
@@ -662,31 +682,50 @@
# Ties for ordered pairs with a missing value for wave=period or period+1
# are zeroed;
# note that this also is done in RSiena for calculation of target statistics.
-sparseMatrixExtraction <- function(i, obsData, sims, period, groupName, varName)
-{
+sparseMatrixExtraction <-
+ function(i, obsData, sims, period, groupName, varName){
# require(Matrix)
- dimsOfDepVar<-
- attr(obsData[[groupName]]$depvars[[varName]], "netdims")
- missing <- Matrix((is.na(obsData[[groupName]]$depvars[[varName]][,,period+1]) |
- is.na(obsData[[groupName]]$depvars[[varName]][,,period+1]))*1)
+ dimsOfDepVar<- attr(obsData[[groupName]]$depvars[[varName]], "netdims")
+ if (attr(obsData[[groupName]]$depvars[[varName]], "sparse"))
+ {
+ missings <-
+ (is.na(obsData[[groupName]]$depvars[[varName]][[period]]) |
+ is.na(obsData[[groupName]]$depvars[[varName]][[period+1]]))*1
+ }
+ else
+ {
+ missings <- Matrix(
+ (is.na(obsData[[groupName]]$depvars[[varName]][,,period]) |
+ is.na(obsData[[groupName]]$depvars[[varName]][,,period+1]))*1)
+ }
if (is.null(i))
{
- # sienaGOF wants the observation:
- returnValue <-
- Matrix(obsData[[groupName]]$depvars[[varName]][,,period+1])
+ # sienaGOF wants the observation;
+ # transform structurally fixed values into regular values
+ # by "modulo 10" operation
+ if (attr(obsData[[groupName]]$depvars[[varName]], "sparse"))
+ {
+ returnValue <- drop0(
+ Matrix(obsData[[groupName]]$depvars[[varName]][[period+1]] %% 10))
+ }
+ else
+ {
+ returnValue <-
+ Matrix(obsData[[groupName]]$depvars[[varName]][,,period+1] %% 10)
+ }
returnValue[is.na(returnValue)] <- 0
}
else
{
# sienaGOF wants the i-th simulation:
returnValue <- sparseMatrix(
- sims[[i]][[groupName]][[varName]][[period]][,1],
- sims[[i]][[groupName]][[varName]][[period]][,2],
- x=sims[[i]][[groupName]][[varName]][[period]][,3],
- dims=dimsOfDepVar[1:2] )
+ sims[[i]][[groupName]][[varName]][[period]][,1],
+ sims[[i]][[groupName]][[varName]][[period]][,2],
+ x=sims[[i]][[groupName]][[varName]][[period]][,3],
+ dims=dimsOfDepVar[1:2] )
}
## Zero missings:
- 1*((returnValue - missing) > 0)
+ 1*((returnValue - missings) > 0)
}
##@networkExtraction sienaGOF Extracts simulated networks
@@ -694,68 +733,127 @@
# networks from the results of a siena07 run.
# It returns the network as an edge list of class "network"
# according to the <network> package (used for package sna).
-# Ties for ordered pairs with a missing value for wave=period or period+1 are zeroed;
+# Ties for ordered pairs with a missing value for wave=period or period+1
+# are zeroed;
# note that this also is done in RSiena for calculation of target statistics.
-networkExtraction <- function (i, obsData, sims, period, groupName, varName)
-{
+networkExtraction <- function (i, obsData, sims, period, groupName, varName){
require(network)
dimsOfDepVar<- attr(obsData[[groupName]]$depvars[[varName]], "netdims")
- missings <- is.na(obsData[[groupName]]$depvars[[varName]][,,period]) |
- is.na(obsData[[groupName]]$depvars[[varName]][,,period+1])
isbipartite <- (attr(obsData[[groupName]]$depvars[[varName]], "type")
=="bipartite")
- if (is.null(i))
+ sparseData <- (attr(obsData[[groupName]]$depvars[[varName]], "sparse"))
+ # For bipartite networks in package <network>,
+ # the number of nodes is equal to
+ # the number of actors (rows) plus the number of events (columns)
+ # with all actors preceeding all events.
+ # Therefore the bipartiteOffset will come in handy:
+ bipartiteOffset <- ifelse (isbipartite, 1 + dimsOfDepVar[1], 1)
+
+ # Initialize empty networks:
+ if (isbipartite)
+ {
+ # for bipartite networks, package <<network>> numbers
+ # the second mode vertices consecutively to the first mode.
+ emptyNetwork <- network.initialize(dimsOfDepVar[1]+dimsOfDepVar[2],
+ bipartite=dimsOfDepVar[1])
+ }
+ else
+ {
+ emptyNetwork <- network.initialize(dimsOfDepVar[1], bipartite=NULL)
+ }
+ if (sparseData)
+ {
+ # Which tie variables are regarded as missings:
+ missings <- as(
+ is.na(obsData[[groupName]]$depvars[[varName]][[period]]) |
+ is.na(obsData[[groupName]]$depvars[[varName]][[period+1]]),
+ "lgTMatrix")
+ # For lgTMatrix, slots i and j are the rows and columns,
+ # numbered from 0 to dimension - 1.
+ # Actors in class network are numbered starting from 1.
+ # Hence 1 must be added to missings at i and missings at j.
+ # Put the missings into network shape:
+ if (length(missings at i) <= 0)
{
- # sienaGOF wants the observation:
- original <- obsData[[groupName]]$depvars[[varName]][,,period+1]
+ missings <- emptyNetwork
+ }
+ else
+ {
+ missings <- network.edgelist(
+ cbind(missings at i + 1, missings at j + bipartiteOffset, 1), emptyNetwork)
+ }
+ }
+ else # not sparse
+ {
+ # For adjacency matrices the size is evident.
if (isbipartite)
- {
- # This will not go well if original is an edge list. TODO
- if (dim(original)[2] < dimsOfDepVar[2]){
- stop(
- "networkExtraction() does not allow edge lists for bipartite networks.")}
- returnValue <- network(original, bipartite=dimsOfDepVar[1]) -
- network(missings, matrix.type="adjacency",
- bipartite=dimsOfDepVar[1])
- }
- else
- {
- returnValue <- network(original, bipartite=FALSE) -
- network(missings, bipartite=FALSE)
- }
+ {
+ missings <- network(
+ (is.na(obsData[[groupName]]$depvars[[varName]][,,period]) |
+ is.na(obsData[[groupName]]$depvars[[varName]][,,period+1]))*1,
+ matrix.type="adjacency", bipartite=dimsOfDepVar[1])
}
else
{
- #sienaGOF wants the i-th simulation:
+ missings <- network(
+ (is.na(obsData[[groupName]]$depvars[[varName]][,,period]) |
+ is.na(obsData[[groupName]]$depvars[[varName]][,,period+1]))*1,
+ matrix.type="adjacency")
+ }
+ }
+
+ if (is.null(i))
+ {
+ # sienaGOF wants the observation;
+ if (sparseData)
+ {
+ # transform structurally fixed values into regular values
+ # by "modulo 10" operation;
+ # drop NAs and 0 values
+ original <-
+ obsData[[groupName]]$depvars[[varName]][[period+1]] %% 10
+ original[is.na(original)] <- 0
+ original <- as(drop0(original), "dgTMatrix")
+ # now original at x is a column of ones;
+ # the 1 here is redundant because of the default ignore.eval=TRUE
+ # in network.edgelist
+ returnValue <- network.edgelist(
+ cbind(original at i + 1, original at j + bipartiteOffset, 1),
+ emptyNetwork) - missings
+
+ }
+ else # not sparse: deal with adjacency matrices
+ {
+ original <-
+ obsData[[groupName]]$depvars[[varName]][,,period+1] %% 10
+ original[is.na(original)] <- 0
if (isbipartite)
{
- # for bipartite networks, package <<network>> numbers
- # the second mode vertices consecutively to the first mode.
- returnValue <- network(
- cbind(sims[[i]][[groupName]][[varName]][[period]][,1],
- (sims[[i]][[groupName]][[varName]][[period]][,2] +
- dimsOfDepVar[1])),
- matrix.type="edgelist", bipartite=dimsOfDepVar[1])
- # There seems to be no function in package network to change n.
- returnValue$gal$n <- dimsOfDepVar[1] + dimsOfDepVar[2]
- returnValue <- returnValue -
- network(missings, matrix.type="adjacency",
- bipartite=dimsOfDepVar[1])
+ returnValue <- network(original, matrix.type="adjacency",
+ bipartite=dimsOfDepVar[1]) - missings
}
else
{
- returnValue <- network(
- cbind(sims[[i]][[groupName]][[varName]][[period]][,1],
- sims[[i]][[groupName]][[varName]][[period]][,2]),
- matrix.type="edgelist", bipartite=FALSE)
- returnValue$gal$n <- dimsOfDepVar[1]
- returnValue <- returnValue - network(missings, bipartite=FALSE)
+ returnValue <- network(original, matrix.type="adjacency",
+ bipartite=FALSE) - missings
}
}
+ }
+ else
+ {
+ # sienaGOF wants the i-th simulation;
+ # the 1 in cbind is redundant because of the default ignore.eval=TRUE
+ # in network.edgelist
+ bipartiteOffset <- ifelse (isbipartite, dimsOfDepVar[1], 0)
+ returnValue <- network.edgelist(
+ cbind(
+ sims[[i]][[groupName]][[varName]][[period]][,1],
+ (sims[[i]][[groupName]][[varName]][[period]][,2] + bipartiteOffset),
+ 1), emptyNetwork) - missings
+ }
returnValue
}
-
##@behaviorExtraction sienaGOF Extracts simulated behavioral variables.
# This function provides a standard way of extracting simulated and observed
# dependent behavior variables from the results of a siena07 run.
@@ -765,36 +863,37 @@
behaviorExtraction <- function (i, obsData, sims, period, groupName, varName) {
missings <- is.na(obsData[[groupName]]$depvars[[varName]][,,period]) |
is.na(obsData[[groupName]]$depvars[[varName]][,,period+1])
- if (is.null(i)) {
- # sienaGOF wants the observation:
- original <- obsData[[groupName]]$depvars[[varName]][,,period+1]
- original[missings] <- NA
- returnValue <- original
- }
- else
- {
- #sienaGOF wants the i-th simulation:
- returnValue <- sims[[i]][[groupName]][[varName]][[period]]
- returnValue[missings] <- NA
- }
- returnValue
+ if (is.null(i))
+ {
+ # sienaGOF wants the observation:
+ original <- obsData[[groupName]]$depvars[[varName]][,,period+1]
+ original[missings] <- NA
+ returnValue <- original
+ }
+ else
+ {
+ #sienaGOF wants the i-th simulation:
+ returnValue <- sims[[i]][[groupName]][[varName]][[period]]
+ returnValue[missings] <- NA
+ }
+ returnValue
}
##@OutdegreeDistribution sienaGOF Calculates Outdegree distribution
OutdegreeDistribution <- function(i, obsData, sims, period, groupName, varName,
levls=0:8, cumulative=TRUE) {
- x <- sparseMatrixExtraction(i, obsData, sims, period, groupName, varName)
- a <- apply(x, 1, sum)
- if (cumulative)
- {
- oddi <- sapply(levls, function(i){ sum(a<=i) })
- }
- else
- {
- oddi <- sapply(levls, function(i){ sum(a==i) })
- }
- names(oddi) <- as.character(levls)
- oddi
+ x <- sparseMatrixExtraction(i, obsData, sims, period, groupName, varName)
+ a <- apply(x, 1, sum)
+ if (cumulative)
+ {
+ oddi <- sapply(levls, function(i){ sum(a<=i) })
+ }
+ else
+ {
+ oddi <- sapply(levls, function(i){ sum(a==i) })
+ }
+ names(oddi) <- as.character(levls)
+ oddi
}
##@IndegreeDistribution sienaGOF Calculates Indegree distribution
@@ -823,8 +922,14 @@
levls <- attr(obsData[[groupName]]$depvars[[varName]],"behRange")[1]:
attr(obsData[[groupName]]$depvars[[varName]],"behRange")[2]
}
+ if (cumulative)
+ {
+ bdi <- sapply(levls, function(i){ sum(x<=i, na.rm=TRUE) })
+ }
+ else
+ {
bdi <- sapply(levls, function(i){ sum(x==i, na.rm=TRUE) })
- names(bdi) <- as.character(levls)
- bdi
-}
-
+ }
+ names(bdi) <- as.character(levls)
+ bdi
+}
\ No newline at end of file
Modified: pkg/RSiena/R/sienaTimeTest.r
===================================================================
--- pkg/RSiena/R/sienaTimeTest.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/sienaTimeTest.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -421,7 +421,7 @@
as.character(toTest$type), ")", sep=""))
toTest$effectName <-
factor(paste(toTest$effectName, type,
- " \n(p=", toTest$effectTest, ")", sep=""))
+ " \n(chisq=", toTest$effectTest, ")", sep=""))
toTest$valsplus <- toTest$OneStepEst +
ifelse(toTest$period == 1, 0, toTest$OneStepEst[toTest$baseEffect])
toTest$dummysd <- abs(toTest$OneStepEst / qnorm(1 - toTest$p.value / 2))
Modified: pkg/RSiena/R/sienaprint.r
===================================================================
--- pkg/RSiena/R/sienaprint.r 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/R/sienaprint.r 2013-06-15 21:01:05 UTC (rev 231)
@@ -62,7 +62,7 @@
print(tmp, quote=FALSE)
cat("\n")
}
-
+
for (j in (1:length(x$depvars)))
{
xj <- x$depvars[[j]]
@@ -71,7 +71,7 @@
mymat[2,] <- c("Type", attr(xj, "type"))
mymat[3,] <- c("Observations", attr(xj, "netdims")[3])
if (attr(xj, "type") == "bipartite")
- {
+ {
mymat[4,] <- c("First nodeset ", attr(xj, "nodeSet")[1])
mymat[5,] <- c("Second nodeset ",attr(xj, "nodeSet")[2])
nrows <- 5
@@ -80,22 +80,22 @@
{
mymat[4,] <- c("Nodeset ", attr(xj, "nodeSet"))
nrows <- 4
- }
+ }
if (attr(xj, "type") == "behavior")
{
- mymat[nrows+1,] <- c("Range",
+ mymat[nrows+1,] <- c("Range",
paste(attr(xj, "range2"), collapse=" - "))
}
else
{
- mymat[nrows+1,] <- c("Densities",
+ mymat[nrows+1,] <- c("Densities",
paste(signif(attr(xj, "density"), 2), collapse=" "))
}
mymat2 <- apply(mymat[0:nrows+1,], 2, format)
write.table(mymat2, row.names=FALSE, col.names=FALSE, quote=FALSE)
cat("\n")
}
-
+
if (length(x$cCovars) > 0)
{
cat('Constant covariates: ', paste(names(x$cCovars), collapse=", "), "\n")
@@ -406,24 +406,31 @@
}
else
{
- if (is.na(x$cconditional) || !x$cconditional)
+ if (is.na(x$cconditional))
{
cat(" Unconditional simulation if more than one dependent",
"variable\n")
}
else
{
- cat(" Conditional simulation:")
- if (x$condname != '')
+ if (x$cconditional)
{
- cat('conditioned on', x$condname, '\n')
+ cat(" Conditional simulation:")
+ if (x$condname != '')
+ {
+ cat('conditioned on', x$condname, '\n')
+ }
+ else
+ {
+ if (x$condvarno > 0)
+ {
+ cat('conditioned on variable number', x$condvarno, '\n')
+ }
+ }
}
else
{
- if (x$condvarno > 0)
- {
- cat('conditioned on variable number', x$condvarno, '\n')
- }
+ cat(" Unconditional simulation\n")
}
}
}
Modified: pkg/RSiena/changeLog
===================================================================
--- pkg/RSiena/changeLog 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/changeLog 2013-06-15 21:01:05 UTC (rev 231)
@@ -1,3 +1,27 @@
+2013-06-15 R-forge revision 231
+Changes in RSiena as well as RSienaTest:
+ * Make the "cumulative" option operational in BehaviorDistribution()
+ (sienaGOF.r).
+ * Correct bug in treatment of missing values in sparseMatrixExtraction()
+ (sienaGOF.r).
+ * Allow sparse observed data matrices, and structural zeros and ones, in
+ sparseMatrixExtraction() and networkExtraction(),
+ and bipartite networks in networkExtraction() (sienaGOF.r).
+ * In case prevAns exists, recalculate z$dinvv instead of taking it
+ from prevAns (initializeFRAN.r) (parameter diag may have changed)
+ * Report correct centering (by overall means) of individual
+ covariates for multi-group objects (print01Report.r).
+ * in sienaTimeTest: string in toTest$effectName set to "chisq="
+ instead of "p=" (sienaTimeTest.r)
+ * In print method for sienaAlgorithm, report of conditional corrected
+ in case !x$cconditional (sienaprint.r)
+ * If there is a composition change object, MoM estimation is forced
+ to be non-conditional (initializeFRAN.r). This is reported in the help file
+ (sienaCompositionChange.Rd).
+
+ * Small changes in help files sienaAlgorithm.Rd, plot.sienaTimeTest.Rd,
+
+
2013-05-10 R-forge revision 230
Changes in RSiena as well as RSienaTest:
* Add attribute maxObsOutDegree to <object of class siena>$depvars[[.]]
Modified: pkg/RSiena/inst/doc/RSiena.bib
===================================================================
--- pkg/RSiena/inst/doc/RSiena.bib 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/inst/doc/RSiena.bib 2013-06-15 21:01:05 UTC (rev 231)
@@ -1099,7 +1099,15 @@
year = 2010,
pages = {283--328}}
+ at article{Goldthorpe2001,
+ Author = {John H. Goldthorpe},
+ Title = {Causation, statistics, and sociology},
+ Journal = {European Sociological Review},
+ Volume = {17},
+ Pages = {1--20},
+ Year = {2001} }
+
@article{Goodman1961,
Author = {Leo A. Goodman},
Title = {Snowball Sampling},
@@ -3530,6 +3538,7 @@
Vol. 3: Multivariate Statistics and Matrices in Statistics.
Proceedings of the 5th Tartu Conference},
pages = {211--227},
+ editor = { E.Tiit and T. Kollo and H. Niemi}
publisher = {TEV Vilnius},
address = {Lithuania},
year=1995}
@@ -3696,14 +3705,14 @@
volume = 4,
pages = {567--588}}
- at Article{SLT2012,
+ at Article{SLT2013,
title = {A model for the multiplex dynamics of two-mode and one-mode networks,
with an application to employment preference, friendship, and advice},
- year = {2012},
+ year = {2013},
author = {Tom A. B. Snijders and Alessandro Lomi and Vanina Torl\`{o}},
journal = {Social Networks},
- year = {2012},
- note = {(in press)}
+ volume = 35,
+ pages = {265--276}
}
Modified: pkg/RSiena/inst/doc/RSiena_Manual.pdf
===================================================================
--- pkg/RSiena/inst/doc/RSiena_Manual.pdf 2013-05-10 16:31:08 UTC (rev 230)
+++ pkg/RSiena/inst/doc/RSiena_Manual.pdf 2013-06-15 21:01:05 UTC (rev 231)
@@ -42,32 +42,34 @@
ÿ!1Ë9ìç§P|àhº`ÚnÜÃóè¹®q¢Úñþõ»¯9ÈbNKÕf=´½÷Õî GMf8ÍÜg¡É Ü7%ÆÿØÙ'YýJM ÔXXìá
¶ÁÐô5ÏÍ¡Èó õZÐ<ºØAD%½·sï|àóÇ3´ºÇþÍ`þü³ªæu²áþÁ·þ·
endstream
endobj
-491 0 obj <<
-/Length 1158
+495 0 obj <<
+/Length 1160
/Filter /FlateDecode
>>
stream
-xÚVKsÛ6¾ëWðÎ $ØÄIÓ»©¥ Pó¡ýûî "ÊêdÜéhFÄcñíëÛX´XôqÆ~ð}»½ùÀHHZ¨GH°2É£<gTFuô
Üê&9Ùë*NR&ÈCÛÅ.~
êô$ç9ÍaùS÷skí%¸¤©Ì
-&yIsQD FSÎø~Ø<è¹¥ø-ȽÝUæ Q¢hÁªE¬ik/{MßRzÞØ¿Ö¦ëÝ9I?;ö9q½¯,Øæ|îÌÊêuûÝRNË,órH©ÀTEó,ó4ö Q@ppðHíÿþö
-"´þ)Nd÷f§»¡6
-§z°1'}pØãÄ®úýÖÝþ+㹩ÖþÄ»¶ªÌÆ8§¸(©%¸_9:1³+" ñ½ÈýÍbÆa þF¼ÈhÎ%ä¼Ì£U=û{ºMÿïFé°ðæCÍ£÷íìwøc¢É@;ÒÃJZæ"w+
-É$©ãzt½ìN¯Æ8HxB,@W«0ÿtswíÓªNSH)ã#M¿² =å%@ 7·õ¾tµ
-VæäSódúÁnKÔE,éüþM½³]¹éqLyF /öè7®]zÛ¿´S¡¥8±û ëÔi?]µõn? v×µ/¡Í9|ö(NcŨ[=øÑJw5ª
-ÒîqßøA$O½+°n×£ÛxäÁ¯×mJÉ8gÐg6`§¨æÉE¢Ú8¡*@¸G@QVÎ\Lo0*D²{
-"Ë^ æl³ñÓ¡
-_Ô'2IÖF×v5
-m´àu(YûõÑSù9XäÈGY m-üKuèÅÚýÇYôÅ©:í@Gº½Ì±íD0ÆÏ°ÈÕë
-Ë(;BZ½¬`ÎËd@1çz1H¥"'º¢ç±Àíÿâ²BºY¿Ö´ä1g®7;ûÍæL_².¬àd±µ!f6ájí8ê/_ظܫRÎ(uîÞIKQ´àÇö¼
º [ß7R¸êÛ$©ºÂªLKö ìÁO®^@¨Ìúq
-î Ué¿veÚëx¿ºæ à
ïêj}åvv¹wå;íüx3`Â&X5»}@a0íg¸pèS_°"PТ: ÅýKÛs*Ócìñ"%¤õÉÔ'° ¹oß,uï¡¿@Ò`#,ÝUÖ·t9e Ì/3 at pASõã §.Ó+`¹
v׶éÃýå àLò¸è+KÉsgÁ4ßn® N]ùräHÝjwUÂê/{Û$ɹEÖd«MxÎýå Ï3ë@G»éÂÉÐ%Î×»m¼ÐhfÂãÌlªPÓF1
z+Yéß½xÑB½'2ÏÙiÇ·Ö?ÐÂ
+xÚVÛrÛ6}×Wð1ÜHí8i2c7µÔ§¤K¨yQIÊ®þ¾» ¤²:w:qY]]%ë%'ìß·óɼH¢
.x2HË)S<ÉsFU2_%_Éi¦"';SMSÉyh»éóÏ°R®ä<§9±°ê~ælc¡b WTª\ a4E`TrÍwÃàa[ßÜ»me÷¤f¸@ÀYͧZ¶¶×ô-
+«gûse»Þ¯STó³e_¦`nvn~ÁÎ.YµßrZfY`Ê¡£ªæY ~oÜ¢À.nÀÆ> µáûëß¡ÕOÓTɼ·[Ó
+µmÐp85,Èl0rÒOSs¸eÿsºÛ}c<·Õ*¬x×V][ï
+©À*Nw
+¦<»
+q^úÍ|¡&¼ÈhÎ@ %v'Ëzò×DúÉðïÖqàÍ'ïÛÉoð;Ç>¦äôÚË
+´UÒ2¹W[RÐ(#E½:ÐëE?tf9\$ â å¹(À>\S®#ÂìÓÍÝu8P}b,á0?ôËØQÊ#P^Rv3Wï*8¨¶¸ª|jl?¸õq¨
+Mº0So]ç>[ {g½FÑ"=ëÆTûÞõ/y
+ Z<¬ [¿ Ýe[owÛn»6
+É"´ Y!Q½¨ä²îæÎÉ°1Ch-M×9 º ín8ÌÛÐèQàipÐíúà6.yãu;
MÉ
+lQÊUÐ4`ǨöÉG¢Úpb>q8t¬¼',º5Þ`$ud÷;,#f¹lsÍ:t6~q?)²Ú7¦vËñÐvi^72ØU?x`«ÐF^|PÐâ¿RI·N^Ý$_ýV§µç(X?yµ½2ñ3,rõzbeç@(«×Ì{Î'JÌ»Ê"#¥TäÄTô<8ýcQ\vÁKÈ4«×úL'æéÚÙÿK3s7\WYÁÉ|ãbÌ\$jã5®]¸\«$gÃvnÝQIÑ´àÇö¼¼-6¡nH¸ä4$ÛèPM
Y)K|Ðv:/6t @Tvu;@ÇBú¯UYÃnÑÈW¼Y}q pd¡Àû¢{µ!s;·ØùôÅÁñ~<N3PÂ:²"ïPhëìûÁÖxC
+ATG¡¸É=§Jc/¥àHq?%Ãñ ¡Ê·"Ó{âÐaÀ®r¡¤«± Y*õºd@WáÁ4òñØ¡u¸qMï$Ç:
+Îè\ }e<wnlóýáèñ
+brì"ôÕñW%þ²s=X"I¦É-ª¶ cãtU.x95ÚmWÆ*q^¸Þm:Ô
AR³̮«ãB1
|+Y^¼xÑB¾§2ÙqÅ·Ö?Õ3Ïò
endstream
endobj
-481 0 obj <<
+485 0 obj <<
/Type /XObject
/Subtype /Form
/BBox [0 0 84 59.04]
/FormType 1
/Matrix [1 0 0 1 0 0]
-/Resources 502 0 R
+/Resources 506 0 R
/Length 34
/Filter /FlateDecode
>>
@@ -75,7 +77,7 @@
xÚ+ä²0Q0 BSK=+9Kß3×PÁ%+ hÆ
endstream
endobj
-480 0 obj <<
+484 0 obj <<
/Type /XObject
/Subtype /Image
/Width 350
@@ -187,7 +189,7 @@
klÇ,TÄñéïöw¬u?ÜèéÒÃ$V¾gedc#ýsÏqELè¯N)FËìkñöñýÄrF|¤ùWýcm1çzyÅvZÝ´X®`iPIGä½*¤là}VU7Fî`i¾ñ^u}®A«X%õÖöiCîÁ,3ù*í£I.PÜ^E[`Ês³»oÖ*»ÔâÄI·qñ¨@¢ghÔgcÅçýìdþ5*Ìåc0)9#~pqôQV`N$UB6½qÛZS~(wF¢dûhôoÒíýÖý(¢}´z7ä(ûhôoÈQE 'ÛÇ£þuêI[¶¹ö¢C3ï5HX"û!Ï®<}«4ÛyÁÄÜ8'îqÀíùQEsÔoî¥N=Íã-ý"m*iå%ie{¢ÄáGÞ8ëÛëX?¼Wq{cc XãÍãa^I8áOOJ(¬èÉËçM*qU£dqÖÄÒͪê3©cgå³][-²0ùæ<üñSiz§¨É#¶.»9;Xgv aÎ3}I'©4Q]5"¹Né¥ïoí®´é}2Jó¡d1ðëVà$§å⡳Ôtý:Ú(Öå¯×yâ;£Ë={òxêh¢¢ÊÖ#x»5(gÕÑä®ùÃKµåsÐç?tÃãSH¼©DQÉ×÷iF9ùØ»ºzE,«'1óx¾¶µ¤Ë$!o>uPOUè½°?Ö3OÞÝ´H
UP3
àsù÷¢å¨5c ll®§g Ö Ilc!Kc Øé¥áfW(Ós¾@z{ô¢êVÇö¹ÿÙ
endstream
endobj
-550 0 obj <<
+554 0 obj <<
/Length 1684
/Filter /FlateDecode
>>
@@ -202,84 +204,90 @@
ÉЦÒ#"ôÁ·®»uIMÒÂ÷wÊNÄ+ϧ¹&ë?hÚòÄD§Å:ãZwÄk9}®cº¬4ÕzÐi®¡Öo`J;==Ï-Krbd;º±"Àß0:/×X5%ûJ¦ÕJE¶bP÷¤Ê Í¿w£tÕ¸Àç®lÀ$¶âk¹4ªÇÒî
´ZAëQ]I
sy^UAàÜÑð)ÎÓ¶}ýU£ÅÉÔ`;-LÌ"\õ¦_$<Ñ6
-m¯OÄ@éãUS×Öy½Âÿ%åL¬
½tMux´Ù¯|@h:&TéHñ´Ó°lM=ibÃ_Ë8Ëp ,ù7½v3>áß/ÒÓü§è7Å÷I¹.¢ÅZMû\\ÖÎ}
á¦|ó¶È]©vù(7÷þ.iª²C½Smvúz®tû@SyklnÚbäQgä§GCeZ>,£ýTU'ö"cüDÐx6PðN5`£á|Oø5EuzÝ{µ·Á7y3¹ú ZÜç
+m¯OÄ@éãUS×Öy½Âÿ%åL¬
½tMux´Ù¯|@h:&TéHñ´Ó°lM=ibÃ_Ë8Ëp ,ù7½v3>áß/ÒÓü§è7Å÷I¹.¢ÅZMû\\ÖÎ}
á¦|ó¶È]©vù(7÷þ.iª²C½Smvúz®tû@SyklnÚbäQgä§GCeZ>,£ýTU'ö"cüDÐx6PðÎ 3ò=áÔÕpêuïÕÞßüåÍäê_ ¥Üè
endstream
endobj
-596 0 obj <<
+600 0 obj <<
/Length 1887
/Filter /FlateDecode
>>
stream
-xÚí[Mw8Ý÷WxÏ(IHÝ¥¤'siOã3³èÌ3åøMþýècÀÆQZÇé&Ø°rßÕÓ}÷ÉþìjæÏ^?óÍÑ#Î|Ï'üO¢YÍÏϽýìåâÙó3fÔ£8À³Å§¡Ï¯|èIg4wijî²Iè4+ù%Ù_>IÜfU9ÿ{ñ[7Ù7ô
-ÕùoÕó3Ò
pæàQô<0wίL|yÉ/wÃ0tªOâvÉÔ; rÜÑ4r¼¹|ßÂRjïapüï Ôæ´GÁ8&2* Bçr%!ߦF&)ÂIôCìPÌÇ ty~úûÉÖÀ¶}ùúêïäÃÅx2:h¿èð» 0O ãsóÙQð°$q®fK3±Á (ÆÇ
/Þßiú:%
-˪nãrÎ_´ú
-ÿÜië9pÖI»®
-ò"
,iuÕ§ªVçK~!·g|Ë'~V¥7e\dIóBüÛ³QçìªdnøÔM%3OÄ!&ð®ÙðÐ3Þ=ÙYeGxìÐÃéÝäH¦D)°Ç2Í<R|3S"ß*S fÊi?ôÐ>FG}jb®.FÍý$[ª_³v©.N*qï9ÂN\+F&QðãàûÁéDÈWuÕ4®-L¶ãm8¤,Ľë¼ÍV9ÅÇèGâXÂOÒHºJ9,cIªÌ@ȾHPòõ :~uÁûÀ_^¤p±©d$ÄAèÌÝì "§¬J7Íj&3ïÿ£¢#ÁY"<Ñx¤©,,ã¼+^8Ò-«ãdSÑlRÈãhVÂ99¶YA®<¿ê\¹B2Y|0rá¡a)ÞÓ1»ïNp~T EÃ%1·nòzºÔàC.ö"»rê±È
--Ã[]±e7]ÎP.ÓÈl-îWqⶱÂÆá£UÃÄ{Ï¿Cü&+x.¯ÚÖãb,¾Î +´J[·)»ªGYvPKò ôk%/´È(Y³%CG8CßÔ¼ÔX_gy×îM·YÓNäJñc5öDz`»ÆÉ8ú RècårÈ Ó
-Ð ±: ¸îxÅÛÑǾ0mÆ¢Ö
u
-Ûx ê¬Ø&ceìG·X·!ôý®ÎíÙ)Â`Ó¹Å=gý\´:9ôÇ@'Î×ãúcðÜÉSb§Æ=ïüU%µ¬nYÍ×ûD{¯,|5ÁÂGHë{âZT[¸³Ö/+£¶²B½ÚFTÆ_-²Wa[P:§¹,â¯}ºËθWnå0ä¡°ËÉWË9ÿðØK7vd¤Á̾M¥ ÂpãkäWUÍUA1*¶Bðtìá;ÿSõÁqß®ÛÕzDMàûèg,öCÓ£`°[Üw.-r]Ë//8ÄÇÜ° ±5CºeýØÔã
-uÕ òJ.qvENƵ~ÇêºWðÓ§dØ8ϳÅu&û-7ÉNSûp/ÙLæxjU V×Ŷ)7ÙgMòl¹©î#'0úe¬,+q©Ð1MpGe*¢y¥¾%jö×Ûvi2C-A*bÑMQ.jUëvË¥
-Å´¨ÖvÈ$D&°¹äáþ×ï±ô(¹.íÏnã"&ä ó+¶HØ-TgÙµ6Co3É(8î
-;4°µYËNÖm%·É)¸
zÝ9ÑÆÝáOL
-¦Pcúý»Îj¦W ¥âò.T]fÊ`ú·Õ>û£ZñÃÈ#hÿ(d"åÿ^n%Ù¥(ÃÀøXlï¥:øBlmIúòMH®
GbÜZ'ÐÊ<:§ë]ͬédÉ5®Ð»Þõ»4ÜZUÀÑsg%úÒ±'mNBö»1z65sEJinkÆPl¯£ÃOº©øç§8O]5 õælÍñÈDÃ8:æ/Ü1v5²ñ¡ªfãØÀ±ñÉÓÉw.6éèÓë¸Xåf;Øßd©Ù'ãó~½Ù:}I¯iÙjKmÛn(@ÖQ¢$àûö¶Yq¨ºòK.ùîªï{í 1ø¨wÊ\à®éü÷c[ryúe¾Iñjgê6«Rðª}ÙÚþ+¹Øç/;K:ù¯êêcÎñî«ïe7ÞßÀR"6~×B¬b:¢¬¯Ñv¶Í6Aƺ¤¥L§pþjóè\ÕÕ£¿Ïr 4£ª\ad¼äöÛ6½Ag%¶Ü"Á¨ùw«X<({;]/zÈ@ÖZÌ ¹{h¹}çéâÙYÎYR
[TRUNCATED]
To get the complete diff run:
svnlook diff /svnroot/rsiena -r 231
More information about the Rsiena-commits
mailing list