You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何维度看似相同的两个R矩阵无法执行矩阵乘法?

解决矩阵乘法维度不兼容问题及LCA协变量概率可视化

错误原因

你遇到的non-conformable arguments错误是因为矩阵乘法的维度不匹配:

  • often是6行2列的矩阵(6个参数×2个潜在类别)
  • 你构造的pidmat是6行2列的矩阵,而矩阵乘法要求左矩阵的列数必须等于右矩阵的行数,这里2≠6,因此无法执行乘法。

正确构造pidmat矩阵

你的often矩阵行对应截距和协变量的5个虚拟变量(以第1级为参照组),因此需要为每个协变量水平(共6级)创建对应的设计向量,每个向量长度为6(匹配often的行数):

# 构造6×6的设计矩阵
pidmat <- matrix(0, nrow = 6, ncol = 6)
pidmat[, 1] <- 1  # 所有水平的截距项为1
# 为每个协变量水平设置对应的虚拟变量为1
pidmat[2, 2] <- 1  # 对应sui_thoughts_often2
pidmat[3, 3] <- 1  # 对应sui_thoughts_often3
pidmat[4, 4] <- 1  # 对应sui_thoughts_often4
pidmat[5, 5] <- 1  # 对应sui_thoughts_often5
pidmat[6, 6] <- 1  # 对应sui_thoughts_often6

或者更简洁的写法:

pidmat <- diag(6)
pidmat[, 1] <- 1

计算类别概率并可视化

现在可以正常执行矩阵乘法,然后计算每个协变量水平下的潜在类别概率:

# 计算指数项
exb <- exp(pidmat %*% often)
# 归一化得到概率(每行和为1)
probs <- exb / rowSums(exb)

# 转换为数据框用于可视化
probs_df <- as.data.frame(probs)
probs_df$covariate_level <- factor(1:6, labels = paste("Level", 1:6))
colnames(probs_df) <- c("Class_1", "Class_2", "Covariate_Level")

# 转为长格式方便绘图
library(tidyr)
probs_long <- pivot_longer(probs_df, cols = c(Class_1, Class_2), 
                           names_to = "Latent_Class", values_to = "Probability")

# 绘制分组柱状图
library(ggplot2)
ggplot(probs_long, aes(x = Covariate_Level, y = Probability, fill = Latent_Class)) +
  geom_col(position = "dodge", width = 0.7) +
  labs(title = "LCA潜在类别概率随协变量水平变化",
       x = "协变量水平", y = "概率") +
  theme_minimal()

内容的提问来源于stack exchange,提问作者Plima167

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:53:35