Hello
I want to batch job the calculation of many GLM-models, extract some values and
store them in a file. Almost everything in the script below works (read file,
extract values and write them to file) except I fail in indexing the GLM with
the modelstructure it should run. Running GLM's conventionally is no
problem.
Conventionally a GLM is calculated as:
--------------------------------------
glm(ZlogHRS ~ ZRi+ZE+ZPROX_MN+ZED+ZAlwd+ZT2+ZW+ZN+Sex+y, family = gaussian,
data=t.data)
(just a note: dependent variable is ZlogHRS, while the others are indepent
variables)
Desired way: sequentially run GLM
---------------------------------
I want R to take the model structure to take from a vector called
"modelstructure" and paste it into the GLM like:
glm(modelstructure[i], family = gaussian, data=t.data).
It would considerably ease my workload if there is a solution to the indexing
problem within a GLM. I appreciate any hint.
Best regards
Lukas
p.s.
my R skills are rather poor
----------------------------------------START
R-CODE-----------------------------------
# Read file
t.url <-
"C://HR_calculations/2005_2006/HR_SIZE/Kandidatenmodelle_Berechnung/inputfiles/"
t.tuti <- read.table(paste(t.url, "All_animals.txt",
sep=""),header=T)
collect.results <- function(x) {
#resets vectors which will be filled
i <- 0
AICA <- NA;
#put models names hierarchically in vector
modelnames <- c("1=global", "2=biotic1",
"3=biotic2", "4=abiotic") #keep track of changes in model
names and number
for (i in 1:length(modelnames))
#model structure of the four models given for all models to run
#global
modelstructure <- c(
"ZlogHRS ~ ZRi+ZE+ZPROX_MN+ZED+ZAlwd+ZT2+ZW+ZN+Sex+y",
#biotic1
"ZlogHRS ~ ZRi",
#biotic2
"ZlogHRS ~ ZPROX_MN",
#abiotic
"ZlogHRS ~ ZE")
ts.model <- glm(modelstructure[i], family = gaussian, data=t.data)
# Extracts some mode results
n[i] <- length(resid(ts.model))
AICA[i] <- AIC(ts.model)
}
#Writes results to data file
x = data.frame(
modelnames, n, AICA)
write.table(x, paste(t.url, file="Results.txt"), sep="\t",
quote=F)
----------------------------------------END
R-CODE-----------------------------------
???
Lukas Indermaur, PhD student
eawag / Swiss Federal Institute of Aquatic Science and Technology
ECO - Department of Aquatic Ecology
?berlandstrasse 133
CH-8600 D?bendorf
Switzerland
Phone: +41 (0) 71 220 38 25
Fax : +41 (0) 44 823 53 15
Email: lukas.indermaur at eawag.ch
www.lukasindermaur.ch
as.formula(modelstructure[i]) in the glm function>>> "Indermaur Lukas" <Lukas.Indermaur at eawag.ch> 01/11/07 7:34 PM >>>Hello I want to batch job the calculation of many GLM-models, extract some values and store them in a file. Almost everything in the script below works (read file, extract values and write them to file) except I fail in indexing the GLM with the modelstructure it should run. Running GLM's conventionally is no problem. Conventionally a GLM is calculated as: -------------------------------------- glm(ZlogHRS ~ ZRi+ZE+ZPROX_MN+ZED+ZAlwd+ZT2+ZW+ZN+Sex+y, family = gaussian, data=t.data) (just a note: dependent variable is ZlogHRS, while the others are indepent variables) Desired way: sequentially run GLM --------------------------------- I want R to take the model structure to take from a vector called "modelstructure" and paste it into the GLM like: glm(modelstructure[i], family = gaussian, data=t.data). It would considerably ease my workload if there is a solution to the indexing problem within a GLM. I appreciate any hint. Best regards Lukas p.s. my R skills are rather poor ----------------------------------------START R-CODE----------------------------------- # Read file t.url <- "C://HR_calculations/2005_2006/HR_SIZE/Kandidatenmodelle_Berechnung/inputfiles/" t.tuti <- read.table(paste(t.url, "All_animals.txt", sep=""),header=T) collect.results <- function(x) { #resets vectors which will be filled i <- 0 AICA <- NA; #put models names hierarchically in vector modelnames <- c("1=global", "2=biotic1", "3=biotic2", "4=abiotic") #keep track of changes in model names and number for (i in 1:length(modelnames)) #model structure of the four models given for all models to run #global modelstructure <- c( "ZlogHRS ~ ZRi+ZE+ZPROX_MN+ZED+ZAlwd+ZT2+ZW+ZN+Sex+y", #biotic1 "ZlogHRS ~ ZRi", #biotic2 "ZlogHRS ~ ZPROX_MN", #abiotic "ZlogHRS ~ ZE") ts.model <- glm(modelstructure[i], family = gaussian, data=t.data) # Extracts some mode results n[i] <- length(resid(ts.model)) AICA[i] <- AIC(ts.model) } #Writes results to data file x = data.frame( modelnames, n, AICA) write.table(x, paste(t.url, file="Results.txt"), sep="\t", quote=F) ----------------------------------------END R-CODE----------------------------------- ??? Lukas Indermaur, PhD student eawag / Swiss Federal Institute of Aquatic Science and Technology ECO - Department of Aquatic Ecology ?berlandstrasse 133 CH-8600 D?bendorf Switzerland Phone: +41 (0) 71 220 38 25 Fax : +41 (0) 44 823 53 15 Email: lukas.indermaur at eawag.ch www.lukasindermaur.ch ______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
>From ?glm:formula: a symbolic description of the model to be fit. The details of model specification are given below. which could be clearer. It needs to be a object of type 'formula'. I believe as.formula(modelstructure[i]) will do what you want (but your posting has come out rather awkwardly laid out in double spacing). On Thu, 11 Jan 2007, Indermaur Lukas wrote:> Hello > > I want to batch job the calculation of many GLM-models, extract some values and store them in a file. Almost everything in the script below works (read file, extract values and write them to file) except I fail in indexing the GLM with the modelstructure it should run. Running GLM's conventionally is no problem. > > > > Conventionally a GLM is calculated as: > > -------------------------------------- > > glm(ZlogHRS ~ ZRi+ZE+ZPROX_MN+ZED+ZAlwd+ZT2+ZW+ZN+Sex+y, family = gaussian, data=t.data) > > (just a note: dependent variable is ZlogHRS, while the others are indepent variables) > > > > Desired way: sequentially run GLM > > --------------------------------- > > I want R to take the model structure to take from a vector called "modelstructure" and paste it into the GLM like: > > glm(modelstructure[i], family = gaussian, data=t.data). > > It would considerably ease my workload if there is a solution to the indexing problem within a GLM. I appreciate any hint. > > Best regards > > Lukas > > p.s. > > my R skills are rather poor > > > > ----------------------------------------START R-CODE----------------------------------- > > # Read file > > t.url <- "C://HR_calculations/2005_2006/HR_SIZE/Kandidatenmodelle_Berechnung/inputfiles/" > > t.tuti <- read.table(paste(t.url, "All_animals.txt", sep=""),header=T) > > > > collect.results <- function(x) { > > #resets vectors which will be filled > > i <- 0 > > AICA <- NA; > > > > #put models names hierarchically in vector > > modelnames <- c("1=global", "2=biotic1", "3=biotic2", "4=abiotic") #keep track of changes in model names and number > > for (i in 1:length(modelnames)) > > #model structure of the four models given for all models to run > > #global > > modelstructure <- c( > > "ZlogHRS ~ ZRi+ZE+ZPROX_MN+ZED+ZAlwd+ZT2+ZW+ZN+Sex+y", > > #biotic1 > > "ZlogHRS ~ ZRi", > > #biotic2 > > "ZlogHRS ~ ZPROX_MN", > > #abiotic > > "ZlogHRS ~ ZE") > > > > ts.model <- glm(modelstructure[i], family = gaussian, data=t.data) > > > > # Extracts some mode results > > n[i] <- length(resid(ts.model)) > > AICA[i] <- AIC(ts.model) > > } > > #Writes results to data file > > x = data.frame( > > modelnames, n, AICA) > > write.table(x, paste(t.url, file="Results.txt"), sep="\t", quote=F) > > ----------------------------------------END R-CODE----------------------------------- > > > > > > > > > ??? > Lukas Indermaur, PhD student > eawag / Swiss Federal Institute of Aquatic Science and Technology > ECO - Department of Aquatic Ecology > ?berlandstrasse 133 > CH-8600 D?bendorf > Switzerland > > Phone: +41 (0) 71 220 38 25 > Fax : +41 (0) 44 823 53 15 > Email: lukas.indermaur at eawag.ch > www.lukasindermaur.ch > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595