2

多くの R モデルが「重み」パラメータ (cart、loess、gam など) を許可していることに気付きました。ヘルプ関数のほとんどは、データの「事前重み」として説明していますが、実際にはどういう意味ですか?

多くの繰り返しのケースとバイナリ応答のデータがあります。「重み」を使用して、入力と応答の各組み合わせが何回発生するかをエンコードできることを望んでいましたが、これは機能していないようです。また、応答を成功の割合にし、重みを共変量の各組み合わせの合計試行にしようとしましたが、これもうまくいかないようです (少なくともゲームの場合)。上記のすべてのモデル タイプに対してこれを実行しようとしていますが、まず、gam [mgcv パッケージ] に対してこれを行う方法を教えてください。

4

2 に答える 2

2

二項応答の重みには自然な解釈があります。つまり、各観測に対応する試行回数です。成功しているn試練がある場合、これを次のように当てはめますp

glm(p/n ~ x, family=binomial, weights=n)

とパッケージgamの両方で同じことが機能します。gammgcv

于 2013-07-19T17:58:03.447 に答える
1

また、重みは、繰り返し観測するサンプル サイズをエンコードする便利な方法だと考えていました。しかし、次の例は、これが単純な線形モデルには当てはまらないことを示しています。最初に、観測された/発明された靴のサイズと人の身長を含む分割表を定義し、頻度を重みとして指定するリーツ二乗回帰を当てはめます。

SKdata = matrix(c(20,5,5,5,40,15,3,27,30,2,3,10),ncol=4)
dimnames(SKdata) = list(shoesize=10:12,height=seq(160,190,by=10))

x = as.data.frame(as.table(SKdata), stringsAsFactors=FALSE)
for (i in 1:ncol(x)) x[,i] = as.numeric(x[,i])
fit1 = lm(height ~ shoesize,data=x, weights=Freq)
summary(fit1)

勾配の係数は重要ではなく、残差誤差は「10 自由度」に基づいていることに注意してください。

これは、便利な関数 expand.dft を使用して、分割表を "生" データ (観測ごとに 1 行) に変換すると変わります。

expand.dft <- function(x, na.strings = "NA", as.is = FALSE, dec = ".")
{
  DF <- sapply(1:nrow(x), function(i) x[rep(i, each = x$Freq[i]), ],
               simplify = FALSE)

  DF <- subset(do.call("rbind", DF), select = -Freq)

  for (i in 1:ncol(DF))
  {
    DF[[i]] <- type.convert(as.character(DF[[i]]),
                            na.strings = na.strings,
                            as.is = as.is, dec = dec)                                       
  }
  DF
} 

fit2 = lm(height ~ shoesize,data=expand.dft(x))
summary(fit2)

同じ係数が得られますが、今回は「163 自由度」に基づいているため、非常に重要です。

于 2013-07-20T02:51:04.917 に答える