如何识别和删除不需要的曲线?

纳泽尔

我正在从事的项目的一部分涉及为每组数据拟合曲线并从那里向前移动。曲线在某些集合上拟合得很好,而在另一些集合上拟合得很差,并且拟合可能以多种不同方式发生。我需要确定不合适的匹配并将其从数据集中删除。

这是一个示例,其中组a和b是我要寻找的曲线,但是组c的形状错误,组d的一个点将是主要残差。

df4 <- data.frame(group = c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", 
                            "c", "c", "c", "c", "c", "d", "d", "d", "d", "d"),
                  pop = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5),
                  value  = c(1,2,3,2.5,2,2,3,4,3.5,3,3,2,1,2,2.5,0.5,1.5,6,2,1.5))

ggplot(df4, aes(x = pop, y = value, color = group)) +
  geom_smooth(method='lm', formula = y~poly(x,2), se = FALSE)+
  geom_point()  

我有25,000套这样的四件套。

从统计角度来看,@ astrofunkswag所说的是正确的。您必须定义统计标准才能避免出现曲线。对我们来说幸运的是,使用broom可以复制功能geom_smooth()并将其存储在数据框中的所有必需的统计信息包,以评估模型的好坏是可能的。这里的代码将向您展示如何制作一种统计过滤器。首先数据:

library(ggplot2)
library(broom)
library(dplyr)
#Data
df4 <- data.frame(group = c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", 
                            "c", "c", "c", "c", "c", "d", "d", "d", "d", "d"),
                  pop = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5),
                  value  = c(1,2,3,2.5,2,2,3,4,3.5,3,3,2,1,2,2.5,0.5,1.5,6,2,1.5))
 

现在,我们将按组复制模型geom_smooth(),并将不同的统计信息保存在新的数据框中:

#Fit models by group
df5 <- df4 %>% group_by(group) %>%
  do(fitmod = glance(lm(value ~ poly(pop,2), data = .))) %>% 
  unnest(fitmod) %>% dplyr::select(group,r.squared)

在之前的代码中,我仅选择了r.squared这些,但这些都是拟合模型的所有统计信息:

# A tibble: 4 x 12
  group r.squared adj.r.squared sigma statistic p.value    df logLik   AIC   BIC deviance
  <fct>     <dbl>         <dbl> <dbl>     <dbl>   <dbl> <int>  <dbl> <dbl> <dbl>    <dbl>
1 a         0.942         0.883 0.254     16.1   0.0584     3  2.06   3.89  2.32    0.129
2 b         0.942         0.883 0.254     16.1   0.0584     3  2.06   3.89  2.32    0.129
3 c         0.857         0.714 0.396      6     0.143      3 -0.177  8.35  6.79    0.314
4 d         0.550         0.101 2.03       1.22  0.450      3 -8.34  24.7  23.1     8.23 
# ... with 1 more variable: df.residual <int>

您可以使用任何这些措施定义条件。在我们的例子中,我将使用r.squared因为它可以测量拟合度。这是输出df5

# A tibble: 4 x 2
  group r.squared
  <fct>     <dbl>
1 a         0.942
2 b         0.942
3 c         0.857
4 d         0.550

作为数据分析员,我可以设置性能良好的模型是r.squared0.9以上的模型因此,根据该定义,我可以使用left_join()构建下一个管道filter(),以便仅使模型具有适当的拟合度:

#Pipeline for plots
df4 %>% left_join(df5) %>%
  filter(r.squared>=0.9) %>% 
  ggplot(aes(x = pop, y = value, color = group)) +
  geom_smooth(method='lm', formula = y~poly(x,2), se = FALSE)+
  geom_point()  

输出:

在此处输入图片说明

您可以使用任何统计量度来定义具有良好拟合度的模型,并且可以在函数中设置所有代码以应用于多个数据框。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何删除不需要的空格和换行符

来自分类Dev

如何删除不需要的按钮阴影

来自分类Dev

如何删除不需要的单引号

来自分类Dev

如何删除不需要的图标

来自分类Dev

如何删除不需要的字符?

来自分类Dev

删除不需要的变量

来自分类Dev

如何通过删除不需要的图形和多余空间来自定义扩展报告

来自分类Dev

如何在Windows 7上删除不需要的功能和其他功能?

来自分类Dev

如何从字符串中删除不需要的字符,如空格和换行符

来自分类Dev

如何从页面动态删除所有不需要的CSS和JS

来自分类Dev

正在生成不需要的数据库文件,如何防止和删除?

来自分类Dev

如何从Git仓库中完全删除不需要的分支和提交

来自分类Dev

从HTML页面中删除不需要的脚本和iframe

来自分类Dev

使用功能和for循环删除不需要的文本

来自分类Dev

使用Xmlnclude之后如何删除不需要的属性?

来自分类Dev

如何从XML中删除不需要的标签

来自分类Dev

如何使用本地存储并在不需要时删除

来自分类Dev

如何在Grabcut算法中删除不需要的空格?

来自分类Dev

如何在图像链接之前删除不需要的空间

来自分类Dev

如何删除不需要的提交和合并

来自分类Dev

如何删除不需要的exe文件/程序

来自分类Dev

如何从数据框中删除不需要的行?

来自分类Dev

如何从数组输入中删除不需要的值?

来自分类Dev

如何删除HTML画布中不需要的行?

来自分类Dev

如何从数组中删除不需要的值

来自分类Dev

如何保证成功删除或更新而不需要额外的请求?

来自分类Dev

如何从JSON删除不需要的字符串属性

来自分类Dev

如何使用python从列表中删除不需要的元素

来自分类Dev

如何在python中删除不需要的字符

Related 相关文章

热门标签

归档