我正在尝试使用delta-lognormal GLM对分布进行建模。我的数据是丰富的(连续变量有10%的零aprox)和一系列解释变量,但到目前为止我一次尝试一个。
头(data.file)
DENSITY DEPTH LONGITUDE LATITUDE ......(ncol = 8)
14.029843 172 9.325000 41.97000
8.557391 251 9.367333 42.33000
17.235731 251 9.367333 42.33000
37.262910 146 9.159500 42.30300
19.829688 185 9.238333 42.31900
......(nrow = 12000)
我只发现了一个提供这种分析的包,“fishMod”。我尝试了deltaLN命令,结果如下。
deltaLN(DENSITY~DEPTH,~DEPTH,data = data.file)
deltaLN出错(DENSITY~DEPTH,~DEPTH,data = data.file):
dims [product 12000]与object [0]
的长度不匹配知道这个错误代表什么以及如何修改它? 否则,你知道其他一些提供delta-lognormal GLM的包吗?
由于
LucíaLópez-López
答案 0 :(得分:1)
Package Developer here:这是代码中的一个错误。我(愚蠢的)错误。现在修复了包25的版本(以及R-3.1.0)。请从现在开始使用它。
我在下面列出了一些示例代码,用于根据Lucia提供给我的数据进行调试。它包括上面提到的确切电话。
另一方面说明:您确定要使用delta log-normal模型吗?它们被包含在fishMod包中以获得“完整性”。我在下面的代码中添加了一个替代品,一个Tweedie GLM。根据数据和数据问题,您可能还需要考虑Poisson-gamma模型。有关详细信息,请参阅Foster和Bravington(2013)Environ Ecol Stat(2013)20:533-552。这篇论文描述了fishMod中的方法。
data.file <- read.csv("~/Desktop/data.file.csv") #will need to change on your machine
par( mfrow=c(1,3))
with( data.file, plot( DEPTH, DENSITY, pch=20, main="Raw Data"))
with( data.file, lines( lowess( DEPTH, DENSITY), col="red"))
require( fishMod)
fm.dln <- deltaLN( ln.form= DENSITY~DEPTH, binary.form=~DEPTH, data=data.file)
plot( fm.dln$fitted, fm.dln$residuals[,"quantile"], pch=20, main="Delta Log-Normal quantile residuals")
abline( h=0, col="red")
fm.Tweedie <- tglm( DENSITY~DEPTH, data=data.file) #estimate power param too!
plot( fm.Tweedie$fitted, fm.Tweedie$residuals[,"random"], pch=20, main="Tweedie GLM Randomised quantile residuals")
abline( h=0, col="red")
#Tweedie has slightly better residuals, slightly only though.
example.model <- deltaLN(DENSITY ~ DEPTH, ~DEPTH, data=data.file) #to check the original problem, very directly.