0

早上好,

我正在尝试使用 R 在我的线性模型上实现白色测试。我不知道如何编写 R 代码来实现白色测试。

价格:房价,百万美元

Bdrms : 卧室数量

地块大小:以平方英尺为单位的地块大小

Sqrft:房子的面积,以平方英尺为单位

线性模型如下:

#Linear Model
LinearModel.1 <- lm(PRICE ~ LOTSIZE + LOTSIZE^2 + SQRFT + BDRMS, data=Dataset)
summary(LinearModel.1)


#Breusch-Pagan Test
library(lmtest)
bptest(LinearModel.1, varformula = NULL, studentize = TRUE, data = Dataset)


#White Test
?????????

感谢您的回答亲切的问候,

4

5 回答 5

5
m <- LinearModel.1
data <- Dataset
u2 <- m$residuals^2
y <- fitted(m)
Ru2<- summary(lm(u2 ~ y + I(y^2)))$r.squared
LM <- nrow(data)*Ru2
p.value <- 1-pchisq(LM, 2)
p.value

如果 p.value < 0.05,则 Ho(不存在异方差)在 5% 显着性水平上被拒绝,并且您得出结论认为模型中存在异方差

于 2015-01-20T15:02:03.840 回答
4

白色测试已在“bstats”包中实现。安装并加载此包后,只需键入即可对线性模型对象执行白色测试

white.test(lm0)

有关说明和示例,请参阅此页面。

于 2013-05-15T11:23:12.953 回答
2

White's Test 现在在package的white_lm函数中实现;skedastichttps://www.rdocumentation.org/packages/skedastic/versions/1.0.0/topics/white_lm

于 2020-09-16T20:15:32.850 回答
1

测试可以使用包中的bptest函数来实现lmtest,如下:

reg <- lm(y~x1+x2) # storing regression
bptest(reg, ~ poly(fitted(reg) , 2))

请注意,上面实现了测试的特殊形式,它使用 的拟合值y及其平方值(因此在 中的选项poly(fitted(reg) , 2)bptest作为第二阶段方程中的回归量。正常形式使用所有回归量、它们的平方值和交互作为第二阶段回归的元素,代价是失去自由度。要实现该表单,您需要替换~ poly(fitted(reg) , 2)~ x1*x2 + x1*x3 .... 如果你有很多回归器,使用另一个包可能更容易。

于 2020-11-26T14:20:33.500 回答
0

我编写了一个函数来重现hendry2007econometricR中 White 测试的两种方法。

test_white(mod, dat, resi2 ~ x1 + x2 + I(x1^2) + I(x2^2), 3)

其中平方残差在所有回归量及其平方上回归。自由度是参数的数量(比如说k)。

test_white(mod, dat, resi2 ~ x1 + x2 + I(x1^2) + I(x2^2) + I(x1 * x2), 6)

其中平方残差对所有回归量、它们的平方和它们的叉积进行回归。自由度为k * (k + 1) / 2

test_white <- function(mod, dat, f, df1, prob){
  if(missing(prob)){prob = 0.05}

  dat %<>% mutate(resi2 = mod$residuals^2)

  stat <-
    lm(f, data = dat) %>%
    {summary(.)$r.squared} %>%
    {. * nrow(dat)}

  p_value <- 
    stat %>%
    {1 - pchisq(., df1)}

  results <- tibble(
    whi = "White", stat = stat, df1 = df1, df2 = nrow(dat) - df1,  
    p_value = p_value,prob = prob, if_accept = {p_value <= prob}, 
    if_pass = {p_value >= prob}
  )
  return(results)
}

我认为@Mike K 的做法还可以,这实际上是为了测试基于lm比例位置图的模型是否重要。比例位置图是指您在绘制对象的诊断时按.lmplot.lm(model, which = 3)

于 2020-04-05T09:48:33.963 回答