执行引导程序时 eval(predvars, data, env) 出错
Error in eval(predvars, data, env) when doing Bootstrapping
我正在尝试拟合线性回归模型来检查 COVID 对交通量的影响。这是我的数据集,有 31 个观察值,我使用最小-最大缩放比例对其进行了归一化。
structure(list(Date = c("Jul-19", "Aug-19", "Sep-19", "Oct-19",
"Nov-19", "Dec-19", "Jan-20", "Feb-20", "Mar-20", "Apr-20", "May-20",
"Jun-20", "Jul-20", "Aug-20", "Sep-20", "Oct-20", "Nov-20", "Dec-20",
"Jan-21", "Feb-21", "Mar-21", "Apr-21", "May-21", "Jun-21", "Jul-21",
"Aug-21", "Sep-21", "Oct-21", "Nov-21", "Dec-21", "Jan-22"),
Average.Weekday.Daily.Traffic..Veh.day. = c(0.888327194565519,
0.957155270369628, 0.895880165623604, 0.942066917846049,
1, 0.877361842545003, 0.703731456172012, 0.898082382615854,
0.607783746512863, 0, 0.317277553217312, 0.560830088053501,
0.706464878860476, 0.747561202987416, 0.737478848514911,
0.800118905645907, 0.857496156674019, 0.809655982748128,
0.708357519023144, 0.926517717996616, 0.895669090512526,
0.856018630896471, 0.925733222167108, 0.825782121234508,
0.798338838875814, 0.533903939716948, 0.819263418220707,
0.84537340946109, 0.792752384269276, 0.64987564158039, 0.365423786054267
), Case = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00543532109442455,
0.00036093929142663, 5.66179280669224e-05, 0, 0.000134467579158941,
0.000339707568401534, 0.000127390338150575, 0.000113235856133845,
0, 0.000169853784200767, 0.000106158615125479, 0.00106158615125479,
0.0015286840578069, 0, 0, 0.00110404959730499, 0.00312814052569746,
0, 0.000268935158317881, 0, 0.00153576129881527, 1), Regulation = c(0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0.666666666666667, 0.333333333333333,
0.333333333333333, 0.166666666666667, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.333333333333333,
0.166666666666667, 0.333333333333333, 0.166666666666667,
0.166666666666667, 0.333333333333333, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.166666666666667,
0, 0, 0)), row.names = c(NA, -31L), class = "data.frame")
我的模型和输出:
m1 <- lm(Average.Weekday.Daily.Traffic..Veh.day. ~ Case + Regulation, data = data)
summary(m1)
Call:
lm(formula = Average.Weekday.Daily.Traffic..Veh.day. ~ Case +
Regulation, data = data)
Residuals:
Min 1Q Median 3Q Max
-0.35325 -0.00991 0.00712 0.05537 0.25166
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.89096 0.03061 29.104 < 2e-16 ***
Case -0.52838 0.13368 -3.952 0.000477 ***
Regulation -0.53484 0.08077 -6.622 3.49e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1301 on 28 degrees of freedom
Multiple R-squared: 0.6548, Adjusted R-squared: 0.6301
F-statistic: 26.55 on 2 and 28 DF, p-value: 3.413e-07
虽然自变量很重要,但我发现使用 Jarque-Bera 检验时误差不是正态分布的。我试图通过使用以下代码进行引导来修复它:
set.seed(4321)
m2 <- Boot(m1, R = 100, method = "residual")
summary(m2)
但是我收到一条错误消息,即使我在我的线性模型中包含了 Case 变量:Error in eval(predvars, data, env) : object 'Case' not found
谁能帮我解释一下为什么会出现这个错误以及如何解决?非常感谢您的帮助。
您的问题是由于 Boot
和 boot
使用 non-standard 的方式导致数据框名称与函数 data
之间的名称冲突评估。这就是为什么最好避免为您自己的对象使用这样的名称。您需要做的就是将 data
更改为 mydata
,问题就会消失。
library(car)
#> Loading required package: carData
mydata <- data
m1 <- lm(Average.Weekday.Daily.Traffic..Veh.day. ~ Case + Regulation, data = mydata)
set.seed(4321)
m2 <- Boot(m1, R = 100, method = "residual")
#> Loading required namespace: boot
summary(m2)
#>
#> Number of bootstrap replications R = 100
#> original bootBias bootSE bootMed
#> (Intercept) 0.89096 0.00248002 0.038248 0.89308
#> Case -0.52838 0.00555811 0.187270 -0.51458
#> Regulation -0.53484 -0.00088829 0.099065 -0.53900
由 reprex package (v2.0.1)
于 2022-04-03 创建
我正在尝试拟合线性回归模型来检查 COVID 对交通量的影响。这是我的数据集,有 31 个观察值,我使用最小-最大缩放比例对其进行了归一化。
structure(list(Date = c("Jul-19", "Aug-19", "Sep-19", "Oct-19",
"Nov-19", "Dec-19", "Jan-20", "Feb-20", "Mar-20", "Apr-20", "May-20",
"Jun-20", "Jul-20", "Aug-20", "Sep-20", "Oct-20", "Nov-20", "Dec-20",
"Jan-21", "Feb-21", "Mar-21", "Apr-21", "May-21", "Jun-21", "Jul-21",
"Aug-21", "Sep-21", "Oct-21", "Nov-21", "Dec-21", "Jan-22"),
Average.Weekday.Daily.Traffic..Veh.day. = c(0.888327194565519,
0.957155270369628, 0.895880165623604, 0.942066917846049,
1, 0.877361842545003, 0.703731456172012, 0.898082382615854,
0.607783746512863, 0, 0.317277553217312, 0.560830088053501,
0.706464878860476, 0.747561202987416, 0.737478848514911,
0.800118905645907, 0.857496156674019, 0.809655982748128,
0.708357519023144, 0.926517717996616, 0.895669090512526,
0.856018630896471, 0.925733222167108, 0.825782121234508,
0.798338838875814, 0.533903939716948, 0.819263418220707,
0.84537340946109, 0.792752384269276, 0.64987564158039, 0.365423786054267
), Case = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.00543532109442455,
0.00036093929142663, 5.66179280669224e-05, 0, 0.000134467579158941,
0.000339707568401534, 0.000127390338150575, 0.000113235856133845,
0, 0.000169853784200767, 0.000106158615125479, 0.00106158615125479,
0.0015286840578069, 0, 0, 0.00110404959730499, 0.00312814052569746,
0, 0.000268935158317881, 0, 0.00153576129881527, 1), Regulation = c(0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0.666666666666667, 0.333333333333333,
0.333333333333333, 0.166666666666667, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.333333333333333,
0.166666666666667, 0.333333333333333, 0.166666666666667,
0.166666666666667, 0.333333333333333, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.166666666666667,
0, 0, 0)), row.names = c(NA, -31L), class = "data.frame")
我的模型和输出:
m1 <- lm(Average.Weekday.Daily.Traffic..Veh.day. ~ Case + Regulation, data = data)
summary(m1)
Call:
lm(formula = Average.Weekday.Daily.Traffic..Veh.day. ~ Case +
Regulation, data = data)
Residuals:
Min 1Q Median 3Q Max
-0.35325 -0.00991 0.00712 0.05537 0.25166
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.89096 0.03061 29.104 < 2e-16 ***
Case -0.52838 0.13368 -3.952 0.000477 ***
Regulation -0.53484 0.08077 -6.622 3.49e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1301 on 28 degrees of freedom
Multiple R-squared: 0.6548, Adjusted R-squared: 0.6301
F-statistic: 26.55 on 2 and 28 DF, p-value: 3.413e-07
虽然自变量很重要,但我发现使用 Jarque-Bera 检验时误差不是正态分布的。我试图通过使用以下代码进行引导来修复它:
set.seed(4321)
m2 <- Boot(m1, R = 100, method = "residual")
summary(m2)
但是我收到一条错误消息,即使我在我的线性模型中包含了 Case 变量:Error in eval(predvars, data, env) : object 'Case' not found
谁能帮我解释一下为什么会出现这个错误以及如何解决?非常感谢您的帮助。
您的问题是由于 Boot
和 boot
使用 non-standard 的方式导致数据框名称与函数 data
之间的名称冲突评估。这就是为什么最好避免为您自己的对象使用这样的名称。您需要做的就是将 data
更改为 mydata
,问题就会消失。
library(car)
#> Loading required package: carData
mydata <- data
m1 <- lm(Average.Weekday.Daily.Traffic..Veh.day. ~ Case + Regulation, data = mydata)
set.seed(4321)
m2 <- Boot(m1, R = 100, method = "residual")
#> Loading required namespace: boot
summary(m2)
#>
#> Number of bootstrap replications R = 100
#> original bootBias bootSE bootMed
#> (Intercept) 0.89096 0.00248002 0.038248 0.89308
#> Case -0.52838 0.00555811 0.187270 -0.51458
#> Regulation -0.53484 -0.00088829 0.099065 -0.53900
由 reprex package (v2.0.1)
于 2022-04-03 创建