【发布时间】:2019-11-28 04:28:35
【问题描述】:
我有一个while 循环,它需要重复采样过程,直到样本列value 的值小于列rep1:rep4。我想重复这个循环一定次数,比如说 100 次。
对于每个成功的循环,我想将回归线添加到两个单独的图中。在此示例中,value 列将为 x 轴提供数据,而 y 轴的数据将来自y1 和y2。我已经包含了额外的 y 列,因为可能有许多我想绘制的变量都将共享相同的 x 轴数据。对于此示例,最终结果将是两个图,一个用于y1,一个用于y2,每个包含 100 条重叠回归线。
我没有在这里包含采样过程代码,因为它有点过于复杂,可能会分散这里的主要问题。
下面提供了基本的while 循环和示例数据。
此线程Use a for-loop of characters to plot several lines with specific colors 表示带有seq_along 的附加for 循环可能是这里的答案。然而,不同的颜色对我来说不是问题,所以这个例子可能比这里需要的更复杂。
for (i in 1:nrow(df)){
while (any(df$value[i]<=as.numeric(df[i,2:5])%>%na.omit())){
#sampling procedure here
}
}
这是df 布局的示例:
ID rep1 rep2 rep3 rep4 y1 y2 value
1 a NA NA NA NA 5 2 -400
2 b -400 NA NA NA 7 5 -300
3 c -400 -300 NA NA 3 3 -200
4 d -400 -300 -200 NA 4 6 -300
5 e -400 -300 -200 -300 9 7 -400
6 f NA NA NA NA 2 3 -400
7 g -400 NA NA NA 3 2 -400
8 h NA NA NA NA 6 4 -400
9 i NA NA NA NA 7 4 -200
10 j -200 -300 NA NA 7 6 -300
11 k -300 NA NA NA 8 9 -200
12 l NA NA NA NA 3 7 -300
13 m NA NA NA NA 4 7 -300
structure(list(ID = structure(1:13, .Label = c("a", "b", "c",
"d", "e", "f", "g", "h", "i", "j", "k", "l", "m"), class = "factor"),
rep1 = c(NA, -400L, -400L, -400L, -400L, NA, -400L, NA, NA,
-200L, -300L, NA, NA), rep2 = c(NA, NA, -300L, -300L, -300L,
NA, NA, NA, NA, -300L, NA, NA, NA), rep3 = c(NA, NA, NA,
-200L, -200L, NA, NA, NA, NA, NA, NA, NA, NA), rep4 = c(NA,
NA, NA, NA, -300L, NA, NA, NA, NA, NA, NA, NA, NA), y1 = c(5L,
7L, 3L, 4L, 9L, 2L, 3L, 6L, 7L, 7L, 8L, 3L, 4L), y2 = c(2L,
5L, 3L, 6L, 7L, 3L, 2L, 4L, 4L, 6L, 9L, 7L, 7L), value = c(-400L,
-300L, -200L, -300L, -400L, -400L, -400L, -400L, -200L, -300L,
-200L, -300L, -300L)), class = "data.frame", row.names = c(NA,
-13L))
我想这应该适用于基本情节
ggplot(data = df, aes(x = value, y = y1)) +
geom_smooth(method = lm, se = FALSE)
ggplot(data = df, aes(x = value, y = y2)) +
geom_smooth(method = lm, se = FALSE)
【问题讨论】:
-
每次迭代用
lm()拟合回归线不是更容易吗(因为这是geom_smooth(method = lm)所做的),然后在data.frame 中总结必要的系数,然后绘制一次所有的行? -
@teunbrand 我认为不会使用简单的线性回归,而是使用类似黄土的东西。
lm()函数会为此工作吗?不过,沿着这些思路,由于 y 值没有改变,而不是记录截距数据,也许将value数据记录在data.frame中然后根据需要绘制会更容易?如果是这种情况,应该如何设置外部for循环以将单个运行记录在单独的data.frame中?如果将运行次数增加到一千次,该技术是否会变得比仅绘制数据更麻烦?