hlo1 <- c(beta1hat-sigma*solve(t(x1)%*%x1)*qnorm(0.025)) Error in sigma * solve(t(x1) %*% x1) : non-numeric argument to binary operator >
时间: 2024-02-13 07:07:30 浏览: 93
这个错误通常表示sigma的类型不是数值型,无法与其他数值型变量进行乘法运算。请检查sigma的类型,确保它是数值型变量,并且已经被成功计算出来。如果sigma是一个矩阵或数组,可以使用as.numeric()函数将其转换为数值型变量。例如,可以在计算hlo1之前先将sigma转换为数值型变量:
```
sigma <- as.numeric(sqrt(sum((y - x1 %*% beta1hat - x2 %*% beta2hat)^2) / (n - 2 - 1)))
hlo1 <- c(beta1hat - sigma * solve(t(x1) %*% x1) * qnorm(0.025))
```
这样就可以避免这个错误了。
相关问题
Error: unexpected SPECIAL in "hlo1 <- beta1hat-sigma*%*solve(t(x1)%"
这个错误是因为在计算hlo1时,表达式中多了一个“%*”符号,导致语法错误。在solve函数和t函数之间不需要使用“%*”符号,因为它们本身就会进行矩阵运算。因此,可以将“%*”符号删除,代码如下:
```
rm(list=ls())
k <- 1000
n <- 100
alp <- 0.05
test.res <- numeric(k)
sigma <- 1 # 定义模型误差的标准差
for(i in 1:k){
x1<- rnorm(n,0,0.5)
x2<- rbinom(n,1,prob=0.5)
y <- 2*x1+3*x2
eb <- rnorm(n,0,1)
beta1hat <- solve(t(x1)%*%x1)%*%t(x1)%*%y
beta2hat <- solve(t(x2)%*%x2)%*%t(x2)%*%y
}
hlo1 <- beta1hat-sigma*solve(t(x1)%*%x1)*qnorm(0.025)
hup1 <- beta1hat+sigma*solve(t(x1)%*%x1)*qnorm(0.025)
hlo2 <- beta2hat-sigma*solve(t(x2)%*%x2)*qnorm(0.025)
hup2 <- beta2hat+sigma*solve(t(x2)%*%x2)*qnorm(0.025)
```
这样修改后,代码应该能够正常运行了。
hup1 <- vector(beta1hat+sigma1*solve(t(x1)%*%x1)*qnorm(0.025)) Error in vector(beta1hat + sigma1 * solve(t(x1) %*% x1) * qnorm(0.025)) : invalid 'mode' argument In addition: Warning message: In beta1hat + sigma1 * solve(t(x1) %*% x1) * qnorm(0.025) : Recycling array of length 1 in vector-array arithmetic is deprecated. Use c() or as.vector() instead.
在你提供的代码中,`hup1 <- vector(beta1hat+sigma1*solve(t(x1)%*%x1)*qnorm(0.025))` 出现了两个问题。
第一个问题是 `vector()` 函数的错误。这个函数是用来创建由重复元素组成的向量的,而你需要用 `c()` 函数将计算结果连接成向量。因此,应该将 `vector()` 替换为 `c()`。
第二个问题是一个警告信息,它表明在向量间的运算中,向量长度不匹配会导致数组重复。警告信息建议使用 `c()` 或 `as.vector()` 函数来解决这个问题。因此,你需要使用 `c()` 函数来将计算结果连接成一个长度为 k 的向量。
综上所述,修改后的代码如下:
```
hup1 <- c(beta1hat+sigma1*solve(t(x1)%*%x1)*qnorm(0.025))
hup1 <- c(hup1, rep(0, k-length(hup1)))
```
同样的,对于 `hlo2` 和 `hup2` 的计算也需要做相应的修改。
阅读全文