背景: glmultiを使用したマルチモデル推論
glmultiは、従属変数と一連の予測子を指定してすべての可能な一般線形モデルを構築し、従来のglm関数を介してそれらを適合させ、マルチモデル推論 (たとえば、 AICc、BIC から導出されたモデルの重みを使用)。glmultiは、理論的には、係数、モデルの対数尤度、および自由パラメーターの数 (およびおそらく他の情報?) をglmと同じ形式で返す他の関数でも機能します。
私の目標: 堅牢なエラーを伴うマルチモデル推論
外れ値の影響を防ぐために、量的従属変数のエラーの堅牢なモデリングでglmultiを使用したいと思います。
たとえば、線形モデルの誤差は、正規分布ではなくt 分布として分布していると仮定できます。尖度パラメーターを使用すると、t 分布の裾が大きくなる可能性があるため、(正規分布と比較して) 外れ値に対してよりロバストになります。
ただし、私は t 分布アプローチを使用することにコミットしていません。対数尤度を返すため、 glmultiのマルチモデル アプローチで機能するアプローチに満足しています。しかし、残念ながら、R でよく知られているロバストな線形モデル (たとえば、robustのlmRobやrobustbaseのlmrob ) は使用できません。これは、対数尤度フレームワークで動作しないため、glmultiでは機能しないためです。
問題: glmultiで動作する堅牢な回帰関数が見つかりません
対数尤度フレームワークで動作する RI の唯一の堅牢な線形回帰関数は、heavyLm ( heavyパッケージから) です。分布でエラーをモデル化します。残念ながら、heavyLmはglmultiでは動作しません(少なくともすぐに使用できるものではありません)。これにはloglik (およびおそらく他のもの) 用の S3 メソッドがないためです。
説明する:
library(glmulti)
library(heavy)
データセットスタックロスの使用
head(stackloss)
通常のガウス線形モデル:
summary(glm(stack.loss ~ ., data = stackloss))
glmのデフォルトのガウスリンク関数を使用したglmultiによるマルチモデル推論
stackloss.glmulti <- glmulti(stack.loss ~ ., data = stackloss, level=1, crit=bic)
print(stackloss.glmulti)
plot(stackloss.glmulti)
t 分布誤差を持つ線形モデル (デフォルトは df=4)
summary(heavyLm(stack.loss ~ ., data = stackloss))
フィッティング関数としてHeavyLmを呼び出すglmultiを使用したマルチモデル推論
stackloss.heavyLm.glmulti <- glmulti(stack.loss ~ .,
data = stackloss, level=1, crit=bic, fitfunction=heavyLm)
次のエラーが発生します。
Initialization...
Error in UseMethod("logLik") :
no applicable method for 'logLik' applied to an object of class "heavyLm".
次の関数を定義すると、
logLik.heavyLm <- function(x){x$logLik}
glmulti は対数尤度を取得できますが、次のエラーが発生します。
Initialization...
Error in .jcall(molly, "V", "supplyErrorDF",
as.integer(attr(logLik(fitfunc(as.formula(paste(y, :
method supplyErrorDF with signature ([I)V not found
問題: ロバストな線形回帰のどの関数/パッケージが glmulti で動作しますか (つまり、glm のように動作します)?
HeavyLm をglmultiで動作させるための関数をさらに定義する方法はおそらくあると思いますが、この旅に出る前に誰か尋ねたいと思いました。
- (a)対数尤度フレームワークの下で動作し、(b)glmのように動作する(したがって、すぐに使えるglmultiで動作する)堅牢な線形回帰関数を知っています。
- HeavyLm はすでに glmulti で動作しています。
どんな助けでも大歓迎です!