Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何去除R中cooks距离的异常值_R - Fatal编程技术网

如何去除R中cooks距离的异常值

如何去除R中cooks距离的异常值,r,R,我正在编写一个通用函数,它接受dataframe和列名,并返回干净的dataframe,而不返回R中的异常值 cooks_dist <- function(dataframe,column){ dataframe <- dataframe %>% select_if(dataframe,is.numeric) mod <- lm(column ~ ., data=dataframe) cooksd <- cooks.distance(mod) i

我正在编写一个通用函数,它接受dataframe和列名,并返回干净的dataframe,而不返回R中的异常值

cooks_dist <- function(dataframe,column){
  dataframe <- dataframe %>%  select_if(dataframe,is.numeric)
  mod <- lm(column ~ ., data=dataframe)
  cooksd <- cooks.distance(mod)

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

  final <- dataframe[-influential,]

  return(final)

}

cooks\u dist错误源于
dplyr::select\u if()
。我相信您需要所有数字列的子集,因此您也可以使用
sapply()
创建子集。注意:由于您的
lm()
行产生了错误,因此我插入了最小模型

所以我想你想要这个:

cooks_dist <- function(dataframe, column){
  dataframe <- dataframe[, sapply(dataframe, is.numeric)]
  mod <- lm(dataframe[, column] ~ 1, data = dataframe)
  cooksd <- cooks.distance(mod)
  influential <- as.numeric(names(cooksd)[(cooksd > 4 * mean(cooksd, na.rm = TRUE))])
  final <- dataframe[-influential, ]
  return(final)
}

df1 <- cooks_dist(df1, 4)

错误源于
dplyr::select_if()
。我相信您需要所有数字列的子集,因此您也可以使用
sapply()
创建子集。注意:由于您的
lm()
行产生了错误,因此我插入了最小模型

所以我想你想要这个:

cooks_dist <- function(dataframe, column){
  dataframe <- dataframe[, sapply(dataframe, is.numeric)]
  mod <- lm(dataframe[, column] ~ 1, data = dataframe)
  cooksd <- cooks.distance(mod)
  influential <- as.numeric(names(cooksd)[(cooksd > 4 * mean(cooksd, na.rm = TRUE))])
  final <- dataframe[-influential, ]
  return(final)
}

df1 <- cooks_dist(df1, 4)

我使用此代码,cooks的阈值为4/n:

orig.mod <- lm(Outcome ~ Exposure, data=origdf)

origdf$cooksd <- cooks.distance(orig.mod)

origdf$cookyn <- ifelse(origdf$cooksd < 4/nrow(orig.dat), "keep","no")

minus.df <-subset(origdf, cookyn=="keep")

newmod.minuscooks <- lm(Outcome ~ Exposure, data=minus.df)

orig.mod我使用了这个代码,厨师的阈值为4/n:

orig.mod <- lm(Outcome ~ Exposure, data=origdf)

origdf$cooksd <- cooks.distance(orig.mod)

origdf$cookyn <- ifelse(origdf$cooksd < 4/nrow(orig.dat), "keep","no")

minus.df <-subset(origdf, cookyn=="keep")

newmod.minuscooks <- lm(Outcome ~ Exposure, data=minus.df)

lm()中的
orig.mod
当我在您的答案中保留所有变量而不是仅保留
1
时,它不会删除任何异常值。为什么会这样?我相信您可能会找到进一步的帮助,例如:在
lm()
中,当我在您的答案中保留所有变量而不是仅保留
1
时,它不会删除任何异常值。为什么会这样?我相信您可能会找到进一步的帮助,例如:删除影响因素会以某种方式“清理”数据的概念是对良好数据处理的曲解。如果这是你现在的老师的建议,你应该寻找一个更知名的教学来源,你可以看看下面链接中的一个例子。它使用R根据cooks距离去除异常值。删除影响因素会以某种方式“清理”数据的概念是对良好数据处理的曲解。如果这是你现在的老师的建议,你应该寻找一个更知名的教学来源,你可以看看下面链接中的一个例子。它使用R根据cooks距离去除异常值。orig.dat==第三行代码中的origdf吗?orig.dat==第三行代码中的origdf吗??