Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从具有非常大数据集的广义加性模型编码预测区间_R_Memory_Bigdata_Prediction_Mgcv - Fatal编程技术网

R 从具有非常大数据集的广义加性模型编码预测区间

R 从具有非常大数据集的广义加性模型编码预测区间,r,memory,bigdata,prediction,mgcv,R,Memory,Bigdata,Prediction,Mgcv,我有一个关于人、他们的位置以及他们是否相互认识的小数据集。它是拥有1000人的数据集的子集。考虑到每个人都可能认识任何其他人,潜在链接的数量增长不到n^2。我想拟合一个具有小子集的模型,以获得链接概率作为距离的函数,这样我就可以使用更广泛的数据集进行模拟 我有两个问题: 我不知道如何从拟合的GAM对象创建预测间隔 使用R-sig-mixed或使用R-sig-mixed生成预测区间在计算上是禁止的 下面是我的问题的一个例子,使用R-sig-mixed技术生成间隔。请注意,最后一步将抛出一个错误,即

我有一个关于人、他们的位置以及他们是否相互认识的小数据集。它是拥有1000人的数据集的子集。考虑到每个人都可能认识任何其他人,潜在链接的数量增长不到n^2。我想拟合一个具有小子集的模型,以获得链接概率作为距离的函数,这样我就可以使用更广泛的数据集进行模拟

我有两个问题:

  • 我不知道如何从拟合的GAM对象创建预测间隔
  • 使用R-sig-mixed或使用R-sig-mixed生成预测区间在计算上是禁止的
  • 下面是我的问题的一个例子,使用R-sig-mixed技术生成间隔。请注意,最后一步将抛出一个错误,即无法分配一个巨大的向量,除非您在一台真正令人印象深刻的机器上

    #Some fake location data
    set.seed(13)
    x = runif(50)*2
    y = runif(50)*2
    d = cbind(ID = 1:50,as.matrix(dist(data.frame(x,y))))
    
    我想将链接建模为距离的函数。更多虚假数据:

    library(reshape)
    mdata <- melt(as.data.frame(d), id=c("ID"),measure.vars = colnames(d)[2:ncol(d)],variable.name="distance") 
    mdata$popularity = rnorm(25,sd=.3)
    colnames(mdata)[colnames(mdata)=="variable"] = "knows"
    colnames(mdata)[colnames(mdata)=="value"] = "distance"
    mdata = subset(mdata,ID!=knows)
    a = exp(1/(mdata$distance/runif(nrow(mdata))^mdata$distance)+mdata$popularity+rnorm(nrow(mdata),sd=.001))
    mdata$prlink = a/(1+a)
    with(mdata,plot(distance,prlink))
    mdata$link = runif(nrow(mdata))<mdata$prlink
    mdata$ID = as.factor(mdata$ID)
    mdata$knows = as.factor(mdata$knows)
    mdata$dum=1 #this facilitates predicting from the population of the model, later
    
    现在,我想将拟合模型应用于我的主数据集:

    x = runif(1000)*2
    y = runif(1000)*2
    d = cbind(ID = 1:1000,as.matrix(dist(data.frame(x,y))))
    mdata <- melt(as.data.frame(d),id.vars = "ID") 
    colnames(mdata)[colnames(mdata)=="variable"] = "knows"
    colnames(mdata)[colnames(mdata)=="value"] = "distance"
    mdata = subset(mdata,ID!=knows)
    mdata$dum=0; mdata$ID=1; mdata$knows=2 #These are needed for prediction, even though I am predicting from the population of the model, not one of the levels.
    
    这花了我47秒,在我的电脑工作时冻结了它

    这是我在R-sig-mixed上找到的获得预测区间的技术

    警告:以下代码将尝试分配大量内存,并可能使您的计算机崩溃。
    tic()
    
    predvar您需要避免计算
    Designmat%*%vcov(mod)%*%t(Designmat)
    。毕竟你只需要对角线。试试这个:

    tmp <- Designmat %*% vcov(mod)
    
    library(compiler)
    diagMult <- cmpfun(function(m1, m2) sapply(seq_len(nrow(m1)), 
                                                function(i) m1[i,] %*% m2[,i]))
    predvar <-  diagMult(tmp, t(Designmat))
    

    tmp您需要避免计算
    Designmat%*%vcov(mod)%*%t(Designmat)
    。毕竟你只需要对角线。试试这个:

    tmp <- Designmat %*% vcov(mod)
    
    library(compiler)
    diagMult <- cmpfun(function(m1, m2) sapply(seq_len(nrow(m1)), 
                                                function(i) m1[i,] %*% m2[,i]))
    predvar <-  diagMult(tmp, t(Designmat))
    

    tmp您只需要对角线,因此请考虑如何计算
    diag(A%*%B)
    ,而不计算
    A%*%B
    。顺便说一句,你知道系统时间吗?你只需要对角线,所以想一想如何计算
    diag(A%*%B)
    ,而不计算
    A%*%B
    。顺便说一句,你知道系统时间吗?它运行得很好!如果你有机会,你能不能提供一点关于它为什么起作用以及Rcpp做什么的直觉?这里没有CS训练,只有统计数据。这应该是显而易见的。区别在于直接计算一个巨大矩阵乘积的对角线(内存中的大小为n)和计算整个矩阵乘积(内存中的大小为n^2)。未使用,但可以大大加快操作速度。(这里也没有CS培训。)很明显。我在询问编译器库和cmpfun执行函数的方式。
    cmpfun
    编译函数体。有时,通过编译函数可以获得更好的性能。当然,这种方法无法与本机C/C++代码竞争。这非常有效!如果你有机会,你能不能提供一点关于它为什么起作用以及Rcpp做什么的直觉?这里没有CS训练,只有统计数据。这应该是显而易见的。区别在于直接计算一个巨大矩阵乘积的对角线(内存中的大小为n)和计算整个矩阵乘积(内存中的大小为n^2)。未使用,但可以大大加快操作速度。(这里也没有CS培训。)很明显。我在询问编译器库和cmpfun执行函数的方式。
    cmpfun
    编译函数体。有时,通过编译函数可以获得更好的性能。但当然,这种方法无法与本机C/C++代码竞争。
    tic()
    Designmat = predict(mod,newdata=mdata,type="lpmatrix")
    toc()
    
    tic()
    predvar <- diag(Designmat %*% vcov(mod) %*% t(Designmat))
    SE <- sqrt(predvar) 
    SE2 <- sqrt(predvar+mod$sig2) 
    tfrac <- qt(0.975, mod$df.residual)
    interval = tfrac*SE2
    toc()
    
    >Error: cannot allocate vector of size 7435.7 Gb
    
    tmp <- Designmat %*% vcov(mod)
    
    library(compiler)
    diagMult <- cmpfun(function(m1, m2) sapply(seq_len(nrow(m1)), 
                                                function(i) m1[i,] %*% m2[,i]))
    predvar <-  diagMult(tmp, t(Designmat))