Переменные длины различаются справкой, регрессией lm и весами, переменные имеют одинаковое количество строк - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь запустить регрессию взвешенных квадратов, после создания моих весов и попытки добавить их в свою функцию регрессии я получаю следующую ошибку:

Ошибка в model.frame.default ( формула = CO2_pc_cmice1 ~ GDP_pc_cmice1_ C +: переменная длина различается (найдено для '(веса)')

Модель lm имеет 31 строку, а веса, которые я создал, также 31, я проверил, есть ли NA s ни в одном из них, а их нет. Есть некоторые отрицательные числа, хотя я был бы удивлен, если бы это было проблемой. Я выполнил формулу, используя как na.action = na.omit, так и na.action = na.exclude

Я также запускаю это с регрессией с выборкой 99, и у меня такая же проблема.

Моя регрессия это

LinearCO2_lowerF <- (lm(CO2_pc_cmice1 ~ PolCiv_incPressFreedom_C + CorpInf_cmice1_C + 
                                        Gov_cmicepos1_C + LitGini_umice_C + 
                                        GDP_pc_cmice1_C + PopDensity_cmice1_C + 
                                        TradeOpen_cmice1_C + Urban_cmice1_C +
                                        poly(Oil_coal_umice_C,2), 
                                        data = mydata_completemice2, 
                                        subset = IncomeL == "L"))

Созданные веса

wtsco2low <- 1/fitted( lm(abs(residuals(LinearCO2_lowerF))~fitted(LinearCO2_lowerF)) )^2 

И регрессия с весами

LinearCO2_lowerFw <- lm(CO2_pc_cmice1 ~ GDP_pc_cmice1_C + PolCiv_incPressFreedom_C +
                                        CorpInf_cmice1_C + Gov_cmicepos1_C + 
                                        LitGini_umice_C + PopDensity_cmice1_C +
                                        TradeOpen_cmice1_C + Urban_cmice1_C + 
                                        poly(Oil_coal_umice_C,2), 
                                        data = mydata_completemice2, 
                                        subset = IncomeL == "L",
                                        weights = wtsco2low, 
                                        na.action = na.omit)

(Также пробовали с na.exlude)

Кто-нибудь может помочь?

1 Ответ

2 голосов
/ 10 июля 2020

Аргумент subset= функций моделирования R применяется ко всем аргументам. Итак, похоже, что ваш вектор весов разбивается на подмножество. Поскольку это уже была правильная длина, вы получите ошибку.

Рассмотрим этот пример: фрейм данных содержит 30 строк, но только 20 находятся в подмножестве для анализа, а у меня только 20 весов. Если я использую аргумент subset=, веса разделяются на подмножества и возникает ошибка.

Вместо этого вы можете использовать subset() для данных перед их передачей в lm(), и это сработает.

> d<-data.frame(y=rnorm(30),x=1:30)
> w<-rep(2,20)
> 
> lm(y~x,data=d, subset=x>10)

Call:
lm(formula = y ~ x, data = d, subset = x > 10)

Coefficients:
(Intercept)            x  
    -0.3161       0.0189  

> lm(y~x,data=d, subset=x>10, weights=w)
Error in model.frame.default(formula = y ~ x, data = d, subset = x > 10,  : 
  variable lengths differ (found for '(weights)')
> lm(y~x,data=subset(d, x>10),  weights=w)

Call:
lm(formula = y ~ x, data = subset(d, x > 10), weights = w)

Coefficients:
(Intercept)            x  
    -0.3161       0.0189  
<span class="math-container">```</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...