ggplot2 메일 링리스트에있는 다른 사람의 질문에 대답하려고하는데 알아낼 수 없습니다 : https://groups.google.com/forum/#!topic/ggplot2/YgCqQX8JbPM
OP는 nls 모델에 대한 데이터의 하위 집합에 다른 시작 매개 변수를 적용하려고합니다. 내 생각은 그가 dplyr과 purrr에 대해 읽어야한다고 생각했지만 몇 시간 동안 노력한 끝에 나는 벽에 부딪혔다. 버그인지 또는 purrr에 대한 경험 부족인지 확실하지 않습니다.
library(tidyverse)
# input dataset
df <- data.frame(Group = c(rep("A", 7), rep("B", 7), rep("C", 7)),
Time = c(rep(c(1:7), 3)),
Result = c(100, 96.9, 85.1, 62.0, 30.7, 15.2, 9.6,
10.2, 14.8, 32.26, 45.85, 56.25, 70.1, 100,
100, 55.61, 3.26, -4.77, -7.21, -3.2, -5.6))
# nest the datasets for computing models
df_p <-
df %>%
group_by(Group) %>%
nest
# add model parameters as rows/columns
df_p$starta = c(-3, 4,-3)
df_p$startb = c(85, 85, 85)
df_p$startc = c(4, 4, 4)
df_p$startd = c(10,10,10)
# compute models using nls
df_p %>%
mutate(model2 = map(data, ~nls(Result ~ a+(b-a)/(1+(Time/c)^d), data = ., start = c(a = starta, b = startb, c = startc, d = startd)))
)
#Error in mutate_impl(.data, dots) :
# parameters without starting value in 'data': a, b, d
이 버그와 관련된 느낌이지만 잠시 동안 수정되었습니다 ... https://github.com/hadley/dplyr/issues/1447
내가 알 수 있듯이 중첩 된 tibble의 범위에서 변수를 찾고 있지만 mutate 호출의 범위에 있기를 원합니다. 이 문제를 해결할 방법이 있는지 모르겠습니다.
그룹 B는 기본적으로 시간이 반대로되어 있기 때문에 예제 데이터는 까다 롭습니다. 그것에 대한 좋은 초기 값을 찾는 것은 내 문제가 아닙니다. 그래서 그룹 B에 대한 새로운 데이터를 만들었습니다 . nls()
내부에 적용하기 위해 데이터 프레임을 설정하는 방법은 다음과 같습니다 map2()
.
library(tidyverse)
df <- data.frame(Group = c(rep("A", 7), rep("B", 7), rep("C", 7)),
Time = c(rep(c(1:7), 3)),
Result = c(100, 96.9, 85.1, 62.0, 30.7, 15.2, 9.6,
## I replaced these values!!
## Group B initial values are NOT MY PROBLEM
105, 90, 82, 55, 40, 23, 7,
100, 55.61, 3.26, -4.77, -7.21, -3.2, -5.6))
## ggplot(df, aes(x = Time, y = Result, group = Group)) + geom_line()
df_p <-
df %>%
group_by(Group) %>%
nest() %>%
## init vals are all the same, but this shows how to make them different
mutate(start = list(
list(a = -3, b = 85, c = 4, d = 10),
list(a = -3, b = 85, c = 4, d = 10),
list(a = -3, b = 85, c = 4, d = 10)
)
)
df_p %>%
mutate(model2 = map2(data, start,
~ nls(Result ~ a+(b-a)/(1+(Time/c)^d),
data = .x, start = .y)))
#> # A tibble: 3 × 4
#> Group data start model2
#> <fctr> <list> <list> <list>
#> 1 A <tibble [7 × 2]> <list [4]> <S3: nls>
#> 2 B <tibble [7 × 2]> <list [4]> <S3: nls>
#> 3 C <tibble [7 × 2]> <list [4]> <S3: nls>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다