【问题标题】:Summarise and lm model error总结和lm模型错误
【发布时间】:2016-08-10 14:55:51
【问题描述】:

在尝试创建统计表时,我遇到了 summary.lm r.squared 值的问题。

首先,我从 csv 读取数据

df <- as.data.frame(read.csv("BCO.csv", header = TRUE, stringsAsFactors = FALSE))
df <- df[,2:4]

然后我开始关注趋势...

CLDD_trend <- ddply(df, .(STATION_NAME), function(z)coef(lm(CLDD_yr ~ year, data = z)))

这是我遇到问题的地方......

CLDD_rsq <- ddply(df, .(STATION_NAME), summarise, rsq = summary(lm(CLDD_yr ~ year))$r.squared)

我收到这个错误...

Error: invalid term in model formula

这是df的头

> head(df)
                    STATION_NAME year CLDD_yr
1 ALBUQUERQUE FOOTHILLS NE NM US 1992    3341
2 ALBUQUERQUE FOOTHILLS NE NM US 1993    4443
3 ALBUQUERQUE FOOTHILLS NE NM US 1994    5319
4 ALBUQUERQUE FOOTHILLS NE NM US 1995    5070
5 ALBUQUERQUE FOOTHILLS NE NM US 1996    5338
6 ALBUQUERQUE FOOTHILLS NE NM US 1997    5105

和CLDD_trend的负责人

> head(CLDD_trend)
                             STATION_NAME (Intercept)      year
1          ALBUQUERQUE FOOTHILLS NE NM US -185183.485 95.159091
2 ALBUQUERQUE INTERNATIONAL AIRPORT NM US -138428.871 73.121774
3                   ALBUQUERQUE VLY NM US -138218.809 72.243478
4           PETROGLYPH NATIONAL MON NM US  -95959.130 51.074086
5                       SANDIA PARK NM US    7758.845 -3.439124

我的目标是向 CLDD_trend 添加一个新列,其中包含汇总函数的 r.squared 部分的结果。

stat <- cbind(CLDD_trend[,1&3], CLDD_rsq$rsq)

您能看到我的模型中的错误在哪里吗?我被难住了。

【问题讨论】:

  • 我认为这是因为您没有向 lm 提供数据。如果您愿意,您可以从同一个 ddply 运行中同时获得 coef 和 rsq。还 read.csv 返回一个 data.frame 所以你不需要运行 as.data.frame
  • 数据提供给 lm 的方式与前一行相同。也许我对你的意思感到困惑。不管怎样,你能提供一个如何组合 ddply 运行的例子吗?

标签: r dplyr plyr lm


【解决方案1】:

原来我与 dplyr 和 plyr 发生了某种冲突。

我解决了这个问题

detach()
library(plyr)
df <- as.data.frame(read.csv("BCO.csv", header = TRUE, stringsAsFactors = FALSE))
df <- df[,2:4]
CLDD_trend <- ddply(df, .(STATION_NAME), function(z)coef(lm(CLDD_yr ~ year, data = z)))
CLDD_rsq <- ddply(df, .(STATION_NAME), summarise, rsq = summary(lm(CLDD_yr ~ year))$r.squared)
stat <- cbind(CLDD_trend[,1&3], CLDD_rsq$rsq)

【讨论】:

    【解决方案2】:

    这是一次运行提取两个统计信息的方法

    CLDD_trend <- ddply(df, .(STATION_NAME), function(z){
      mod <- lm(CLDD_yr ~ year, data = z)
      c(coef(mod), rsq = summary(mod)$r.squared
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      相关资源
      最近更新 更多