Description: This package fits micro-macro multilevel models, wherein individual-level (micro) explanatory variables are used to predict a group-level (macro) outcome variable in an unbiased way.
Test Run:
library("MicroMacroMultilevel") help("adjusted.predictors") help("micromacro.lm") help("micromacro.summary") # the name is not unique; but it is unique in this package specifically.
set.seed(123)
group.id = seq(1, 40) z.var1 = rnorm(40, mean=0, sd=1) z.var2 = rnorm(40, mean=100, sd=2) z.data = data.frame(group.id, z.var1, z.var2)
x.var1.means = rnorm(40, mean=50, sd = .05) x.var2.means = rnorm(40, mean=20, sd = .05) x.var3.means = rnorm(40, mean=-10, sd = .05) x.data.means = data.frame(group.id, x.var1.means, x.var2.means, x.var3.means)
x.data.equal = data.frame( group.id=rep(1:40, each=5) ) x.data.equal = merge( x.data.equal, x.data.means, by="group.id" ) x.data.equal = within( x.data.equal, { x.var1 = x.var1.means + rnorm(200, mean=0, sd = 2) x.var2 = x.var2.means + rnorm(200, mean=0, sd = 6) x.var3 = x.var3.means + rnorm(200, mean=0, sd = 1.5) })
x.data.unequal = data.frame( group.id=rep(1:40, times=sample( c(4,5,6), 40, replace=T) )[1:200] ) x.data.unequal = merge( x.data.unequal, data.frame( group.id, x.var1.means, x.var2.means, x.var3.means ), by="group.id" ) x.data.unequal = within( x.data.unequal, { x.var1 = x.var1.means + rnorm(200, mean=0, sd = 2) x.var2 = x.var2.means + rnorm(200, mean=0, sd = 6) x.var3 = x.var3.means + rnorm(200, mean=0, sd = 1.5) })
y = rnorm(40, mean=6, sd=5)
apply(x.data.equal,2,mean)
apply(x.data.unequal,2,mean)
apply(z.data,2,mean)
mean(y)
z.gid = seq(1:40) x.gid = x.data.unequal$group.id
x.data = x.data.unequal[,c("x.var1","x.var2","x.var3")] results = adjusted.predictors(x.data, z.data, x.gid, z.gid)
results$unequal.groups
names(results$adjusted.group.means)
head(results$adjusted.group.means)
model.formula = as.formula(y ~ BLUP.x.var1 + BLUP.x.var2 + BLUP.x.var3 + z.var1 + z.var2) model.output = micromacro.lm(model.formula, results$adjusted.group.means, y, results$unequal.groups) micromacro.summary(model.output)
model.output$statistics
model.output$rsquared
model.output$rsquared.adjusted
z.gid = seq(1:40) x.gid = x.data.equal$group.id x.data = x.data.equal[,c("x.var1","x.var2","x.var3")] results = adjusted.predictors(x.data, z.data, x.gid, z.gid) results$unequal.groups
names(results$adjusted.group.means)
results$adjusted.group.means[1:5, ]
model.output2 = micromacro.lm(model.formula, results$adjusted.group.means, y, results$unequal.groups) micromacro.summary(model.output2)
model.output2$statistics
model.output2$rsquared
model.output2$rsquared.adjusted
model.formula3 = as.formula(y ~ BLUP.x.var1 * BLUP.x.var2 + BLUP.x.var3 + z.var1 + z.var2) model.output3 = micromacro.lm(model.formula3, results$adjusted.group.means, y, results$unequal.groups) micromacro.summary(model.output3)
model.output3$statistics
model.output3$rsquared
model.output3$rsquared.adjusted
model.formula4 = as.formula(y ~ BLUP.x.var1 + BLUP.x.var2 + BLUP.x.var3 * z.var1 + z.var2) model.output4 = micromacro.lm(model.formula4, results$adjusted.group.means, y, results$unequal.groups) micromacro.summary(model.output4)
model.output4$statistics
model.output4$rsquared
model.output4$rsquared.adjusted
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.