R——对predict函数中的level参数含义的困惑

3
我使用Excel计算了预测值的置信区间,在95%置信水平下,为了计算,我使用了函数,这是一个在每一侧分别为2.5%和2.5%的分裂点,其中6是自由度。

但是在R中,当我给出时,predict函数给出了不同的区间范围,然而给出时,它给出的答案与Excel相同。

因此,在predict中,当您给出时,它会在每个侧面上分别取2.5%。

但是所有这些网站,例如example,另一个example,都说我们正在寻找95%的置信区间,给出公式level=0.95(这意味着每侧有5%的分割),但那是90%,对于95%的区间,级别应该是0.975。

发生了什么?我可能有点困惑。


编辑:

predict(model, data.frame(c= 12.75, p= 6, f=8), level = 0.975, interval = "confidence")

这里的模型是一个 多元线性回归

数据:

y <- c(85.10,106.30,50.20,130.60,54.80,30.30,79.40,91.00,135.40,89.30) # Total Sales

c <- c(8.50,12.90,5.20,10.70,3.10,3.50,9.20,9.00,15.10,10.20) # production cost

p <- c(5.10,5.80,2.10,8.40,2.90,1.20,3.70,7.60,7.70,4.50) # Promotion cost

f <- c(4.70,8.80,15.10,12.20,10.60,3.50,9.70,5.90,20.80,7.90) #First year box office

model <- lm(y ~ c + p + f)

Excel:

我已经在Excel中用黄色标出了预测。

问题是,使用Excel时,我得到的预测值为106.72,上限为119.35,下限为93.36,=tinv(5%,6)

使用R时,我得到的预测值为106.72,上限为117.7,下限为95.65,level=0.95

使用level=0.975时,我得到了与Excel完全相同的值。


在Excel中:

=tinv(5%,6) = 2.45``Variance = 5.46

106.72 +/- tvalue*variance119.35 93.36

在R中:

se.ci <- predi$se.fit # 方差: 4.518

alpha <- qt((1-0.95)/2,6) # 值:-2.45

predi$fit[1] + c(alpha, -alpha) * se.ci # 给我117.77165 95.65941

如您所见,tstat值相同,但预测结果不同。

但是当我这样做时:

alpha <- qt((1-0.975)/2,6) # 值:-2.968

我得到的是93.30182 120.12924,与Excel相同! (在predict中使用level=0.975可以得到答案,因此产生了混淆)


你是如何在Excel中计算预测区间的?请看下面我的回答。使用R计算的区间是(当然)正确的。 - Marco Sandri
在Excel中,我计算了方差和tinv值http://www2.cedarcrest.edu/academic/bio/hale/biostat/session19links/tinv.html,我确信是正确的,并使用公式106.72 +/- tinv * 方差。 - SamFlynn
你是在使用 T.INV Excel函数还是 TINV 函数?这两个函数的工作方式不同。 - Marco Sandri
1个回答

1
在简单线性回归中,给定x*的y的预测区间为: enter image description here
其中sy由以下公式给出: enter image description here 让我们考虑以下示例:
df <- faithful
n <- nrow(df)
names(df) <- c("y","x")
mx <- mean(df$x)
sx <- sd(df$x)

mod = lm(y ~ x, data=df)
yhat <- predict(mod)

xnew <- 80
newdata = data.frame(x=xnew)

alpha <- 0.05
(ypred <- predict(mod, newdata, interval="predict", level = 1-alpha))

#### 95% Prediction interval #####
      fit      lwr      upr
1 4.17622 3.196089 5.156351

我们可以使用上述公式“手动”计算出这个区间:
SE <- sqrt(sum((df$y-yhat)^2)/(n-2))*sqrt(1+1/n+(xnew-mx)^2/((n-1)*sx^2))   
tval <- qt(1-alpha/2,n-2)
c(ypred[1]-tval*SE, ypred[1]+tval*SE)

#### 95% Prediction interval #####
[1] 3.196089 5.156351

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接