2017-02-19 83 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

谢谢。伟大的见解。从来没有想过这个。 –