楼主: qqlxl
1888 3

[问答] 求助大家这个R程序为什么最后一步结果出不来。请大家帮忙 [推广有奖]

  • 0关注
  • 0粉丝

小学生

85%

还不是VIP/贵宾

-

威望
0
论坛币
657 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
105 点
帖子
7
精华
0
在线时间
9 小时
注册时间
2011-2-15
最后登录
2022-4-12

楼主
qqlxl 发表于 2012-2-22 00:53:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
[backcolor=rgba(255, 255, 255, 0.917969)]求助大家,我需要把boston housing data分成两个set,400个data在training set 里面, 106个在test.set里。
[backcolor=rgba(255, 255, 255, 0.917969)]我需要对trainingset 的data用ordinary least square method和ridge regression method 去fit。程序到最后一步出错了,大家帮忙看看行吗
[backcolor=rgba(255, 255, 255, 0.917969)]

[backcolor=rgba(255, 255, 255, 0.917969)]library(mlbench)
data(BostonHousing)
attach(BostonHousing)
pairs(BostonHousing, main="BostonHousing data",pch=".",cex=3)

BostonHousing$lstat <- log(BostonHousing$lstat)
BostonHousing$rm <- BostonHousing$rm^2

BostonHousing$chas <- factor(BostonHousing$chas, levels = 0:1,labels = c("no", "yes"))
BostonHousing$rad <- factor(BostonHousing$rad, ordered = TRUE)

x=seq(1,506,1)
y=sample(x,size=506,replace=F)
train.set=BostonHousing[y[1:400],]
test.set=BostonHousing[y[401:506],]

#OLS method
boston.lm = lm( medv~.,data=train.set)
summary(boston.lm)

opar=par(mfrow=c(2,2),oma=c(0,0,1.1,0),mar=c(4.1,4.1,2.1,1.1))
plot(boston.lm)
par(opar)

[backcolor=rgba(255, 255, 255, 0.917969)]

[backcolor=rgba(255, 255, 255, 0.917969)]#ridge method
[backcolor=rgba(255, 255, 255, 0.917969)]options(continue=" ")
ridge=function(x,y,lam){
n=length(y)
p=ncol(x)
xm=apply(x,2,mean)
xs=apply(x,2,sd)
ym=mean(y)
ys=sd(y)
X=t((t(x)-xm)/xs)#standardized x matrix
Y=(y-ym)/ys  #standardized x matrix
tmp1=t(X)%*%X
tmp2=t(X)%*%Y
l.lam=length(lam)
out=list(gcv=rep(0,l.lam),coef=matrix(0,(p+1),l.lam),coefs=matrix(0,p,l.lam))
for (i in 1:l.lam){
    tmp3=solve(tmp1+diag(lam,p))
    beta=as.vector(tmp3%*%tmp2) #standardized coefficient
    tmp4=X%*%tmp3%*%t(X)
    yhat=tmp4%*%Y
    out$gcv=mean((Y-yhat)^2)/((1-mean(diag(temp4)))^2) #GCV values
    coef=(ys/xs)*beta
    intercept=ym-sum(coef*xm)
    out$coef[,i]=c(intercept,coef)
    out$coefs[,i]=beta
}
out
}
lam=seq(0,0.1,0.001)
try=ridge(train.set[,1:13],train.set[,14],lam)





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:求助大家 R程序 regression regressio Training 程序

沙发
qoiqpwqr 发表于 2012-2-22 06:40:34
你的ridge函数里面用了一句
xm=apply(x,2,mean)
你调用这个函数的时候用了的x=train.set[,1:13],里面有个变量chas是yes或者no,你去算他们的mean当然就出错了。

检查错误很简单,把你的函数里面的参数赋上值,然后一步一步的运行函数里面的语句就可以找出错误了。
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
aspenroad + 1 + 1 + 1 热心帮助其他会员
babymafia + 1 + 1 + 1 热心帮助其他会员
UNC + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
吉林小王子 在职认证  发表于 2012-2-22 08:18:00
高手

板凳
qqlxl 发表于 2012-2-25 00:55:00
qoiqpwqr 发表于 2012-2-22 06:40
你的ridge函数里面用了一句
xm=apply(x,2,mean)
你调用这个函数的时候用了的x=train.set[,1:13],里面有个 ...
太谢谢了!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 07:46