[英]R: Bootstrap Multiple Regression
我正在嘗試進行多元回歸分析,以找出水質對特定位置(又名 Guzzler)浮游生物豐度的影響。 我能夠運行我的模型和摘要,但是數據是非參數的,因此典型的摘要是不可靠的。 這主要是由於樣本量較小,因為它是在幾周的過程中完成的,並且每周進行一個樣本。
然后我在想這個的非參數版本可能是一個引導程序。 我以前在其他數據上運行過引導程序,但從未運行過多元回歸模型。 我似乎無法找到有關如何進行此操作的代碼,因此從我過去執行引導程序的方式開始。 我很好奇我需要編輯什么才能運行這個引導程序。
這是 dput(head(Guzzler1) 的輸出:
structure(list(Abundance = c(98L, 43L, 65L, 55L, 54L), Phospates = c(2L,
2L, 2L, 2L, 2L), Nitrates = c(0, 0.3, 0, 0.15, 0), pH = c(7.5,
8, 7.5, 7, 7)), .Names = c("Abundance", "Phospates", "Nitrates",
"pH"), row.names = c(NA, 5L), class = "data.frame")
這是我的模型和摘要:
Guzzler1model<-lm(Abundance ~ Phospates + Nitrates + pH, data=Guzzler1)
> summary(Guzzler1model)
Call:
lm(formula = Abundance ~ Phospates + Nitrates + pH, data = Guzzler1)
Residuals:
1 2 3 4 5
20.75 -4.25 -12.25 8.50 -12.75
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -80.25 209.62 -0.383 0.739
Phospates NA NA NA NA
Nitrates -135.00 90.02 -1.500 0.272
pH 21.00 28.87 0.727 0.543
Residual standard error: 20.41 on 2 degrees of freedom
Multiple R-squared: 0.5302, Adjusted R-squared: 0.06032
F-statistic: 1.128 on 2 and 2 DF, p-value: 0.4698
***請注意:我相信磷酸鹽有 NA,因為在這個特定位置每個值都等於 2。
這是我最初執行引導程序但不確定要更改什么的方式:
n=length(Guzzler1Abundance)
B = 1000
results = numeric(B)
for(b in 1:B){
i = sample(x = 1:n, size=n, replace=TRUE)
bootSample = Guzzler1Abundance[i]
thetahat= mean(bootSample)
results[b] = thetahat
}
非常感謝您!
我不太清楚你所說的非參數數據是什么意思,但我明白,你想從你的數據中獲取引導樣本並用它執行線性回歸。
一種可能的方法是
Guzzler1 <- structure(list(Abundance = c(98L, 43L, 65L, 55L, 54L), Phospates = c(2L,
2L, 2L, 2L, 2L), Nitrates = c(0, 0.3, 0, 0.15, 0), pH = c(7.5,
8, 7.5, 7, 7)), .Names = c("Abundance", "Phospates", "Nitrates",
"pH"), row.names = c(NA, 5L), class = "data.frame")
lines <- nrow(Guzzler1)
replicate(5, lm(Abundance ~ Phospates + Nitrates + pH,
data=Guzzler1[sample(lines, replace = TRUE),])$coefficients)
這將報告來自 5 個這樣的線性回歸的系數
> replicate(5, lm(Abundance ~ Phospates + Nitrates + pH,
+ data=Guzzler1[sample(lines, replace = TRUE),])$coefficients)
[,1] [,2] [,3] [,4] [,5]
(Intercept) 65.00000 145.000000 -408.0000 145.000000 -100
Phospates NA NA NA NA NA
Nitrates -73.33333 6.666667 -256.6667 6.666667 -110
pH NA -13.000000 66.0000 -13.000000 22
通過更改我的replicate
調用的第一個參數,可以任意選擇更高的 5 個復制的數量。 正如@IRTFM 預測和解釋的那樣,許多NA
值是由於數據稀缺所致。 隨着更多數據將被采樣,這將得到改善。
讓我們對 5000 個 bootstrap 樣本進行抽樣並研究硝酸鹽系數的分布:
reps <- replicate(5000, lm(Abundance ~ Phospates + Nitrates + pH,
data=Guzzler1[sample(lines, replace = TRUE),])$coefficients)
plot(table(reps["Nitrates",]))
plot(ecdf(reps["Nitrates",]))
quantile(reps["Nitrates",], c(.025, .25, .5, .75, .975), na.rm = TRUE)
磷酸鹽可以編輯成這樣,其中一個有變體數據:
boxplot(reps["(Intercept)",], reps["Nitrates",], reps["pH",]
, names = c("Intercept", "Nitrates", "pH"), ylab="bootstrapped coefficients")
abline(h=0, col="firebrick", lty=3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.