【发布时间】:2017-03-29 08:55:48
【问题描述】:
我正在自学多元回归,我正在尝试模拟一个多元随机变量并构建一个广义线性模型来拟合它。 这是我的代码:
#Clear Previous
rm(list=ls())
cmp = 2 #Number of components in sample
n = 10 #Number of simulated data points
B = matrix(c(1,2,3,4), nrow=2,byrow=TRUE) #Coefficient matrix
#Simulate model
X = matrix(rep(0,2*n), nrow=2,byrow=TRUE) #Initiate independent matrix
Y = matrix(rep(0,2*n), nrow=2,byrow=TRUE) #Initiate response matrix
for (j in 1:cmp){
X[j,] = rnorm(n) #independent data
e = rnorm(n) #error term
Y[j,] = B[j,1]+ B[j,2]*X[j,] + e
}
#Linear Regression
fit = glm(Y~X,family = gaussian())
fit
这会在函数 glm 中产生以下错误:
Error in x[good, , drop = FALSE] : (subscript) logical subscript too long
我很不确定问题出在哪里。
【问题讨论】:
-
您是否有意在矩阵中设置两行十列?您想按行还是按列进行回归?
-
@nya 这是故意的。我尝试将其设为列向量,即 X 和 Y 都是 10x2 矩阵,问题仍然存在。
-
您需要
X和Y的向量才能运行glm:“典型的预测器具有响应〜术语的形式,其中响应是(数字)响应向量,术语是一系列指定响应的线性预测器的术语。” -
@nya 我明白了。但我不确定我是否理解。如果我打算从预测向量 X = (x1,x2) 回归响应向量 Y = (y1, y2),并且我说 10 次测量,那么“数据”将是 10x2 响应矩阵和 10x2 in独立人士。所以如果 glm 只接受向量输入,我怎么能合并两个变量的所有数据呢?还是我必须明智地做到这一点?例如: Z = c(Y[,1],Y[,2]) W = c(X[,1],X[,2]) fit = glm(Z~W,family = gaussian())有效,但我不确定如何解释结果。
-
好吧,事实证明我应该使用函数 lm 代替。它不仅可以接受矩阵输入,还可以输出系数矩阵而不是向量。我以为这就是广义线性模型应该做的?