Не могу понять, чего не хватает в моем коде функции R - мешать ему нормально работать - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь провести Байесовский анализ занятости с ковариатами сайта.Мой первый шаг - сделать функцию.Я продолжаю получать + в моей консоли R, указывая, что он считает мой код неполным.Разбирая строки по отдельности, я почти уверен, что проблема заключается в первой строке кода.Тем не менее, я не могу понять, где именно я что-то упустил и, следовательно, где проблема изначально лежит.

data.fn <- function(R = 39, T = 14, xmin= 0, xmax= 1, alpha.psi = 0.4567,
                beta.psi = 0.0338, alpha.p = 0.4, beta.p = 0.4) {
y <- array(dim = c(R,T)) #This creates an array for counts
  #Ecological Process
  #Covariate values
X <- sort(runif(n=R, min = xmin, max = xmax))
#Expected occurence-covariate relationship
 psi <- plogis(alpha.psi + beta.psi *X) #this applies the inverse logit

 #Add Bernoulli Noise - drawing indicator of occurence (z) from bernoulli psi 
 z<- rbinom(n = R, size = 1, prob = psi)
 occ.fs <- sum(z) #"Finite Sample Occupancy"
 "Make a census"
  p.eff <- z*p
  for (i in 1:T) {
    y[,i] <- rbinom(n=R, size = 1, prob = p.eff)
  }
}

Есть еще код - то есть функция {} завершена, но проблема началась еще до того, как она была запущена, и у меня продолжают возникать проблемы с загрузкой кода в стек.Сообщение об ошибке просто + все вниз по левой стороне консоли R

РЕДАКТИРОВАТЬ

Может ли быть что-то не так с тем, как R воспринимает вещи?Например, со следующим кодом

naive.pred <- plogis(predict(glm(apply(y, 1, max) ~ X + I (X^2),
                             family = binomial)))

Я получил сообщение об ошибке - неожиданный символ (скобка) в семействе = бином, но каждая скобка спарена правильно - нет лишних лишних скобок?

1 Ответ

0 голосов
/ 02 июля 2019

Хотя я не видел проблемы + при просмотре вашего кода, вы неправильно моделируете наблюдаемые данные, и внутри вашей функции был объект p, которому не был передан аргумент. Вы создали логитный линейный предиктор для psi, используя alpha.psi и beta.psi, однако вам не хватает логитного линейного предиктора для вероятности обнаружения вида, если он существует с использованием alpha.p и beta.p. Предполагая, что ковариат X используется как для скрытого состояния занятости, так и для модели наблюдения, код должен стать.

data.fn <- function(R = 39, T = 14, xmin= 0, xmax= 1, alpha.psi = 0.4567,
                                        beta.psi = 0.0338, alpha.p = 0.4, beta.p = 0.4) {
    y <- array(dim = c(R,T)) #This creates an array for counts
    #Ecological Process
    #Covariate values
    X <- sort(runif(n=R, min = xmin, max = xmax))
    #Expected occurence-covariate relationship
    psi <- plogis(alpha.psi + beta.psi *X) #this applies the inverse logit

    #Add Bernoulli Noise - drawing indicator of occurence (z) from bernoulli psi 
    z<- rbinom(n = R, size = 1, prob = psi)
    occ.fs <- sum(z) #"Finite Sample Occupancy"
    # Linear predictor for detection,
    #  assuming the same covariate is used for detection
    p.eff <- plogis(alpha.p + beta.p * X)
    for (i in 1:T) {
        y[,i] <- rbinom(n=R, size = 1, prob = p.eff * z)
    }
    return(list(y = y, z = z, X = X, occ.fs = occ.fs))
}

В этом коде предполагается, что вы передаете параметры логит-масштаба в данные, поэтому, если вы пытаетесь смоделировать данные таким образом, чтобы X оказал очень незначительное и положительное влияние на занятость, то вы, так сказать, не участвуете в гонках. , Если вы ищете более выраженный эффект, чем вы должны увеличить размер эффекта. Наконец, 39 сайтов - это очень мало для анализа занятости, учитывая, что двоичные данные обнаружения / отсутствия обнаружения весьма бедны информацией. Не удивляйтесь, если ваши апостериорные оценки, полученные при анализе набора данных, на самом деле не возвращают параметры, использованные для моделирования данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...