4

準尤度アプローチを使用して、いくつかのデータに GLM を当てはめています ( family=quasi(...))。

p次のように、分散仕様で変数を使用したいと思います。

family = quasi(link=log, variance=mu^p) 

ただし、これは機能しません (もはや認識しませんmu)。

p数値の代わりに使用できるように、式に p の値を挿入してから評価するように R を取得する方法はありますか?

動作しない例を次に示します。

set.seed(1)
x <- runif(100)
y <- x^2+2*x+sin(2*pi*x) + rnorm(100)

fitModel <- function(x,y, p) {
  model <- glm(y~x, family=quasi(link=log, variance=mu^p))
  return(model)
}
fitModel(x,y,2)

ありがとう!

4

1 に答える 1

2

このfamily関数は高度な解析を行います。つまりpaste0、コメントで提案されている解決策は、かなりのフープをジャンプしないと機能しません。また、y 値のいずれかが <= 0 の場合、次の関数は失敗するため、例を少し変更しました (負の応答値がある場合は、これについてどうするかを考える必要があります ... )

set.seed(1)
x <- seq(2,10,length=100)
y <- x^2+2*x+sin(2*pi*x) + rnorm(100,)

私がしたことは、quasiファミリ オブジェクトを作成し、その分散関数をその場で変更することでした。

pfamily <- quasi(link="log",variance="mu")
fitModel <- function(x,y, p) {
    pfamily[["variance"]] <- function(mu) mu^p
    model <- glm(y~x, family=pfamily)
    model
}

fitModel(x,y,2)
fitModel(x,y,1)

価値のあることとして、このバリアントは の任意の値を実行できる必要があるpため、たとえば、分散乗数で曲線を描くことができます。

dfun <- function(p) {
   deviance(fitModel(x,y,p))
}
pvec <- seq(0.1,3,by=0.1)
dvec <- sapply(pvec,dfun)
par(las=1,bty="l")
plot(pvec,dvec,type="b",xlab="variance power",ylab="deviance")

ここに画像の説明を入力

于 2013-09-27T12:57:19.633 に答える