首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按组划分的R- lm、cooks.distance和异常值

按组划分的R- lm、cooks.distance和异常值
EN

Stack Overflow用户
提问于 2019-09-18 00:43:08
回答 1查看 74关注 0票数 0

out-group的代码工作得很好:

代码语言:javascript
运行
复制
  url <- "https://raw.githubusercontent.com/selva86/datasets/master/ozone.csv"
    ozone <- read.csv(url)
    ozone <- head(ozone,20)
    mod <- lm(ozone_reading ~ ., data=ozone)
    cooksd <- cooks.distance(mod)
  influential <- as.numeric(names(cooksd)[(cooksd > 4*mean(cooksd, na.rm=T))])  # influential row numbers
(ozone[influential, ])  # influential observations.

根据我的新需求,我必须添加一个组,并需要查找每个组的异常值。我的代码示例如下所示。如何按组获取cooks.distance和异常值?请帮帮忙

代码语言:javascript
运行
复制
url <- "https://raw.githubusercontent.com/selva86/datasets/master/ozone.csv"
ozone <- read.csv(url)
ozone <- head(ozone,20)
ozone$season <- c('summer','summer','summer','summer','summer','summer','summer','summer','summer','summer',
                 'winter','winter','winter','winter','winter','winter','winter','winter','winter','winter')

这里我需要计算mod,cooksd和影响分组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-18 01:13:54

简单地概括您的流程并使用by (tapply的面向对象包装器)调用它,它通过一个或多个因子对数据帧进行子集,并将子集传递给一个函数,以返回与不同组的数量相等的数据帧列表:

代码语言:javascript
运行
复制
proc_cooks_outlier <- function(df) { 
  mod <- lm(ozone_reading ~ ., data=transform(df, season=NULL))
  cooksd <- cooks.distance(mod)

  # influential row numbers
  influential <- as.integer(names(cooksd)[(cooksd > 4*mean(cooksd, na.rm=TRUE))])

  return(df[complete.cases(df[influential,]),])
}

outlier_df_list <- by(ozone, ozone$season, FUN=proc_cooks_outlier)

# REFERENCE INDIVIDUAL DFs
outlier_df_list$summer
outlier_df_list$winter
...

# COMBINE ALL INTO ONE DF
master_outlier_df <- do.call(rbind, unname(outlier_df_list))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57978643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档