Running examples in 'StatMatch-Ex.R' failed
The error most likely occurred in:

> ### Name: harmonize.x
> ### Title: Harmonizes the marginal (joint) distribution of a set of
> ###   variables observed independently in two sample surveys referred to
> ###   the same target population
> ### Aliases: harmonize.x
> ### Keywords: survey
> 
> ### ** Examples
> 
> 
> data(quine, package="MASS") #loads quine from MASS
> str(quine)
'data.frame':	146 obs. of  5 variables:
 $ Eth : Factor w/ 2 levels "A","N": 1 1 1 1 1 1 1 1 1 1 ...
 $ Sex : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 2 2 2 ...
 $ Age : Factor w/ 4 levels "F0","F1","F2",..: 1 1 1 1 1 1 1 1 2 2 ...
 $ Lrn : Factor w/ 2 levels "AL","SL": 2 2 2 1 1 1 1 1 2 2 ...
 $ Days: int  2 11 14 5 5 13 20 22 6 6 ...
> 
> # split quine in two subsets
> set.seed(7654)
> lab.A <- sample(nrow(quine), 70, replace=TRUE)
> quine.A <- quine[lab.A, c("Eth","Sex","Age","Lrn")]
> quine.B <- quine[-lab.A, c("Eth","Sex","Age","Days")]
> 
> # create svydesign objects
> require(survey)
> quine.A$f <- 70/nrow(quine) # sampling fraction
> quine.B$f <- (nrow(quine)-70)/nrow(quine)
> svy.qA <- svydesign(~1, fpc=~f, data=quine.A)
> svy.qB <- svydesign(~1, fpc=~f, data=quine.B)
> 
> #------------------------------------------------------
> # example (1)
> # Harmonizazion of the distr. of Sex vs. Age
> # usign poststratification
> 
> # (1.a) known population totals
> # the population toatal are computed on the full data frame
> tot.sex.age <- xtabs(~Sex+Age, data=quine)
> tot.sex.age
   Age
Sex F0 F1 F2 F3
  F 10 32 19 19
  M 17 14 21 14
> 
> out.hz <- harmonize.x(svy.A=svy.qA, svy.B=svy.qB, form.x=~Sex+Age,
+           x.tot=tot.sex.age, cal.method="poststratify")
> 
> tot.A <- xtabs(out.hz$weights.A~Sex+Age, data=quine.A)
> tot.B <- xtabs(out.hz$weights.B~Sex+Age, data=quine.B)
> 
> tot.sex.age-tot.A
   Age
Sex           F0           F1           F2           F3
  F 0.000000e+00 0.000000e+00 0.000000e+00 3.552714e-15
  M 0.000000e+00 1.776357e-15 0.000000e+00 1.776357e-15
> tot.sex.age-tot.B
   Age
Sex           F0           F1           F2           F3
  F 1.776357e-15 7.105427e-15 3.552714e-15 0.000000e+00
  M 0.000000e+00 1.776357e-15 0.000000e+00 1.776357e-15
> 
> # (1.b) unknown population totals (x.tot=NULL)
> # the population total is estimated by combining totals from the
>  # two surveys
> 
> out.hz <- harmonize.x(svy.A=svy.qA, svy.B=svy.qB, form.x=~Sex+Age,
+           x.tot=NULL, cal.method="poststratify")
> 
> tot.A <- xtabs(out.hz$weights.A~Sex+Age, data=quine.A)
> tot.B <- xtabs(out.hz$weights.B~Sex+Age, data=quine.B)
> 
> tot.A
   Age
Sex       F0       F1       F2       F3
  F 10.28186 34.20440 21.01076 20.40665
  M 18.23188 14.74015 25.91609 15.18719
> tot.A-tot.B
   Age
Sex            F0            F1            F2            F3
  F  0.000000e+00  7.105427e-15  3.552714e-15  0.000000e+00
  M  3.552714e-15 -1.776357e-15  3.552714e-15  1.776357e-15
> 
> #-----------------------------------------------------
> # example (2)
> # Harmonizazion wrt the maginal distribution
> # of 'Eth', 'Sex' and 'Age'
> # using linear calibration
> 
> # (2.a) vector of population total known
> # estimated from the full data set
> # note the formula! only marginal distribution of the
> # variables are considered
> tot.m <- colSums(model.matrix(~Eth+Sex+Age-1, data=quine))
> tot.m
 EthA  EthN  SexM AgeF1 AgeF2 AgeF3 
   69    77    66    46    40    33 
> 
> out.hz <- harmonize.x(svy.A=svy.qA, svy.B=svy.qB, x.tot=tot.m,
+             form.x=~Eth+Sex+Age-1, cal.method="linear")
> 
> summary(out.hz$weights.A) #check for negative weights
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.568   1.702   1.783   2.086   2.582   2.756 
> summary(out.hz$weights.B) #check for negative weights
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.382   1.496   1.534   1.640   1.666   2.362 
> 
> tot.m
 EthA  EthN  SexM AgeF1 AgeF2 AgeF3 
   69    77    66    46    40    33 
