我正在从事的项目的一部分涉及为每组数据拟合曲线并从那里向前移动。曲线在某些集合上拟合得很好,而在另一些集合上拟合得很差,并且拟合可能以多种不同方式发生。我需要确定不合适的匹配并将其从数据集中删除。
这是一个示例,其中组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.squared
0.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] 删除。
我来说两句