2016-05-16 43 views
0

我有一個包含100853個觀察值的大數據集。我想確定我的模型中的兩個變量之間的關係,即人均支出(ln_MPCE)的日誌和花在食物(w_food)上的支出的份額。爲此,我運行二次迴歸和非參數迴歸。然後,我使用下面的代碼繪製數據和擬合值。但是,這些圖表只是沒有繪製正確。我沒有得到2條曲線,而是得到了一系列的迴歸。請告訴我我哪裏錯了。在此先感謝您的幫助。使用R中的直線函數做出的迴歸擬合值的曲線圖不會右轉。

model.par <- lm(w_food~ ln_MPCE+ I(ln_MPCE^2), data=share_efm_food_09) 
summary(model.par) 
library(np) 
model.np <- npreg(w_food~ ln_MPCE, regtype="ll",bwmethod="cv.aic",data=share_efm_food_09) 

pdf("food_Ln_MPCE_curve.pdf" , width=11, height=8) 
plot(share_efm_food_09$ln_MPCE, share_efm_food_09$w_food, xlab="ln_MPCE",ylab="w_food", cex=.1) 
lines(share_efm_food_09$ln_MPCE, fitted(model.np), lty=1, col="blue") 
lines(share_efm_food_09$ln_MPCE, fitted(model.par), lty=1, col="red") 
dev.off() 
+2

你應該試圖提供某種最小的,[重複的例子]的(http://stackoverflow.com/questions/5963269/how-to-make包括樣本輸入數據,所以我們可以運行代碼來查看發生了什麼。 – MrFlick

回答

2

發生了什麼事是,數據不被x值排序,讓線來回走,取決於下一個x值恰好是在數據幀的當前排序。按x值排序數據幀以獲得您期望的行。

這裏的一個示例內置mtcars數據幀:在默認順序

m1 = lm(mpg ~ wt + I(wt^2), data=mtcars) 

劇情數據:

with(mtcars, plot(wt, mpg)) 
lines(mtcars$wt, fitted(m1), col="blue") 

enter image description here

添加預測線與由wt排序的數據:

newdat = data.frame(wt=mtcars$wt, mpgpred=fitted(m1)) 
newdat = newdat[order(newdat$wt),] 

lines(newdat, col="red", lwd=4) 

enter image description here

而不是使用fitted,你也可以使用predict,將從您的模型返回預測值自變量的值的任意組合。然後,可以提供通過wt排序的原始數據幀:

m1 = lm(mpg ~ wt + I(wt^2), data=mtcars) 

with(mtcars, plot(wt, mpg)) 
lines(mtcars$wt[order(mtcars$wt)], predict(m1, newdata=mtcars[order(mtcars$wt),]), col="red") 
+0

謝謝eipi,你搖滾:-) – Ridhima