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

R语言计算Iris鸢尾花数据集协方差矩阵出现NA值问题

R语言计算Iris数据集协方差矩阵出现NA的解决方法

问题根源

Iris内置数据集总共仅有150行观测,你代码中两次使用1:1000作为行索引取值,会生成850条不存在的空值(NA),空值在后续矩阵运算中会传递,最终导致协方差矩阵全为NA。

修正方案

将所有行索引的取值范围调整为不超过150即可,修正后的完整代码如下:

library(ggplot2)
library(dplyr)

dim(iris)
head(iris)

numIris <- iris %>% 
  select_if(is.numeric)

plot(numIris[1:100,])

# 原错误写法:Xraw <- numIris[1:1000,]
Xraw <- numIris[1:150,]

plot(iris[1:150,-c(5)]) # 物种名称是第5列,此处排除该列
# 原错误写法:Xraw = iris[1:1000,-c(5)]
Xraw = iris[1:150,-c(5)] # 此处排除第5列即物种列
# 首先计算协方差需要对每列做去均值处理

X = scale(Xraw, scale = FALSE)

head(X)

Xs <- scale(Xraw, scale = TRUE)
head(Xs)

covMat  = (t(X)%*%X)/ (nrow(X)-1)
head(covMat)

你也可以直接调用R内置的cov()函数计算协方差矩阵,和手动计算的结果完全一致:

# 直接调用内置函数计算
covMat_builtin <- cov(Xraw)
head(covMat_builtin)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:36:07