2 votes

Les longueurs des variables diffèrent aide, régression lm et poids, les variables ont le même nombre de lignes

J'essaie d'exécuter une régression par carrés pondérés. Après avoir créé mes pondérations et essayé de les ajouter à ma fonction de régression, je reçois l'erreur suivante :

Erreur dans model.frame.default(formula = CO2_pc_cmice1 ~ GDP_pc_cmice1_C + :
les longueurs des variables diffèrent (trouvé pour '(poids)')

El lm a 31 lignes et les poids que j'ai créés sont également de 31, j'ai vérifié s'il y a des erreurs de calcul. NA dans l'un ou l'autre de ces cas et il n'y en a pas. Il y a quelques nombres négatifs, mais je serais surpris que ce soit le problème. J'ai exécuté la formule en utilisant à la fois na.action = na.omit y na.action = na.exclude

Je l'exécute également avec une régression avec un échantillon de 99 et j'obtiens le même problème.

Ma régression est la suivante

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"))

Poids créés

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

Et la régression avec les poids

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)

(J'ai également essayé avec na.exlude )

Quelqu'un peut-il m'aider ?

3voto

Thomas Lumley Points 641

El subset= L'argument des fonctions de modélisation R est appliqué à tous les arguments. Donc, il semble que votre vecteur de poids soit sous-ensemble. Comme il était déjà de la bonne longueur, vous obtenez une erreur.

Prenons l'exemple suivant : le cadre de données comporte 30 lignes, mais seulement 20 font partie du sous-ensemble à analyser, et je ne dispose que de 20 poids. Si j'utilise la méthode subset= les poids sont sous-évalués et il y a une erreur.

Au lieu de cela, vous pouvez utiliser subset() sur les données avant de les transmettre à lm() et ça marche.

> 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  
```

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X