(资料图片仅供参考)
#此代码是我手动搭建的
#除KMO和bar检验外未使用因子分析的专用工具包(factor_analyzer)
#此代码仅能解决需要输出两个潜变量的因子分析问题
#如需将此代码放在自己个人社交平台,请给个引用"B站 耿大哥讲算法"
import numpy as npimport as pltfrom sklearn import preprocessingimport matplotlib;("font",family='Microsoft YaHei')from import normalizefrom factor_analyzer import calculate_kmo,calculate_bartlett_sphericity#读取数据&校准化# 指标1 指标2 指标3 指标4指标5 指标6 指标7 指标8data=([[,,,,,,,], #样本1 [,,,,,,,], #样本2 [,,,,,,,], #样本3 [,,,,,,,], #样本4 [,,,,,,,], #样本5 [,,,,,,,], #样本6 [,,,,,,,], #样本7 [,,,,,,,], #样本8 [,,,,,,,], #样本9 [,,,,,,,], #样本10 [,,,,,,,], #样本11 [,,,,,,,], #样本13 [,,,,,,,], #样本13 [,,,,,,,]])#样本14# 对样本Z-score标准化X=(data,axis=0)#KMO和barlett检验bartlett,KMO=calculate_bartlett_sphericity(data),calculate_kmo(data)[1]print('-'*54);print('KMO和bartlett检验')print('KMO='+str('%.3f'%calculate_kmo(data)[1]),end='\t')if KMO<=1 and KMO>=:print('非常好')elif KMO< and KMO>=:print('好')elif KMO< and KMO>=:print('一般')elif KMO< and KMO>=:print('差')elif KMO< and KMO>=:print('很差')else:print('不能接受')print('bartlett 统计量='+str('%.3f'%bartlett[0]))print('bartlett 自由度='+str(int([1]*([1]-1)/2)))print('bartlett P值='+str('%.3f'%bartlett[1]))#求Z-score标准化后的样本间的协方差矩阵CC=(,X)/([0])#求协方差矩阵C的特征值λ和特征向量V0λ,V0=(C);V0=(V0)#协方差矩阵C的特征向量施密特正交化和单位化a=[V0[:,i] for i in range([1])]def b(i): if i==0:return a[0] else:return a[i]-sum(float(a[i].T*b(k)/(b(k).T*b(k)))*b(k) for k in range(i))V1=b(0)for i in range(1,[1]):V1=_stack((V1,b(i)))V1=normalize((V1),axis=0,norm='l2')# 按照协方差矩阵C的特征值大小对特征向量排序tezhenggen1=[i for i in λ];(reverse=True)V=(shape=([1],[1]))for i in range([1]): for j in range([1]):V[i,j]=V1[i,list(λ).index(tezhenggen1[j])]# 计算载荷矩阵A(两列)和得分系数矩阵S0(两列)Z=((shape=([1],[1])))for i in range([1]):Z[i,i]=1/(tezhenggen1[i]**)A,S0=(V*)[:,0:2],(V*Z)[:,0:2]# 对载荷矩阵A施以二维正交旋转#(1)定义载荷间的总方差函数ff(θ)def ff(a): B=(A)*([[(a),-(a)],[(a),(a)]]) zongfangcha=0 for k in range([1]): junzhi=sum(B[i,k]**2/sum(A[i,j]**2 for j in range([1])) for i in range([0]))/[0] zongfangcha+=sum((B[i,k]**2/sum(A[i,j]**2 for j in range([1]))-junzhi)**2 for i in range([0])) return zongfangcha#(2)计算并修正载荷矩阵的旋转解和得分系数矩阵x=(0,/2,);y=[ff(i) for i in x];θ=x[(max(y))]for i in range(4): θ+=i*/2 Q=([[(θ),-(θ)],[(θ),(θ)]]) B=A*Q list0=[abs(B[j,0]) for j in range([0])] list1=[abs(B[j,1]) for j in range([0])] a,b=B[(max(list0)),0],B[(max(list1)),1] if a>0 and b>0:break else:passQ=([[(θ),-(θ)],[(θ),(θ)]])B=A*Q;S=S0*Qlist2=[(*B)[j,j] for j in range([1])]if (max(list2))==0:passelse:B=B*([[0,1],[1,0]]);S=S*([[0,1],[1,0]])(reverse=True)#输出旋转角度θ和载荷间的总方差最大值max(ff)print('-'*54)print('旋转角度θ='+str('%.2f'%(θ*180/))+'°',end='\t')print('载荷间的总方差='+str('%.3f'%ff(θ)))#输出使载荷间的总方差函数达到最大的旋转矩阵Qprint('旋转矩阵Q')for i in range([0]): for j in range([1]):print('%.3f'%Q[i,j],end='\t') print()print('旋转方法:Kaiser 标准化最大方差法')#输出载荷矩阵的旋转解print('-'*54);print('载荷矩阵的旋转解')print('指标|组件',end='\t')for i in range([1]):print('潜变量f'+str(i+1),end='\t')print('共同度')for i in range([0]): print('指标'+str(i+1),end='\t') for j in range([1]):print('%.3f'%B[i,j],end='\t') print('%.3f'%sum(B[i,k]**2 for k in range([1])),end='\t') print()print('总贡献',end='\t')for i in list2:print('%.3f'%i,end='\t')print('%.3f'%sum(list2));print('-'*53)#输出旋转后的成分得分系数矩阵print('成分得分系数矩阵(旋转后)')print('指标|组件',end='\t')for i in range([1]):print('潜变量f'+str(i+1),end='\t')print()for i in range([0]): print('指标'+str(i+1),end='\t') for j in range([1]):print('%.3f'%S[i,j],end='\t') print()#计算各样本的综合得分并排序print('-'*54)print('各样本的得分及排序');print('样本|fi',end='\t')for i in range([1]):print('潜变量f'+str(i+1),end='\t')print('综合变量f',end='\t');F=X*Sprint('按f1排序',end='\t');print('按f2排序',end='\t');print('按f排序')def xvhao(x): list3=[i for i in x] (reverse=True) return [(i)+1 for i in x]list4=[i/sum(list2) for i in list2]list5=[sum(list4[j]*F[i,j] for j in range([1])) for i in range([0])]for i in range([0]): print('样本'+str(i+1),end='\t') for j in range([1]):print('%.3f'%F[i,j],end='\t') print('%.3f'%list5[i],' ',end='\t');print(xvhao(F[:,0])[i],' ',end='\t') print(xvhao(F[:,1])[i],' ',end='\t');print(xvhao(list5)[i],' ',end='\t') print()print('-'*54)#绘制载荷图(旋转后的空间组件图)(B[:,0],B[:,1],'o');('潜变量f1');('潜变量f2')('载荷图(旋转后的空间组件图)')for i in range([0]):(B[i,0]+,B[i,1]+,'指标'+str(i+1))()
下一篇:最后一页
此代码是我手动搭建的 除KMO和bar检验外未使用因子分析的专用工具包(f
现在的人给单身注入了很多感情色彩,例如我们在生活中经常会见到谈论单
1、去黑头鼻贴是靠黏贴撕拉黑头,从而迅速去除黑头的,可是如果不做好
1、可是我不想做你的哥哥,我只想做你的男朋友,可以给我一个机会做你
7月29日,中国大学生体育代表团选手宋翠芳夺得成都大运会武术项目女子
《海贼王》新浪娱乐讯北京时间7月30日消息,据外国媒体报道,知名日漫
视频加载中 潮新闻客户端记者施力维汪子芳通讯员毛聚视频编辑王晓婕
北京市防汛办消息,据气象台最新预报,受台风减弱的热带低压与副热带高
河北省气象台07月30日05时继续发布暴雨红色预警信号,7月28日20时到30
杨文艺从事绳编已经四十多年,这是他第一次面向这么多外国朋友推介新津
X 关闭
X 关闭