使用R 上 ISLR 包中的每周資料集:
> head(Weekly)
Year Lag1 Lag2 Lag3 Lag4 Lag5 Volume Today Direction
1 1990 0.816 1.572 -3.936 -0.229 -3.484 0.1549760 -0.270 Down
2 1990 -0.270 0.816 1.572 -3.936 -0.229 0.1485740 -2.576 Down
3 1990 -2.576 -0.270 0.816 1.572 -3.936 0.1598375 3.514 Up
4 1990 3.514 -2.576 -0.270 0.816 1.572 0.1616300 0.712 Up
5 1990 0.712 3.514 -2.576 -0.270 0.816 0.1537280 1.178 Up
6 1990 1.178 0.712 3.514 -2.576 -0.270 0.1544440 -1.372 Down
嘗試使用邏輯回歸對*所有滯后變數和體積*進行方向回歸,并嘗試使用 R 上的“除此之外的所有”快捷方式來排除年份和今天:
logregall <- glm(Direction ~ . - Today - Year,
family=binomial(link='logit'), data = Weekly)
但是,當我嘗試使用同一個物件進行預測時,R 以某種方式給出了錯誤,即盡管不包括 Year,但我忘記將 Year 包括在“newdata”資料框中:
dataforpred <- Weekly[,2:7]
preds <- predict(object = logregall, newdata = dataforpred, type = "response")
> preds <- predict(object = logregall, newdata = dataforpred, type = "response")
Error in eval(predvars, data, env) : object 'Year' not found
但是當我通過手動鍵入所有變數進行回歸時,我得到了一個適用于 predict() 的擬合物件
logregall2 <- glm(Direction ~ Lag1 Lag2 Lag3 Lag4 Lag5 Volume,
family=binomial(link='logit'), data = Weekly)
preds <- predict(object = logregall2, newdata = dataforpred, type = "response")
> head(preds)
1 2 3 4 5 6
0.6086249 0.6010314 0.5875699 0.4816416 0.6169013 0.5684190
為什么會這樣?
uj5u.com熱心網友回復:
我沒有這個包,但我可以用 mtcars 資料集復制錯誤。我相信原因是因為您指定使用 洗掉一些列-
,所以該函式的作用是先洗掉這些列,然后再執行預測。它會出錯,因為它無法在newdata
.
因此,解決方案是手動為列分配任意值。
fit <- glm(vs~. -mpg-cyl,data=mtcars,
family=binomial(link='logit'))
dataforpred <- mtcars[,c(3:7,9:11)]
preds <- predict(object = fit, newdata = dataforpred, type = "response")
Error in eval(predvars, data, env) : object 'cyl' not found
#solution
dataforpred2 <- dataforpred%>%
mutate(mpg=NA_real_,
cyl=NA_real_)
preds2 <- predict(object = fit, newdata = dataforpred2, type = "response")
> preds2[1:5]
1 2 3 4 5
2.220446e-16 1.081386e-11 1.000000e 00 1.000000e 00 2.220446e-16
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/534817.html
標籤:r逻辑回归预测