Rの関数lmで重みを使用する方法は?


21

誰かweightsがRのlm関数で引数を使用する方法についていくつかのポインタを提供できますか?たとえば、交通量データにモデルを適合させようとしていて、数百の行があり、各行が(異なる人口を持つ)都市を表しているとします。モデルが母集団のサイズに基づいて各観測の相対的な影響を調整するようにしたい場合、単に指定できますweights=[the column containing the city's population]か?それが入るようなベクトルweightsですか?または、別のR関数/パッケージ/アプローチを完全に使用する必要がありますか?

人々がこの問題にどのように取り組んでいるか聞いて興味があります-私がそこで見たどの線形モデリングのチュートリアルでもそれがカバーされているのを見ませんでした。ありがとう!

回答:


17

Rのヘルプページlmがあなたの質問にかなりよく答えていると思います。重みの唯一の要件は、提供されるベクトルがデータと同じ長さでなければならないことです。データセットで変数の名前のみを指定することもできます。Rが残りを処理し、NAの管理などを行いweightます。引数で式を使用することもできます。以下に例を示します。

x <-c(rnorm(10),NA)
df <- data.frame(y=1+2*x+rnorm(11)/2, x=x, wght1=1:11)

## Fancy weights as numeric vector
summary(lm(y~x,data=df,weights=(df$wght1)^(3/4))) 

# Fancy weights as formula on column of the data set
summary(lm(y~x,data=df,weights=I(wght1^(3/4))))

# Mundane weights as the column of the data set
summary(lm(y~x,data=df,weights=wght1))

重みは正でなければならないことに注意してください。そうでない場合、Rはエラーを生成します。


しかし、重みは合計する必要がありますか?私は私の中に異なる結果を得るlm彼らはない対スケーリングされた場合...概要を
宮殿チャン

いいえ、重みを合計する必要はありません。lm概要の違いは何ですか?係数または標準誤差?
mpiktas

残差とその標準誤差は異なりますが、係数とその誤差は異なります。
パレスチャン

3

あなたが提案することはうまくいくはずです。これが理にかなっているかどうかを確認します。

lm(c(8000, 50000, 116000) ~ c(6, 7, 8))
lm(c(8000, 50000, 116000) ~ c(6, 7, 8), weight = c(123, 123, 246))
lm(c(8000, 50000, 116000, 116000) ~ c(6, 7, 8, 8))

2番目の行は、3番目の観測と重複する影響と同様に、1つの観測を他の2つの観測のそれぞれの重みの比較的2倍にすることにより、3番目の行と同じ切片と勾配を生成します(最初の行の結果とは異なります)。


私はそれを試してみましたが、summary出力が2行目と3行目、特に係数のp値で異なることがわかりました。2つのステートメントが同じデータセットを参照している場合、これは起こるのでしょうか。この件に関する質問をstackoverflow.com/questions/10268689/weighted-regression-in-r
lokheart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.