在R中为矩阵索引赋值Beta_1估计值遇报错,如何修复?
修复R代码中的系数提取错误
错误核心原因
modbeta$coefficients是lm模型返回的命名向量,不是函数,你用(X[,1])这种函数调用的语法去取值,就会触发attempt to apply non-function错误。
修复方案
1. 修正系数提取方式
有两种标准方法可以提取X[,1]对应的回归系数:
- 直接通过向量索引取值:
lm(Y~X[,1])的系数向量中,第一个元素是截距项,第二个元素就是X[,1]对应的系数,所以用modbeta$coefficients[2] - 使用R官方推荐的
coef()函数:coef(modbeta)[2],可读性更强,是提取模型系数的标准操作
2. 优化矩阵索引赋值
你的beta_1_hat是100行的矩阵,用矩阵索引beta_1_hat[i, 1]比列表索引[[i]]更符合数据结构逻辑,避免混淆。
3. 修正标准差参数逻辑
rnorm()的sd参数需要传入标准差,你之前写的sd=sigma^2是错误的(虽然sigma=1时结果一致,但逻辑上sigma本身就是标准差,应改为sd=sigma)
完整修正代码
library(MASS) beta_1_hat <- matrix(0, nrow=100) for(i in seq(1,100, by=1)) { mu=rep(0, 3) Sigma=matrix(c(1,0.5,0.5,0.5,1,0.5,0.5,0.5,1),nrow=3) beta_0=1 beta_1=2 beta_2=3 beta_3=0 Beta=matrix(c(beta_0,beta_1,beta_2,beta_3),nrow=4) n=1000 X<- mvrnorm(n , mu,Sigma) X_extended=cbind(rep(1,n), X) sigma=1 epsilon<-matrix(rnorm(n, sd=sigma), nrow=n) # 修正sd参数 Y<- X_extended%*%Beta+epsilon modbeta <- lm(Y~X[,1]) beta_1_hat[i, 1] <- coef(modbeta)[2] # 修正系数提取与索引赋值 } print(beta_1_hat)
内容的提问来源于stack exchange,提问作者Cole Hendrickson
相关产品推荐
相关产品推荐

