Вопрос по r, linear-regression, weighted – «Взвешенная» регрессия в R

10

Я создал скрипт, подобный приведенному ниже, для выполнения чего-то, что я назвал & quot; взвешенным & quot; регрессии:

<code>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)
</code>

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

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

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

увидетьsummary выходной, они разные lokheart
Этот вопрос следует перенести в Cross Validated. Carlos Cinelli
но 2 кадра данных относятся к одному и тому же набору данных (1178 строк данных), только разные по представлению,temp.df представить 1178 строк данных, используя 200 строк. Они должны представлять одно и то же значение p, если одна и та же регрессия выполняется в 2 кадрах данных. Мне нужно исправить это, потому что в моем случае у меня может быть более 1 миллиона строк, если я не используюweight метод, мне может не хватить памяти, чтобы хранить их все. lokheart
Коэффициенты одинаковы, но значения р действительно разные. Я думаю, что происходит следующее. Когда вы расширяете данные, наблюдения считаются независимыми: поскольку данных много, вы можете быть очень уверены в оценках, а значения p низкие. При использовании весов количество наблюдений остается небольшим, а значения p высокими. Vincent Zoonekynd
Две регрессии дают одинаковые результаты для меня. Vincent Zoonekynd

Ваш Ответ

1   ответ
13

что степени свободы не суммируются должным образом, чтобы получить правильную статистику Df и среднего квадрата. Это исправит проблему:

temp.df.lm.aov <- anova(temp.df.lm)
temp.df.lm.aov$Df[length(temp.df.lm.aov$Df)] <- 
        sum(temp.df.lm$weights)-   
        sum(temp.df.lm.aov$Df[-length(temp.df.lm.aov$Df)]  ) -1
temp.df.lm.aov$`Mean Sq` <- temp.df.lm.aov$`Sum Sq`/temp.df.lm.aov$Df
temp.df.lm.aov$`F value`[1] <- temp.df.lm.aov$`Mean Sq`[1]/
                                        temp.df.lm.aov$`Mean Sq`[2]
temp.df.lm.aov$`Pr(>F)`[1] <- pf(temp.df.lm.aov$`F value`[1], 1, 
                                      temp.df.lm.aov$Df, lower.tail=FALSE)[2]
temp.df.lm.aov
Analysis of Variance Table

Response: bp
            Df Sum Sq Mean Sq F value   Pr(>F)   
age          1   8741  8740.5  10.628 0.001146 **
Residuals 1176 967146   822.4        

Сравнить с:

> anova(temp.df.expand.lm)
Analysis of Variance Table

Response: bp
            Df Sum Sq Mean Sq F value   Pr(>F)   
age          1   8741  8740.5  10.628 0.001146 **
Residuals 1176 967146   822.4                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Я немного удивлен, что это не часто встречается на R-help. Либо это, либо мои способности к разработке стратегии поиска ослабевают с возрастом.

Да. Моя точка зрения была на самом деле, что вам нужно было разделить суммы квадратов на правильный Df, а затем пересчитать F-статистику иPr(>F).
Были синтаксические ошибки (несоответствующие обратные тики), которые у меня не было времени, чтобы исследовать. Спасибо за попытку исправить это.
В верхнем блоке кода есть ошибка (temp.df.lm.aovn Sq' <- temp.df.lm.aov$'Sum Sq'/temp.df.lm.aov$Df). Обратите внимание, что код не решил проблему (таблицы ANOVA отличаются).
Я попытался исправить. Пожалуйста, убедитесь, что вы одобряете. Обратите внимание, что я использовал подмножество / индексацию (т.е.[1]) & amp; неясно, каков ваш стиль / общий характер, как вы, возможно, хотели, чтобы это было. (Однако вывод теперь соответствует выводу, который вы хотели.)
Пожалуйста. Исправленный код не соответствует правильной версии. Например, p = .18! = P = .001; Я думал, что вы пытаетесь показать, что если df были вычислены правильно,anova() выходы будут совпадать. Разве это не ваша точка зрения?

Похожие вопросы