disaggregation R包中的disag_model()函数出现问题

disaggregation R包中的disag_model()函数出现问题,r,R,我试图使用分解包来评估它是否可以用于我拥有的数据集。我的原始数据是分类的,所以我将它们聚合起来,使用disaggregation包中的disag_模型函数,并将“拟合值”与实际值进行比较。 但是,当我运行该函数时,R会话中止。 我试图一步一步地执行disag_model函数,我发现问题是由于使用了nlminb()来优化a后验密度函数,但我无法理解为什么会发生这种情况以及如何解决它。 谢谢你的帮助 您可以在此链接中找到我使用的数据: 请下载文件夹以运行代码。 这是我使用的代码: library(t

我试图使用分解包来评估它是否可以用于我拥有的数据集。我的原始数据是分类的,所以我将它们聚合起来,使用disaggregation包中的disag_模型函数,并将“拟合值”与实际值进行比较。 但是,当我运行该函数时,R会话中止。 我试图一步一步地执行disag_model函数,我发现问题是由于使用了nlminb()来优化a后验密度函数,但我无法理解为什么会发生这种情况以及如何解决它。 谢谢你的帮助

您可以在此链接中找到我使用的数据: 请下载文件夹以运行代码。 这是我使用的代码:

library(tidyverse)
library(raster)
library(disaggregation)
library(sp)

path<- "yourPath/Data"

load(file.path(path, "myRS"))
load(file.path(path, "RAST"))


Data <- read.csv(file = paste(path, "/sim_data.csv", sep = ""))
Data$HasRes <- ifelse(Data$PN50 > runif(nrow(Data)), 1, 0)
for (i in 1:nlayers(myRS)) {
  myRS@layers[[i]]@file@name<-file.path(path, "predStackl10")
}
DFCov <-
  as.data.frame(raster::extract(myRS, Data[c("XCoord", "YCoord")]))
Data <- cbind(Data, DFCov)

# Remove NA
NAs <- which(is.na(rowSums(Data[names(myRS)])))
Data <- Data[-NAs, ]
Data$ISO3 <- as.factor(Data$ISO3)

world_shape <-
  shapefile(file.path(path, "World.shp"))
lmic_shape <-
  world_shape[(world_shape@data$ISO3 %in% levels(Data$ISO3)),]
plot(lmic_shape)


# I would like to convert Data in a SpatialPointsDataFrame object
PN50 <- Data
coordinates(PN50) <- c("XCoord", "YCoord")
is.projected(PN50) # see if a projection is defined
proj4string(PN50) <- CRS("+proj=longlat +datum=WGS84")



# compute the mean P50 within each state
PN50_mean <- aggregate(x = PN50,
                       by = list(Data$ISO3),
                       FUN = mean)
# compute the centroid of the observations coordinates for each state
PN50_centroid <-
  Data %>% group_by(ISO3) %>% summarise(meanX = mean(XCoord), meanY = mean(YCoord))

# assign to each mean the centroid coordinates
PN50_agg <-
  as.data.frame(
    cbind(
      PN50_mean = PN50_mean@data$PN50,
      XCoord = PN50_centroid$meanX,
      YCoord = PN50_centroid$meanY
    )
  )
PN50_agg$XCoord <- as.numeric(PN50_agg$XCoord)
PN50_agg$YCoord <- as.numeric(PN50_agg$YCoord)
PN50_agg$ISO3 <- as.character(PN50_centroid$ISO3)
samsiz <-
  Data %>% group_by(ISO3) %>% summarise(sz = sum(SampleSize))
PN50_agg$sample_size <- as.numeric(samsiz$sz)
PN50_agg$case <- round(PN50_agg$PN50_mean * PN50_agg$sample_size)

# I would like having data in a SpatialPolygonsDataFrame format to use the disaggrgation package
library(sp)
coordinates(PN50_agg) <- c("XCoord", "YCoord")
proj4string(PN50_agg) <- CRS("+proj=longlat +datum=WGS84")
PN50_polyg <- lmic_shape
PN50_polyg@data <-
   full_join(PN50_polyg@data, PN50_agg@data, by = "ISO3")


# covariates raster 

covariate_stack <-
  getCovariateRasters(path, shape = raster(x = paste0(path, '/multi.tif')))
names(covariate_stack)
covariate_stack2 <- dropLayer(covariate_stack, nlayers(covariate_stack))
names(covariate_stack2)
plot(covariate_stack2)
covariate_stack2 <- raster::stack(covariate_stack2)
covariate_stack2<-brick(covariate_stack2)

# population raster

extracted <- raster::extract(raster(x = paste0(path, '/multi.tif')), PN50_polyg)
n_cells <- sapply(extracted, length)
PN50_polyg@data$pop_per_cell <- PN50_polyg@data$sample_size / n_cells

population_raster <-
  rasterize(PN50_polyg, covariate_stack2, field = 'pop_per_cell')

# prepare data for disag_model()

dis_data <- prepare_data(
  polygon_shapefile = PN50_polyg,
  covariate_rasters = covariate_stack2,
  aggregation_raster = population_raster,
  mesh.args = list(
    max.edge = c(5, 40),
    cut = 0.0005,
    offset = 1
  ),
  id_var = "ISO3",
  response_var = "case",
  sample_size_var = "sample_size",
  na.action = TRUE,
  ncores = 8
)


# Rho and p(Rho<Rho_min)
dist <- pointDistance(PN50_agg@coords, lonlat = F, allpairs = T)
rownames(dist) <- PN50_agg$ISO3
colnames(dist) <- PN50_agg$ISO3

flattenDist <- function(dist) {
  up <- upper.tri(dist)
  flat <- data_frame(row = rownames(dist)[row(dist)[up]],
                     column = rownames(dist)[col(dist)[up]],
                     dist = dist[up])
  return(flat)
}
pair_dist <- flattenDist(dist)
d <- pair_dist$dist
k <- 0.036
CorMatern <- k * d * besselK(k * d, 1)
limits <- sp::bbox(PN50_polyg)
hypontenuse <-
  sqrt((limits[1, 2] - limits[1, 1]) ^ 2 + (limits[2, 2] - limits[2, 1]) ^
         2)
prior_rho <- hypontenuse / 3
p_rho <- sum(d[CorMatern <= 0.1] < prior_rho) / length(d[CorMatern <= 0.1])

# sigma and p(sigma>sigma_max)
sigma_boost <- function(data, i) {
  sd(data[i] / mean(data[i]))
}
sigma <-
  boot(data = dis_data$polygon_data$response,
       statistic = sigma_boost,
       10000)

prior_sigma <- sigma$t0
p_sigma <- sum(sigma$t >= sigma$t0) / length(sigma$t)

default_priors <-
  list(
    priormean_intercept = 0,
    priorsd_intercept = 4,
    priormean_slope = 0,
    priorsd_slope = 2,
    prior_rho_min = prior_rho,
    prior_rho_prob = p_rho,
    prior_sigma_max = prior_sigma,
    prior_sigma_prob = p_sigma,
    prior_iideffect_sd_max = 0.1,
    prior_iideffect_sd_prob = 0.01
  )

fitted_model <- disag_model(
  data = dis_data,
  iterations = 1000,
  family = "binomial",
  link = "logit",
  # priors = default_priors,
  field = TRUE,
  iid = TRUE,
  silent = TRUE
)

库(tidyverse)
图书馆(光栅)
图书馆(分类)
图书馆(sp)

path我能够使用DISU数据对象运行disag_模型函数。没有错误或崩溃。我跑了以下几行

fitted_model <- disag_model(
  data = dis_data,
  iterations = 1000,
  family = "binomial",
  link = "logit",
  field = TRUE,
  iid = TRUE,
  silent = TRUE
)

fitted_model我尝试使用分解包早期版本中的fit_model函数(而不是disag_model)。由于nlminbHi存在同样的问题,R会话仍将中止,感谢您的查询。dropbox链接刚刚转到“/Data”,请更正链接以便我们可以查看一下?谢谢。对不起,这是正确的链接:你好。安妮塔处理了大部分事情,但没有名声发表评论,所以我是中间人!如果我们有点慢的话,请跟我们谈谈。我们似乎无法加载那些光栅。myRS只包含元数据并指向文件/Users/gbrunelli/Dropbox/resbank/data/predStackl10.grd。如果我们能得到这些文件,很高兴继续努力帮助我们!再次抱歉,我将该文件添加到dropbox文件夹。再次感谢您的帮助。您好@G0904B。如果这确实回答了你的问题,你可以考虑点击滴答声,让安妮塔的答案被接受。再次感谢您的联系!