L-V模型的参数计算

  L-V模型的全称为Lotka-Volterra模型,其本质为借鉴生物种群理论,对可以抽象为种群的事物之间的竞争与合作关系进行量化研究,在学术研究中比较常应用,原理不是本文研究重点,如需要弄懂原理建议各位去知网查看相关文章。目前并没有哪个工具可以提供快速方便的L-V模型参数计算包,因此很多研究者在采用这个模型后参数的计算成为一个大问题,笔者结合目前最热门的语言之一python给出了L-V模型参数的计算方法,只要修改读入文件的路径就可以计算出相关的参数,代码可以粘贴复制直接使用,希望对于一些出入门的研究者有所帮助。代码如下:

import pandas as pd#没有这个包 pip install安装
import numpy as np#同上
a=pd.read_csv('/Users/elliot/Desktop/container.csv',encoding='gbk')#路径可以修改,具体应用时改为你的基础数据存放位置。
a=a.set_index(['时间'])
listofa=np.array(a)

#一级差分的计算函数,实际上对于数据分析行业从业者,也可以用此计算环比增长。当然熟练pandas的看官,可以很方便的用pandas进行计算。
def llcha(x):
    n = len(x)
    y=[]
    for i in range(n-1):
        y.append(x[i+1] - x[i])
    return y
#y = llcha(listofa[:,0])

#计算中位值,对于灰色预测,这个函数也是可以使用的。
def llmid(x):
    m,n = np.shape(x)
    ytmp = np.zeros((n,m-1))
    for i in range(n):
       for j in range(m-1):
           ytmp[i,j] = (x[j,i]+x[j+1,i])/2 
    return ytmp  

#权重计算函数,key控制计算位置,与L-V计算公式本身特征有关
def weights(ytmp,key):
    m,n = np.shape(ytmp)
    weights = np.zeros((n,m))
    for i in range(n):     
            weights[i,0] = ytmp[key,i]
            for j in range(1,m):
                if j < key:
                    weights[i,j] = ytmp[key,i] * ytmp[j-1,i]
                elif j >= key:
                    weights[i,j] = ytmp[key,i] * ytmp[j,i]
    return weights

#参数计算函数,采用了最小二乘法
def optcanshu(x):
    ytmp = llmid(x)
    n = np.shape(x)[1]
    canshuset=[]
    for i in range(n):
        yn = llcha(x[:,i])
        yn = np.mat(yn)
        weightstest = weights(ytmp,i)
#       print(weightstest)
        weightstest = np.mat(weightstest)
        canshu = (weightstest.T * weightstest).I*weightstest.T*yn.T
        #最小二乘法推导到最后就是这个公式,其实线形回归参数求解也用的这个公式。
        #print(canshu)
        canshuset.append(canshu)
    return canshuset

#输出最终的参数值
canshuset = optcanshu(listofa) 
#在annaconda的spyder中这个可以以变量的形式保存,类似于matlab,所以推荐使用。同时也推荐jupyter作为脚本编辑器。
#ytmp = llmid(listofa)
#weight1 = weights(ytmp,2)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容