Print

Print


Can you include the exact errors that you get, and maybe a sample version of your data?

-----Original Message-----
From: UF R Users List [mailto:[log in to unmask]] On Behalf Of Haro Carrion, Xavier
Sent: Wednesday, May 16, 2018 02:39 PM
To: [log in to unmask]
Subject: Help with code: lm in a loop

Hello all,

I usually attend the Wednesdays meetings of this group, so in its absence, I will try this listserv. Sorry to populate your emails.

I have the following code that runs, in a for loop, a series of linear regressions of NDVI by time (29 years). I run a total of 48 regressions (each month * 4 locations). Inside the loop, I save some information I need from each regression (i.e. slope, R2, p-value). Then I save that information in a data frame outside the loop. So far, so good. This works quite well.

I am trying now to get the fitted values of each point, that is 1392 values (48 regressions, each based on 29 years of data). Here is the code:



NOTE: sub is a list of size 48, Reg_summaries a dataframe defined outside the loop



for(s in sub){

  # Print which row is being calculated

  print(s)

  # Subset using indexing vector

  tmp <- tmp_dt %>%

    filter(Triad.Regions == s)

  # Run linear model on tmp (this exists only inside the loop)

  m <- lm(meanNDVI ~ Year, data = tmp)

  # Create dataframe for single loop iteration and saves in the dataframe the data

  d <- data.frame(Triad.Regions = s,

                  Intercept = as.numeric(coef(m)[1]),

                  Slope = as.numeric(coef(m)[2]),

                  R2= as.numeric(summary(m)$r.squared),

                  p= as.numeric(summary(m)$coefficient[8]))

  e <- fitted(m)

  # Bind temporal dataframe to stored dataframe outside the loop

  Reg_summaries <- rbind(Reg_summaries, d)

  # Data frame to store fitted values

  test <- rbind(e)

}



I tried to incorporate inside the loop something similar to what I have to get information from the regressions to retrieve the 1392 fitted values. I created "vector e" inside the loop, and various variations of it, nothing seems to work. I created a dataframe of 1392 values outside the loop and called it inside, got an error complaining about column sizes, created a list inside and outside, nothing. With "e" as it is, I get 29 values that get stored in "test", which makes me thing I am getting the 29 fitted values of the first regression, but I don't know how to retrieve them all. Maybe I have to do a loop inside the already existing loop, no clue. Any help will be appreciated.



Xavier



Xavier Haro-Carrión
Ph.D. student
School of Natural Resources and Environment & Department of Geography Land Use & Environmental Change Institute (LUECI) University of Florida Biodiversity Institute (UFBI) University of Florida TUR 3141, Gainesville FL 32611
Email: [log in to unmask]<mailto:[log in to unmask]>; [log in to unmask]<mailto:[log in to unmask]>


This list strives to be beginner friendly.  However, we still ask that you PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

This list strives to be beginner friendly.  However, we still ask that you
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.