Lau*_*old 0 r dataset extrapolation
我有一个数据点非常有限的数据集。
x<- c(4, 8, 13, 24)
y<- c(40, 37, 28, 20)
df<- data.frame(x,y)
Run Code Online (Sandbox Code Playgroud)
现在我想推断这些数据,创建一个数据集,其中 y 的值将为 1-100 之间的 x 的每个值(无小数)给出。x 和 y 具有线性关系。
其次,可以通过使用循环之类的东西来对多个数据帧完成此操作吗?谢谢你!
这是执行此操作的一个简短片段:
linear_xy <- lm(y ~ x, data = df)
# df <- broom:::augment.lm(linear_xy, newdata = complete(df, x = 1:100)) # one way
df <- df %>% # another way
complete(x = 1:100) %>%
mutate(.fitted = predict(linear_xy, newdata = .))
ggplot(df, aes(x, y)) +
geom_line(aes(y = .fitted)) +
geom_point() +
ggpubr::theme_pubr()
Run Code Online (Sandbox Code Playgroud)
这要求您安装了软件包{tidyverse}、{broom}和{ggpubr}。
假设我们想用多个数据帧来做到这一点,我们必须稍微重组一下。
x <- c(4, 8, 13, 24)
y <- c(40, 37, 28, 20)
df <- tibble(x, y)
Run Code Online (Sandbox Code Playgroud)
我没有多个数据帧(或小标题),所以我将把它作为主要数据帧,并组成一个生成数据帧的函数(工厂),这与上面的有点不同df。
df_factory <- . %>%
mutate(x_new = x + sample.int(100, size = n()),
x = if_else(x_new >= 100, x, x_new),
y_new = y + rnorm(n(), mean = median(y), sd = sd(y)),
y = y_new,
y_new = NULL,
x_new = NULL)
Run Code Online (Sandbox Code Playgroud)
因此df_factory是一个单变量函数,并且必须是一个具有xand 的数据框y;
df1 <- df_factory(df)
df2 <- df_factory(df)
df3 <- df_factory(df)
all_dfs <- list(df1, df2, df3)
all_dfs <- bind_rows(all_dfs, .id = "df_id")
Run Code Online (Sandbox Code Playgroud)
all_dfs在这里,我们确保通过新变量将与原始数据帧的关系保留在数据帧中df_id。
接下来我们想要:
data。rowwise)我们必须执行:
linear_xy(也存储在列表列中)。ggplot将其全部解开,以便可以将其作为一个连续的数据帧输入。all_dfs %>%
nest(data = c(x,y)) %>%
rowwise() %>%
mutate(linear_xy = list(lm(y ~ x, data = data)),
augment = list(broom:::augment.lm(linear_xy,
newdata = complete(data, x = 1:100)))) %>%
ungroup() %>%
select(-data, -linear_xy) %>%
unnest(augment) ->
all_dfs_predictions
Run Code Online (Sandbox Code Playgroud)
注意:->最后显示了管道结果现在分配给的内容。
通过它们的通知将行视为单独
group的。为了好玩,我们添加颜色和填充也取决于。事实上,我可以选择其他一些与美学相关的东西,比如“原创”与“其他”,或者是否某个阈值应该区分它们,等等。但是美学仍然会告诉我们在这种关系中分隔行。ggplotdf_iddf_idcolordfgroupggplot
ggplot(all_dfs_predictions, aes(x, y, group = df_id, color = df_id, fill = df_id)) +
geom_line(aes(y = .fitted)) +
geom_point() +
lims(x = c(1,100)) +
ggpubr::theme_pubr()
Run Code Online (Sandbox Code Playgroud)