나는 많은 지수 모델을에 맞추려고 노력하고 testData
있지만, 사이의 질량 증가 패턴의 변화를 testData$ID
위해이 모델은 많은 개인에게 성공하지 못할 것입니다. 목표는 성공적인 모델이 broom::tidy
있는의 모든 통계 testData$ID
가보고되고 모델이없는 개인이 모델 통계에 대한 NA가 있는 데이터 프레임에 나타나는 데이터 프레임 을 생성하는 것이 었습니다 . 다음은 ID에 대한 모델링에 실패하는 데이터 샘플입니다. 나는 broom :: tidy () 대신 오류를 던지는 함수 주위에 purrr :: possibly ()를 감싸 야한다는 것을 가르쳐 준이 게시물 을 살펴 보았 기 때문에 ExpMod_1
. 이에 대한 오류는 다음과 같습니다.
Error: The result of .f should be a data frame.
또한 이 게시물을 살펴보면 인수에 지정된 값뿐만 아니라 "입력과 동일한 인수를 허용"(-user3603486)하는 함수를 실제로 반환 할 가능성이 있다는 사실을 otherwise
알게되었습니다. 그 대답처럼 보이지만 NA_character_
어쨌든 정적 값입니다. 이 실행에서 발생한 오류는 다음과 같습니다.
Error: No tidy method for objects of class function
내 문제를 설명하기 위해 몇 가지 예제 데이터와 코드를 첨부했습니다.
require(tidyverse)
require(broom)
testDat<- tibble(Mass = rnorm(n = 100, mean = 3.5, sd = 0.5),
Days_to_Departure = sample(x = (c(1:14)),size = 100, replace = T),
ID = sample(x = c(1:4), size = 100, replace = T))
ExpMod_1<-testDat %>%
group_by(ID) %>%
group_modify(.f = ~possibly(~tidy(nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
start = list(a=1.2, b=0.5, c = 3.5),
control = list(maxiter = 500),
trace = T)),otherwise = ~tibble(estimate = c(NA_real_),
p.value = c(NA_real_),
statistic = c(NA_real_),
std.error = c(NA_real_),
term = c(NA_character_))))
ExpMod_2<-testDat %>%
group_by(ID) %>%
group_modify(.f = ~tidy(possibly(~nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
start = list(a=1.2, b=0.5, c = 3.5),
control = list(maxiter = 500),
trace = T),otherwise = ~list(m = NA_character_))))
이 두 가지 오류는 나에게 의미가 있습니다. 이러한 함수를 패키지화 할 때 중첩 할 수 있는지 또는 수행하려는 작업에 다른 함수를 작성해야하는지 알고 싶습니다. 문제는 제가 많은 모델을 맞추려고 노력하고 있고 많은 실패를 예상한다는 것입니다. 다른 모델들 ... nls, lm, nlme, lmer 등으로 해결할 것입니다.하지만이 모든 것을 맞추고 비교하고 싶습니다. 무엇이 성공하고 어디서 언제 성공하는지 알아야합니다.
미리 감사드립니다. 어떤 제안이나 피드백이라도 대단히 감사하겠습니다.
구문이 possibly
매우 혼란 스럽습니다. 이 작업을 수행하는 방법은 다음과 tryCatch
같습니다.
library(tidyverse)
testDat %>%
group_by(ID) %>%
summarise(data = list(tryCatch({
tidy(nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
start = list(a=1.2, b=0.5, c = 3.5),
control = list(maxiter = 500),
trace = T))
}, error = function(e) {
tibble(estimate = c(NA_real_),
p.value = c(NA_real_),
statistic = c(NA_real_),
std.error = c(NA_real_),
term = c(NA_character_))
})))
# ID data
# <int> <list>
#1 1 <tibble [1 × 5]>
#2 2 <tibble [1 × 5]>
#3 3 <tibble [1 × 5]>
#4 4 <tibble [1 × 5]>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다