2014-04-21 4 views
0

У меня есть в общей сложности 46 моделей регрессии, которые я хочу обобщить в таблице данных. Вот фиктивный пример, который я создал, чтобы помочь объяснить мою методологию.Создать таблицу коэффициентов регрессии

#Dummy data 
Data1 <- data.frame(flow = c(8,8.5,6,7.1,9), SP_elev = c(20,11,5,25,50)) 
Data2 <- data.frame(flow = c(7,7.2,6.5,8.2,8.5), SP_elev = c(13,15,18,25,19)) 
Data3 <- data.frame(flow = c(2,3,5,7,9), SP_elev = c(20,25,28,30,35)) 
Data4 <- data.frame(flow = c(1,4,6,8,9), SP_elev = c(13,15,18,25,19)) 
Data5 <- data.frame(flow = c(1,4,6,8,9), SP_elev = c(13,15,18,25,19)) 
Data6 <- data.frame(flow = c(1,4,6,8,9), SP_elev = c(22,23,25,27,29)) 

#Create blank data frame with desired column names 
tmp <- data.frame(matrix(nrow=0, ncol=9)) 
names(tmp) <- c("site_name","int", "coflin", "cofsqd", "fstat", "ldf", "udf", "cod", "pval") 

#Create Vector list 
dataframes = list("Data1" = Data1, 
        "Data2" = Data2, 
        "Data3" = Data3, 
        "Data4" = Data4, 
        "Data5" = Data5, 
        "Data6" = Data6) 

#plot a with regression model 
for (i in dataframes) { 

#Create regression model 
fit2<-lm(SP_elev ~ flow + I(flow^2), data=i) 
pol2 <- function(x) fit2$coefficient[3]*x^2 + fit2$coefficient[2]*x + fit2$coefficient[1] 

#Create variables for each coefficient 
site_name <- i 
int <- signif(summary(fit2)$coefficients[1],4) 
coflin <- signif(summary(fit2)$coefficients[2],4) 
cofsqd <- signif(summary(fit2)$coefficients[3],4) 
fstat <- signif(summary(fit2)$fstatistic,4) 
ldf <- signif(summary(fit2)$fstatistic[2],2) 
udf <- signif(summary(fit2)$fstatistic[3],2) 
cod <- signif(summary(fit2)$adj.r.squared,3) 
pval <- signif(pf(fstat,ldf,udf,lower.tail=FALSE),4 

#add variables to the dataframe 'tmp' 

} 

Моя методология в настоящее время:

  1. входных фиктивные данные
  2. создать пустой кадр
  3. данных создать векторный список фиктивных данных
  4. запустить цикл для выполнения регрессионного анализа на каждом наборе данных.

    a. форматировать соответствующие переменные для добавления к фрейму данных tmp

    b. добавить отформатированные переменные в кадре данных tmp построчно (я строка на манекен набора данных)

Как можно видеть выше, я не знаю, как добавить переменные в кадре tmp данных.

ответ

1

Если изменить цикл, чтобы быть счетчиком вместо реальных объектов кадра данных, это становится довольно просто:

tmp <- data.frame(matrix(nrow=length(dataframes), ncol=9)) 
names(tmp) <- c("site_name","int", "coflin", "cofsqd", "fstat", "ldf", "udf", "cod", "pval") 
for(j in seq_along(dataframes)) { 
    i <- dataframes[[j]] 

    # rest of your code goes here 

    new.row <- c(names(dataframes)[[j]], int, coflin, ..., cod, pval) 
    tmp[j, ] <- new.row 
} 

Обратите внимание, как вы не можете использовать i как идентификатор, как это кадр данных, но вы можете использовать соответствующее имя. Кроме того, мы инициализировали кадр данных результатов как правильный размер в количестве строк.

Остерегайтесь того, что изменение кадров данных происходит медленно, поэтому вы, как правило, не хотите делать это в цикле, если ваш цикл не повторяется столько раз. Если это так, одно простое решение сначала использует матрицу и преобразует ее в кадр данных после того, как вы закончите цикл.

+0

Я валюта, исследующая метод матрицы. – dubbbdan

Смежные вопросы