【问题标题】:Apply Simple Linear Regression to Multiple Data Frames in R将简单线性回归应用于 R 中的多个数据框
【发布时间】:2018-06-06 14:52:10
【问题描述】:

我有一个数据集,我将其拆分为多个数据框,并且需要对每个拆分的数据框应用简单的线性回归。我的代码如下:

library(dplyr)
library(readr)
library(magrittr)
library(lubridate)
library(stats)

c_data <- read_csv("D:/projects/sloper_tool/data_2013_to_2017.csv")

C_data_out <-
c_data %>%
  group_by(SAMP_SITE_NAME, STD_CON_LONG_NAME, FILTERED_FLAG) %>%
  mutate(MED_V = median(STD_VALUE_RPTD)) %>%
  mutate(MIN_V = min(STD_VALUE_RPTD)) %>%
  mutate(MAX_V = max(STD_VALUE_RPTD)) %>%
  ungroup() %>%
  select(SAMP_SITE_NAME, STD_CON_LONG_NAME, SAMP_DATE, STD_VALUE_RPTD, STD_ANAL_UNITS_RPTD, FILTERED_FLAG, LAB_QUALIFIER, MED_V, MIN_V, MAX_V) %>%
  rename(Well = SAMP_SITE_NAME, Constit = STD_CON_LONG_NAME, Date = SAMP_DATE, Value = STD_VALUE_RPTD, Unit = STD_ANAL_UNITS_RPTD, Filtered = FILTERED_FLAG, Flag = LAB_QUALIFIER, Median = MED_V, Min = MIN_V, Max = MAX_V) %>%
  mutate(Date = mdy(Date))

dfs <- split(C_data_out, with(C_data_out, interaction(Well, Constit, Filtered)), drop = TRUE)
dfs[2]

这会从原始输入中分离出如下所示的数据帧:

$`299-E13-14.Gross alpha.N`
# A tibble: 4 x 10
    Well     Constit       Date Value  Unit Filtered  Flag Median   Min   Max
   <chr>       <chr>     <date> <dbl> <chr>    <chr> <chr>  <dbl> <dbl> <dbl>
1 299-E13-14 Gross alpha 2014-04-11  3.40 pCi/L        N  <NA>  2.745  1.86  3.89
2 299-E13-14 Gross alpha 2015-04-08  2.09 pCi/L        N  <NA>  2.745  1.86  3.89
3 299-E13-14 Gross alpha 2016-04-25  3.89 pCi/L        N  <NA>  2.745  1.86  3.89
4 299-E13-14 Gross alpha 2017-04-06  1.86 pCi/L        N  <NA>  2.745  1.86  3.89

接下来,我需要对每个拆分出来的数据框应用一个简单的线性回归模型。我尝试使用以下各种排列均无济于事。

fit <-
dfs %>%
  lm(Value ~ Date)

# Get slope by:

slope <-  fit$coefficients[[2]]
slope

由此产生的输出:

fit <- 
dfs %>%
  lm(Value ~ Date, data = dfs)

Error in formula.default(object, env = baseenv()) : invalid formula

slope = fit$coefficients[[2]]

Error: object 'fit' not found

slope
(Intercept)          Date 
109778.966473     -5.093003

这似乎应用于整个原始数据集,而不是应用于单个拆分的数据帧。我想将各个数据帧的斜率输出到文件中,或者更好地将斜率作为向量附加到 dfs 中的数据帧。

我们将不胜感激任何和所有的帮助!

【问题讨论】:

  • dfs 不是数据框列表吗?您不能在数据框列表上运行回归,并且管道也不适用于列表 afaik。您不想对列表的每个元素(单个数据框)进行回归吗?所以例如lm(Value ~ Date, data = dfs[[1]] ? 然后可以使用 lapply。请举一个最小的例子,也许使用 iris 数据集并将其分解为 speacies。
  • 是的,它是一个列表。感谢您的建议。我会试试这个。

标签: r dataframe regression models


【解决方案1】:

这样的事情可能会奏效。不过我没有你的数据,所以无法测试。

# calculate the fit models per data frame
fits <- lapply( dfs, function(x) {
  lm( formula = Value ~ Date, data = x )
} )

# extract the slope from all models
slopes <- sapply( fits, function(x) x$coefficients )

# print one of the results to see it
slopes[1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 2018-10-03
    • 2018-07-23
    • 1970-01-01
    • 2013-03-15
    • 2016-09-20
    • 1970-01-01
    • 2018-08-13
    相关资源
    最近更新 更多