2017-02-19 93 views
0

我加載了內置的R數據「女性」,它具有平均美國女性身高和相應體重的表格數據。這個表有15行。使用這些數據我試圖預測高度的特定值的權重。我首先做了一個線性模型,並給出了新的值來預測。但R仍然拿出原始數據中的15位數字。R中預測功能的問題

我是迴歸的初學者,所以請告訴我,如果我在這裏做錯了什麼。

data() 
> women<-data.frame(women) 
> names(women) 
[1] "height" "weight" 
> plot(women$weight~women$height) 
> model<-lm(women$weight~women$height,data=women) 
> new<-data.frame(height=c(82,83,84,85)) 
> wgt.prediction<-predict(model,new) 
Warning message: 
'newdata' had 4 rows but variables found have 15 rows 
> wgt.prediction 
    1  2  3  4  5  6  7  8  9   10  11  12  13 
112.5833 116.0333 119.4833 122.9333 126.3833 129.8333 133.2833 136.7333 140.1833 143.6333 147.0833 150.5333 153.9833 
    14  15 
157.4333 160.8833 
+1

嘗試使用'model <-lm(體重〜身高,數據=女性)'建立你的模型並嘗試再次預測。 – AntoniosK

+0

謝謝。它的工作,從現在開始我會一直牢記這一點。 –

回答

2

請注意,推斷原始數據範圍之外的預測可能會給出較差的答案;然而,忽略那個嘗試以下。

首先,沒有必要使用data()data.framewomen無論如何將會提供給你,它已經是一個數據框。

另外,該模型的自變量在問題中指定爲women$height,但預測將其指定爲height。它不知道women$heightheight是相同的。

替換所有的代碼與此:

fo <- weight ~ height 
model <- lm(fo, women) 
heigths <- c(82, 83, 84, 85) 
weights <- predict(model, data.frame(height = heights)) 

,並提供:

> weights 
     1  2  3  4 
195.3833 198.8333 202.2833 205.7333 

爲了與預測(即weights)和model確定迴歸線圖中的數據(圖之後仍繼續):

plot(fo, women, xlim = range(c(height, heights)), ylim = range(c(weight, weights))) 
points(weights ~ heights, col = "red", pch = 20) 
abline(model) 

screenshot

雖然我們通常使用predict,給定的公式中使用$,使用原來的配方是計算這樣的預測的替代推出的問題:

model0 <- lm(women$weight ~ women$height) 
cbind(1, 82:85) %*% coef(model0) 

,並提供:

  [,1] 
[1,] 195.3833 
[2,] 198.8333 
[3,] 202.2833 
[4,] 205.7333 
+0

謝謝。有效。很好的解釋。 –

0
# example dataset 
dt = data.frame(mtcars) 

# build 2 models 
m1 = lm(mpg ~ wt, data = dt) 
m2 = lm(dt$mpg ~ dt$wt, data = dt) 

# new data (to predict) 
dt_new = data.frame(wt = c(3.1, 3.5, 4.2)) 

# check if predictions work 
predict(m1, dt_new) 
predict(m2, dt_new) 

第一個predict將工作,因爲模型的因變量爲wt,新數據有t他也是變量wt

第二predict不會起作用,因爲該模型的解釋變量是dt$wt所以每一個模型將回到dt時間得到變量wt。事實上,無論您的新數據集是什麼樣子,模型都會嘗試使用dt$wt進行預測。

+0

謝謝。偉大的見解。從來沒有想過這個。 –