如何解决如何在现有的相关矩阵上运行PCA,然后进行回归?
我目前已计算出调查受访者之间的成对相关性,并将其存储在数据框中。看起来像这样:
person_1 person_2 person_3
person_1. 0 1.5 1.8
person_2. 1.5 0 2.2
person_3. 1.8 2.2. 0
现在,我想运行PCA分析以查找每个响应的负荷。我有两个问题:
- 我应该使用哪个函数直接使用相关矩阵计算PC?
- 相关说明。然后,我想根据原始数据框架中该人的调查评分分数来回归每个受访者的负担。有没有办法将“分数”列合并回函数以运行回归?还是有其他方法可以进行回归/预测?
原始数据框是文本数据框,看起来像这样。然后,我运行句子之间的移词器距离以得出相关矩阵。
text. score
person_1. I like working at Apple 2
person_2 the culture is great -2
person_3. pandemic hits 5
谢谢!
解决方法
有了矩阵,有时R
中PCA的大多数已知算法都会遇到公差问题,因此它们会返回错误。我建议使用eigen()
函数的下一个方法,该方法复制PCA的本质。接下来的代码:
#Data
#Matrix
mm <- structure(c(0,1.5,1.8,2.2,0),.Dim = c(3L,3L),.Dimnames = list(c("person_1","person_2","person_3"),c("person_1","person_3")))
#Scores
df1 <- structure(list(text. = c("I like working at Apple","the culture is great","pandemic hits"),score = c(2L,-2L,5L)),row.names = c(NA,-3L),class = "data.frame")
下一个PCA代码:
#PCA
myPCA <- eigen(mm)
#Squares of sd computed by princomp
myPCA$values
输出:
[1] 3.681925 -1.437762 -2.244163
为了获得负载,我们使用以下方法:
#Loadings
myPCA$vectors
输出:
[,1] [,2] [,3]
[1,] -0.5360029 0.8195308 -0.2026578
[2,] -0.5831254 -0.5329938 -0.6130925
[3,] -0.6104635 -0.2104444 0.7635754
使用先前的输出,我们创建了一个用于回归的数据框:
#Format loadings
Vectors <- data.frame(myPCA$vectors)
names(Vectors) <- colnames(mm)
#Prepare to regression
#Create data
mydf <- cbind(df1[,c('score'),drop=F],Vectors)
输出:
score person_1 person_2 person_3
1 2 -0.5360029 0.8195308 -0.2026578
2 -2 -0.5831254 -0.5329938 -0.6130925
3 5 -0.6104635 -0.2104444 0.7635754
最后,回归代码是这样的:
#Build models
lm(score~person_1,data=mydf)
lm(score~person_2,data=mydf)
lm(score~person_3,data=mydf)
如果需要,可以将最后的模型保存在新对象中。一个例子是:
m1 <- lm(score~person_1,data=mydf)
summary(m1)
输出:
Call:
lm(formula = score ~ person_1,data = mydf)
Residuals:
1 2 3
1.411 -3.842 2.431
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -13.66 51.60 -0.265 0.835
person_1 -26.58 89.37 -0.297 0.816
Residual standard error: 4.76 on 1 degrees of freedom
Multiple R-squared: 0.08127,Adjusted R-squared: -0.8375
F-statistic: 0.08846 on 1 and 1 DF,p-value: 0.816
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。