«взвешенная» регрессия в R

Я создал скрипт наподобие приведенного ниже, чтобы сделать то, что я назвал «взвешенной» регрессией.:

library(plyr)

set.seed(100)

temp.df <- data.frame(uid=1:200,
                      bp=sample(x=c(100:200),size=200,replace=TRUE),
                      age=sample(x=c(30:65),size=200,replace=TRUE),
                      weight=sample(c(1:10),size=200,replace=TRUE),
                      stringsAsFactors=FALSE)

temp.df.expand <- ddply(temp.df,
                        c("uid"),
                        function(df) {
                          data.frame(bp=rep(df[,"bp"],df[,"weight"]),
                                     age=rep(df[,"age"],df[,"weight"]),
                                     stringsAsFactors=FALSE)})

temp.df.lm <- lm(bp~age,data=temp.df,weights=weight)
temp.df.expand.lm <- lm(bp~age,data=temp.df.expand)

Вы можете видеть, что в temp.dfкаждая строка имеет свой вес, я имею в виду, что всего 1178, но для строк с одинаковыми bpи ageони объединяются в 1 строку и представлены в столбце weight.

Я использовал параметры weightв функции lm, затем я перепроверил результат с другим кадром данных, что кадр данных temp.df«расширен». Но я обнаружил, что выходные данные lmотличаются для 2 фреймов данных.

Я неправильно истолковал параметры weightв функции lm, и может ли кто-нибудь дать мне знать, как правильно запустить регрессию (, то есть без расширения фрейма данных вручную )для набора данных, представленного как temp.df? Спасибо.

10
задан lokheart 22 April 2012 в 14:16
поделиться