我试图从R翻译我的代码。
..........
me.G5 = read.csv('xxxx.csv',sep=';',header=FALSE)[,2:3]
me.x = me.G5[,1]
me.w = me.G5[,2]
int.x = c((me.x/2+.5)*0.1,0.1+(me.x/2+.5)*0.9,1+(me.x/2+.5)*9,10+(me.x/2+.5)*90,100+(me.x/2+.5)*900)
int.w = c(me.w*0.1/2,me.w*.9/2,me.w*9/2,me.w*90/2,me.w*900/2)
### pdf
me.pdf = function(MF,l) {
pdf = function(x){
X = matrix(NaN,length(x),length(l))
for(i in 1:length(l)) X[,i] = MF[[i]](x)
exp(l%*%t(X))
}
pdf
}
### l
me.l = function(MF,mt,sv=NA,tol=1e-10) {
V = mt[2:length(mt)]
if(is.na(sv[1])) l = rep(0,length(V)) else l = sv[-1]
X = matrix(NaN,length(int.x),length(l))
for(i in 2:length(MF)) X[,i-1] = MF[[i]](int.x)
run = 0;sig = 1
while((max(abs(sig))>tol)&(run<40)) {
m1 = as.vector(exp(l%*%t(X))*int.w)
g = m1%*%t(t(X)-V)
G = (t(X)-V)%*%(m1*t(t(X)-V))
sig = solve(G,-t(g))
l = l + sig
l = as.vector(l)
run = run +1
}
m1 = as.vector(exp(l%*%t(X))*int.w)
l0 = -log(sum(m1))
c(l0,l)
}
到Python(我是Python的新手,所以请原谅我的愚蠢错误)
def mepdf(MF,l):
def pdf(x):
X=np.array(np.nan,length(x),length(l))
for i in (1, length(l)):
X[:i] = MF[[i]](x)
exp(l * X.transpose())
return pdf
def mel(MF,mt,sv=np.na, tol=1e-10):
V = mt[2: length(mt)]
if()
X=np.array(np.nan, length(x),length(l))
for i in (2, length(MF)) X[:i-1] = MF[[i]](x)
run=0
sig=1
while((max(abs(sig))>tol)&(run<40)):
m1= as.vector(exp(l * X.transpose())* w)
g= m1 * (X.transpose()-V).transpose()
G= (X.transpose()-V) * (m1* (X.transpose()-V).transpose())
sig = solve(G, -g.transpose())
l= l + sig
l = as.vector(l)
run = run + 1
m1= as.vector(exp( l * X.transpose())* w)
l0 = -log(sum(m1))
c= l0+l
我知道他们犯了很多错误,但我不知道我怎么能做得更好。 或者我认为我可以通过像Rcpp这样的包来做到这一点。 ....... 也许这不可能像R一样,我真的不知道。 ........ 这是一种统计方法。
R控制台中的执行代码是:
->l1= me.l(MPO[1:3],c(1,5,26))
> x= seq(0,10,1e4)
> plot(x,me.pdf(MPO[1:3],l1)(x),type='l',lwd=2)
> lines(x,dnorm(x,5,1),col='red')
> MPO =list();
> MPO[[1]] = function(x) 1
> MPO[[2]] =function(x) x
> MPO[[3]] = function(x) x^2
> MPO[[4]] =function(x) x^3
> MPO[[5]] = function(x) x^4
>plot()
我得到一个正态分布图作为情节.... 这是一个熵