【问题标题】:Multivariate regression with glm: logical subscript too long使用 glm 进行多元回归:逻辑下标太长
【发布时间】: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 矩阵,问题仍然存在。
  • 您需要XY 的向量才能运行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 代替。它不仅可以接受矩阵输入,还可以输出系数矩阵而不是向量。我以为这就是广义线性模型应该做的?

标签: r multivariate-testing


【解决方案1】:

多元 GLM

GLM 处理多个因变量。您可以像下面的代码一样关联单个列,但不能同时进行。是可以多元的独立数据。

使用Y[1,] 而不是Y

fit = glm(Y[1,]~t(X),family = gaussian())

此外,上述行使用转置 t(X) 而不是 X,因为函数 GLM 会将行解释为不同的测量值。

MANOVA/MANCOVA/线性判别分析

在您的情况下,您似乎使用的是高斯分布错误。对于这种特殊情况,有一种方法可以处理多个因变量。它是 MANOVA(如果自变量是一个因素)或 MANCOVA(如果自变量是连续的)。您可以在 R 中将其建模为 fit = manova(t(Y)~t(X))

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2014-06-20
    • 2012-09-10
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多