找回密码
 立即注册
查看: 2530|回复: 0

希望大神从天而降,帮帮我..............

[复制链接]
发表于 2013-11-23 12:33:41 | 显示全部楼层 |阅读模式
我写的程序如下
funs<-function(x){
n1<-length(x);
y<-matrix(rep(0,n1),1,n1)
for (k in 1:n1) {
if (abs(x[k,1])> 1e-10) y[k,k]<-1/abs(x[k,1]) else y[k,k]<-1e10;}
list(funs<-y);}
library(MASS)
A <- rep(1, 6); I <- diag(A);
B <-rep(0,6);
X <- mvrnorm(200,B,I);   #产生X的随机数
beta<- matrix(c(1,0.8,0.6,0,0,0),nrow=6);
epsilon<-rnorm(200,0,4);  #产生epsilon随机数
Y<-X%*%beta+ epsilon;  #得到Y的观测值
C<-solve(t(X)%*%X);    #计算X’X的逆
Beta<- (C%*%t(X))%*%Y;  #求出beta的最小二乘估计
G<-matrix(0,6,10)
lambda<-0.1;lambda[1]<-0.1; i<-1   #对lambda进行循环取值
for(i in 1:10) {     
j<-0   #对alpha进行迭代计算
repeat {
alphaj<-Beta
D<-funs(alphaj)
E<-solve(t(X)%*%X+200*lambda[i]*D[[1]])
n<-j+1
alphan<-alphaj-E%*%(-2*t(X)%*%(Y-X%*%alphaj) +200*lambda[i]*D[[1]]%*%alphaj)
j<-j+1
for(m in 1:6) {          #确定alpha中为零的元素
if(alphan[m,1]<1e-4) alphan[m,1]<-0;}
if(t(alphan-alphaj)%*%(alphan-alphaj)<0.1) break
G[,i]<-alphan }
lambda[i+1]<-i*0.1
i<-i+1;}
G
但是运行有错误,而且运行缓慢,烦劳大神们帮忙看看,错在哪里,还有就是能不能帮我简化一下程序,小女子万分感谢!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 08:38 , Processed in 0.028723 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表