> svytable(formula=~Eth, design=out.hz$cal.A)
Eth
 A  N 
69 77 
> svytable(formula=~Eth, design=out.hz$cal.B)
Eth
 A  N 
69 77 
> 
> svytable(formula=~Sex, design=out.hz$cal.A)
Sex
 F  M 
80 66 
> svytable(formula=~Sex, design=out.hz$cal.B)
Sex
 F  M 
80 66 
> 
> # Note: margins are equal but joint distributions are not!
> svytable(formula=~Sex+Age, design=out.hz$cal.A)
   Age
Sex        F0        F1        F2        F3
  F  4.705437 40.527446 17.099963 17.667154
  M 22.294563  5.472554 22.900037 15.332846
> svytable(formula=~Sex+Age, design=out.hz$cal.B)
   Age
Sex       F0       F1       F2       F3
  F 15.59309 27.73043 17.54011 19.13637
  M 11.40691 18.26957 22.45989 13.86363
> 
> # (2.b) vector of population total unknown
> out.hz <- harmonize.x(svy.A=svy.qA, svy.B=svy.qB, x.tot=NULL,
+             form.x=~Eth+Sex+Age-1, cal.method="linear")
> svytable(formula=~Eth, design=out.hz$cal.A)
Eth
       A        N 
74.23237 85.74661 
> svytable(formula=~Eth, design=out.hz$cal.B)
Eth
       A        N 
74.23237 85.74661 
> 
> svytable(formula=~Sex, design=out.hz$cal.A)
Sex
       F        M 
85.90367 74.07531 
> svytable(formula=~Sex, design=out.hz$cal.B)
Sex
       F        M 
85.90367 74.07531 
> 
> #-----------------------------------------------------
> # example (3)
> # Harmonizazion wrt the joint distribution of 'Sex' vs. 'Age'
> # and the marginal distribution of 'Eth'
> # using raking
> 
> # vector of population total known
> # estimated from the full data set
> # note the formula!
> tot.m <- colSums(model.matrix(~Eth+(Sex:Age-1)-1, data=quine))
> tot.m
      EthA       EthN SexF:AgeF0 SexM:AgeF0 SexF:AgeF1 SexM:AgeF1 SexF:AgeF2 
        69         77         10         17         32         14         19 
SexM:AgeF2 SexF:AgeF3 SexM:AgeF3 
        21         19         14 
> 
> out.hz <- harmonize.x(svy.A=svy.qA, svy.B=svy.qB, x.tot=tot.m,
+             form.x=~Eth+(Sex:Age)-1, cal.method="raking")
> 
> summary(out.hz$weights.A) #check for negative weights
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.213   1.614   1.901   2.086   2.282   7.007 
> summary(out.hz$weights.B) #check for negative weights
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.121   1.475   1.539   1.640   1.716   3.638 
> 
> tot.m
      EthA       EthN SexF:AgeF0 SexM:AgeF0 SexF:AgeF1 SexM:AgeF1 SexF:AgeF2 
        69         77         10         17         32         14         19 
SexM:AgeF2 SexF:AgeF3 SexM:AgeF3 
        21         19         14 
> svytable(formula=~Eth, design=out.hz$cal.A)
Eth
 A  N 
69 77 
> svytable(formula=~Eth, design=out.hz$cal.B)
Eth
 A  N 
69 77 
> 
> svytable(formula=~Sex+Age, design=out.hz$cal.A)
   Age
Sex F0 F1 F2 F3
  F 10 32 19 19
  M 17 14 21 14
> svytable(formula=~Sex+Age, design=out.hz$cal.B)
   Age
Sex F0 F1 F2 F3
  F 10 32 19 19
  M 17 14 21 14
> 
> #-----------------------------------------------------
> # example (4)
> # Harmonizazion wrt the joint distribution
> # of ('Sex' x 'Age' x 'Eth')
> 
> # vector of population total known
> # estimated from the full data set
> # note the formula!
> tot.m <- colSums(model.matrix(~Eth:Sex:Age-1, data=quine))
> tot.m
EthA:SexF:AgeF0 EthN:SexF:AgeF0 EthA:SexM:AgeF0 EthN:SexM:AgeF0 EthA:SexF:AgeF1 
              5               5               8               9              15 
EthN:SexF:AgeF1 EthA:SexM:AgeF1 EthN:SexM:AgeF1 EthA:SexF:AgeF2 EthN:SexF:AgeF2 
             17               5               9               9              10 
EthA:SexM:AgeF2 EthN:SexM:AgeF2 EthA:SexF:AgeF3 EthN:SexF:AgeF3 EthA:SexM:AgeF3 
             11              10               9              10               7 
EthN:SexM:AgeF3 
              7 
> 
> out.hz <- harmonize.x(svy.A=svy.qA, svy.B=svy.qB, x.tot=tot.m,
+             form.x=~Eth:Sex:Age-1, cal.method="linear")
Error in solve.default(Tmat, population - sample.total) : 
  Lapack routine dgesv: system is exactly singular: U[1,1] = 0
Calls: harmonize.x ... regcalibrate.survey.design2 -> solve -> solve -> solve.default
Execution halted