เพื่อความเข้าใจของฉันเองฉันสนใจที่จะจำลองการคำนวณข้อผิดพลาดมาตรฐานของสัมประสิทธิ์โดยประมาณด้วยตนเองเช่นมาพร้อมกับlm()
ฟังก์ชั่นเอาท์พุทR
แต่ไม่สามารถตรึงมันได้ มีการใช้สูตร / การนำไปปฏิบัติอย่างไร
เพื่อความเข้าใจของฉันเองฉันสนใจที่จะจำลองการคำนวณข้อผิดพลาดมาตรฐานของสัมประสิทธิ์โดยประมาณด้วยตนเองเช่นมาพร้อมกับlm()
ฟังก์ชั่นเอาท์พุทR
แต่ไม่สามารถตรึงมันได้ มีการใช้สูตร / การนำไปปฏิบัติอย่างไร
คำตอบ:
โมเดลเชิงเส้นเขียนเป็น ที่หมายถึงเวกเตอร์ของการตอบสนองเป็นเวกเตอร์ของพารามิเตอร์ผลคงที่เป็นเมทริกซ์การออกแบบที่สอดคล้องกันซึ่งคอลัมน์เป็นค่าของตัวแปรอธิบายและเป็นเวกเตอร์ของข้อผิดพลาดแบบสุ่ม y β X ϵ
เป็นที่ทราบกันดีว่าประมาณการของมอบให้โดย (อ้างถึงเช่นบทความวิกิพีเดีย ) ดังนั้น [เตือน:สำหรับเวกเตอร์สุ่มและเมทริกซ์ที่ไม่ใช่แบบสุ่ม ]บีตา = ( X ' X ) - 1 X ' Y Var ( β ) = ( X ' X ) - 1 X '
ดังนั้น ที่สามารถรับได้โดย Mean Square Error (MSE) ในตาราง ANOVA σ 2
ตัวอย่างที่มีการถดถอยเชิงเส้นอย่างง่ายใน R
#------generate one data set with epsilon ~ N(0, 0.25)------
seed <- 1152 #seed
n <- 100 #nb of observations
a <- 5 #intercept
b <- 2.7 #slope
set.seed(seed)
epsilon <- rnorm(n, mean=0, sd=sqrt(0.25))
x <- sample(x=c(0, 1), size=n, replace=TRUE)
y <- a + b * x + epsilon
#-----------------------------------------------------------
#------using lm------
mod <- lm(y ~ x)
#--------------------
#------using the explicit formulas------
X <- cbind(1, x)
betaHat <- solve(t(X) %*% X) %*% t(X) %*% y
var_betaHat <- anova(mod)[[3]][2] * solve(t(X) %*% X)
#---------------------------------------
#------comparison------
#estimate
> mod$coef
(Intercept) x
5.020261 2.755577
> c(betaHat[1], betaHat[2])
[1] 5.020261 2.755577
#standard error
> summary(mod)$coefficients[, 2]
(Intercept) x
0.06596021 0.09725302
> sqrt(diag(var_betaHat))
x
0.06596021 0.09725302
#----------------------
เมื่อมีตัวแปรอธิบายเดียวโมเดลจะลดลงเป็น และ ดังนั้น และสูตรกลายเป็นโปร่งใสมากขึ้น ตัวอย่างเช่นข้อผิดพลาดมาตรฐานของความชันโดยประมาณคือ
> num <- n * anova(mod)[[3]][2]
> denom <- n * sum(x^2) - sum(x)^2
> sqrt(num / denom)
[1] 0.09725302
lm.fit
/ summary.lm
นั้นแตกต่างกันเล็กน้อยเพื่อความเสถียรและประสิทธิภาพ ...
สูตรสำหรับสิ่งเหล่านี้สามารถพบได้ในข้อความกลางในสถิติโดยเฉพาะอย่างยิ่งคุณสามารถค้นหาได้ในSheather (2009, บทที่ 5)จากที่ออกกำลังกายต่อไปนี้ยัง (หน้า 138)
รหัส R ต่อไปนี้คำนวณการประมาณค่าสัมประสิทธิ์และข้อผิดพลาดมาตรฐานด้วยตนเอง
dfData <- as.data.frame(
read.csv("http://www.stat.tamu.edu/~sheather/book/docs/datasets/MichelinNY.csv",
header=T))
# using direct calculations
vY <- as.matrix(dfData[, -2])[, 5] # dependent variable
mX <- cbind(constant = 1, as.matrix(dfData[, -2])[, -5]) # design matrix
vBeta <- solve(t(mX)%*%mX, t(mX)%*%vY) # coefficient estimates
dSigmaSq <- sum((vY - mX%*%vBeta)^2)/(nrow(mX)-ncol(mX)) # estimate of sigma-squared
mVarCovar <- dSigmaSq*chol2inv(chol(t(mX)%*%mX)) # variance covariance matrix
vStdErr <- sqrt(diag(mVarCovar)) # coeff. est. standard errors
print(cbind(vBeta, vStdErr)) # output
ซึ่งผลิตผลลัพธ์
vStdErr
constant -57.6003854 9.2336793
InMichelin 1.9931416 2.6357441
Food 0.2006282 0.6682711
Decor 2.2048571 0.3929987
Service 3.0597698 0.5705031
เปรียบเทียบกับผลลัพธ์จากlm()
:
# using lm()
names(dfData)
summary(lm(Price ~ InMichelin + Food + Decor + Service, data = dfData))
ซึ่งผลิตผลลัพธ์:
Call:
lm(formula = Price ~ InMichelin + Food + Decor + Service, data = dfData)
Residuals:
Min 1Q Median 3Q Max
-20.898 -5.835 -0.755 3.457 105.785
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -57.6004 9.2337 -6.238 3.84e-09 ***
InMichelin 1.9931 2.6357 0.756 0.451
Food 0.2006 0.6683 0.300 0.764
Decor 2.2049 0.3930 5.610 8.76e-08 ***
Service 3.0598 0.5705 5.363 2.84e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 13.55 on 159 degrees of freedom
Multiple R-squared: 0.6344, Adjusted R-squared: 0.6252
F-statistic: 68.98 on 4 and 159 DF, p-value: < 2.2e-16
solve()
ฟังก์ชั่น นี่จะค่อนข้างนานกว่านี้หากไม่มีพีชคณิตเมทริกซ์ มีวิธีสั้น ๆ ในการแสดงบรรทัดเฉพาะกับตัวดำเนินการพื้นฐานหรือไม่
ส่วนหนึ่งของคำตอบของ Ocram ผิด จริง:
และความคิดเห็นของคำตอบแรกแสดงว่าต้องการคำอธิบายเพิ่มเติมเกี่ยวกับความแปรปรวนของสัมประสิทธิ์:
ขอบคุณ Iไม่สนใจหมวกในรุ่นเบต้านั้น การหักเงินดังกล่าว{} ผลลัพธ์ที่ถูกต้องคือ:
1.(ในการรับสมการนี้ให้ตั้งอนุพันธ์อันดับหนึ่งของบนเท่ากับศูนย์สำหรับการขยายสูงสุด )
2.
3.
หวังว่ามันจะช่วย