跑statamatlabpython应该买怎样的电脑 stata和matlab_python中print的本质


1 问题描述: (1)简单的描述性统计:均值、中位数等 (2)求出多个变量的相关系数矩阵 (3)求出简单多元线性回归的系数 (4)求出常见的回归描述量:例如中心化R方、调整后R方

跑statamatlabpython应该买怎样的电脑 stata和matlab_matlab回归分析sst_02


2 数据来源: 数据采用的是Pieters & Bijmolt(1997)的关于Consumer Memory for Television Advertising调查结果。这并不是重点,其实就可以简单理解为现在有一个横截面数据:y是unaid,x包括dur、ncb、rank、year这四个变量,我们现在关心的就是y跑在四个解释变量的多元回归模型。

跑statamatlabpython应该买怎样的电脑 stata和matlab_matlab回归分析sst_02


3 Matlab的实现过程


源代码:

load('recall.mat') mean(Y) median(Y) corrcoef([unaid,dur,ncb,rank,year]) %Calcalate the coefficients of regression N=2677; X=[dur,ncb,rank,year,ones(N,1)]; Y=unaid; beta=inv(X'*X)*X'*Y; %Calculate the R-squared %Uncentered R-squared:   Ru=(Yhat'*Yhat)/(Y'*Y) %Centered R-squared:   Rc=1-(e'*e)/((Y-mean(Y))'*(Y-mean(Y))) %adjusted R-squared:   Ra=1-((1/(N-k))*(e'*e))/((1/(N-1))*(Y-mean(Y))'*(Y-mean(Y)))



Matlab导入文件的格式是*.dat文件,而实现回归的过程其实是基于矩阵的计算:第一段使用的median/mean/corrcoef都是matlab内置的函数,直接就可以用于求回归中比较常见的描述性统计、相关系数矩阵;第二段就是求beta_ols的步骤了,定义好X和Y后就直接计算即可,因为matlab是个专用于科学计算的软件,因此矩阵相乘、求逆、转置都很方便(一会你看看下面的Python就知道为什么说matlab方便);第三段就是带入求各种R方的过程了, 其中很有意思的是求某个列向量的平方和,其实是直接用它的转置再乘自身。 Matlab计算的结果在下面的工作区都能找到:

跑statamatlabpython应该买怎样的电脑 stata和matlab_stata 求输出相关系数矩阵命令_04

跑statamatlabpython应该买怎样的电脑 stata和matlab_matlab回归分析sst_02


4 Python的实现过程


源代码:

from pandas import Series,DataFrame import pandas as pd import numpy as np d=pd.read_excel('data.xlsx') #(a)Calculate the mean/median/correlation coefficients print('mean of unaid is',d.unaid.mean()) print('median of unaid is',d.unaid.median()) mat_of_data=d.corr() print('Correlation coefficient matrix is as follows\n',mat_of_data) #Basic linear regression  N=2677 X=DataFrame({'dur':d.dur,'ncb':d.ncb,'rank':d.ran,'year':d.year,'cons':1}) y=d.unaid def beta_ols_cal(first,last):#To define a process of calculating Beta_OLS     A=np.dot(first.T,first)     B=np.dot(first.T,last)     C=np.linalg.inv(A)     D=np.dot(B,C)     return D      beta_ols=beta_ols_cal(X,y) print('The coefficient of dur is ',beta_ols[1]) print('The coefficient of ncb is ',beta_ols[2]) print('The coefficient of rank is ',beta_ols[3]) print('The coefficient of year is ',beta_ols[4]) print('The coefficient of _constant is ',beta_ols[0]) #Calculate R-squared for the regression model yhat=np.dot(X,beta_ols) uhat=y-yhat k=5 R_unc=sum(yhat**2)/sum(y**2) R_c=1-sum(uhat**2)/sum((y-np.mean(y))**2) R_adj=1-((1/(N-k))*sum(uhat**2))/((1/(N-1))*sum((y-np.mean(y))**2)) print('Uncentered-R is ',R_unc) print('Centered-R is ',R_c) print('adjusted-R is ',R_adj)



看代码长度就知道Python是这三种软件中最负责的一个,但为什么还要用Python呢?因为Python本质是编程软件,科学计算不如matlab、计量专业程度不如stata,但是在抓取网络爬虫、处理批量数据的时候也有它的优势。第一点:Python可以导入的数据类型很多,最常见的excel文件都可以读取。第二点:这段Python命令其实内容挺无聊的,值得提两句的是:Python支持矩阵的计算其实并不多(许是我没找到,因为刚学一会...),所以在中间计算的时候就很麻烦,相比于matlab的矩阵计算简直要麻烦到天上了,当然常见的描述性统计还是有相关第三方库的。第三点:Python实现平方和的过程是sum(x**2)跟matlab完全不同,但殊途同归咯。 Python的结果就可以在IDLE中看到如下结果:

跑statamatlabpython应该买怎样的电脑 stata和matlab_python中print的本质_06

跑statamatlabpython应该买怎样的电脑 stata和matlab_matlab回归分析sst_02


5 Stata的实现过程



源代码: use "\Desktop\recall.dta",clear sum corr reg unaid dur ncb rank year



hhhhhhhh简直不能更短。所以说常见的回归直接用stata是最方便的,它其实是用基本的编程软件写成的,所以直接显示回归各项结果,对于不从事理论计量的人来说Stata好用许多。Stata的回归结果如下:会汇报各项常用回归量:F-test值、t值、MSE、SSR、R方等等。

跑statamatlabpython应该买怎样的电脑 stata和matlab_分位数回归的matlab程序_08

总结:人生苦短,我用Python;人生苦短,我用Matlab;人生苦短,我用Stata。


跑statamatlabpython应该买怎样的电脑 stata和matlab_stata 求输出相关系数矩阵命令_09