全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2965 5
2008-11-22
有一个200x216的矩阵X,想把每一行作为一个变量(一共200个变量),对向量Y做线性回归,请问要怎么做呢?谢谢啦
二维码

扫码加我 拉你入群

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

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

全部回复
2008-11-24 23:26:00


ls=function(y,x)
{
if(ncol(x)<=1)
{n=length(y)
sxx=sum((x-mean(x))^2)
sxy=sum((x-mean(x))*(y-mean(y)))
b1=sxy/sxx
b0=mean(y)-b1*mean(x)
yf=b0+b1*x
sse=sum((y-yf)^2)
sst=sum((y-mean(y))^2)
ssr=sst-sse
fc=sse/(n-2)
sdb0=sqrt(fc)*sqrt(1/n+mean(x)^2/sxx)
sdb1=sqrt(fc)/sqrt(sxx)
t0=b0/sdb0
t1=b1/sdb1
R2=ssr/sst
F=ssr*(n-2)/sse
list(b0=b0,b1=b1,sd0=sdb0,sd1=sdb1,t0=t0,t1=t1,R2=R2,F=F)}

else{
n=length(y)
c=rep(1,n)
x=cbind(c,x)
k=ncol(x)
A=solve(t(x)%*%x)
B=solve(t(x)%*%x)*(t(x)%*%y)
yf=x%*%B
e=y-yf
sse=t(e)%*%e
sst=sum((y-mean(y))^2)
ssr=sst-sse
fc=sse/(n-k)
sdb=sqrt(fc)*sqrt(diag(A))
t=B/sdb
R2=ssr/sst
F=(ssr/(k-1))/(sse/(n-k))
list(b=B,t=t,R2=R2,F=F)}
}
x=t(x)
ls(y,t(x))

本人编的程序,希望有用。

二维码

扫码加我 拉你入群

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

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

2008-11-25 12:02:00
多谢!
二维码

扫码加我 拉你入群

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

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

2008-11-26 16:51:00
其实不用编得那么复杂啦!R的精神,越精简越好!
二维码

扫码加我 拉你入群

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

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

2008-11-26 18:36:00

x=t(x)

summary(lm(y~x))

二维码

扫码加我 拉你入群

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

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

2008-11-26 20:41:00

经人指点,会了

应该是:  x <- aperm(x)

         lm.sol <- lm(y ~ x[,])

真是大汗阿,谢谢大家帮忙

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群