R语言中如何根据coef()写出回归模型的程序?

R语言中如何根据coef()写出回归模型的程序?,第1张

coef不是写成回归模型的程序,而是读取你之前构建的模型回归系数

比如mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")

你构建了logistic回归模型并把模型数据储存在mylogit这个对象里面。

coef(mylogit)就会显示回归方程的回归系数。 你也可以print(mylogit)看看有什么不同。

//要求:多项式按降幂排列

#include<stdafx.h>

#include<iostream.h>

struct node

{

int coef//系数

int exp//指数

node * next

}

node * h1=NULL//第一个多项式的头指针

node * h2=NULL//第二个多项式的头指针

node * insert(int c,int e)//创建一个系数为c,指数为e的结点,并返回其地址

{

node * newnode=new node//创建新结点

newnode->coef=c//系数等于c

newnode->exp=e//指数等于e

newnode->next=NULL

return newnode

}

node * create(node * h)

{

int coef

int exp

char c

cout<<"请输入系数:"

cin>>coef

cout<<"请输入指数:"

cin>>exp

h=insert(coef,exp)

cout<<"是否输入完毕?(Y/N)"

cin>>c

if(c=='y'||c=='Y')

{

return h//如果输入完毕,返回头指针地址

}

else

{

h->next=create(h->next)//否则递归建立下一个结点

return h//返回头指针地址

}

}

node * copy(node * source)//将一个结点的内容复制到另一个结点,并返回该结点地址

{

if(source!=NULL)//如果源结点不为空

{

node * des=new node//创建新结点

des->coef=source->coef//新结点的系数等于源结点的系数

des->exp=source->exp//新结点的指数等于源结点的指数

des->next=NULL

return des//返回新结点地址

}

return NULL

}

void print(node * head)//输出头指针为head的多项式链表

{

node * h=head

if(h==NULL)

{

cout<<"0"//如果链表为空,输出0

}

else

{

while(h->next!=NULL)//否则,当其下一个结点不为空时

{

if(h->exp==0)//如果指数为0,即常数

{

if(h->coef>0)//如果系数大于0

{

cout<<h->coef//输出系数

}

else

{

cout<<"\b"<<h->coef//否则,退一格(消除前面的+号),输出系数

}

}

else if(h->exp==1)//否则,如果指数为1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"<<"+"//输出x+

}

else

{

cout<<h->coef<<"*x"<<"+"//否则,输出相应的系数

}

}

else

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"<<"+"//退一格,输出-x

}

else

{

cout<<"\b"<<h->coef<<"*x"<<"+"//否则,退一格,输出相应的系数

}

}

}

else//否则,指数大于1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"<<h->exp<<"+"

}

else

{

cout<<h->coef<<"*x"<<h->exp<<"+"

}

}

else 

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"<<h->exp<<"+"

}

else

{

cout<<"\b"<<h->coef<<"*x"<<h->exp<<"+"

}

}

}

h=h->next

}

//输出最后一项

if(h->exp==0)//如果指数为0,即常数

{

if(h->coef>0)//如果系数大于0

{

cout<<h->coef//输出系数

}

else

{

cout<<"\b"<<h->coef//否则,退一格,输出系数

}

}

else if(h->exp==1)//否则,如果指数为1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"//输出x

}

else

{

cout<<h->coef<<"*x"

}

}

else

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"//退一格,输出-x

}

else

{

cout<<"\b"<<h->coef<<"*x"

}

}

}

else//否则,指数大于1

{

if(h->coef>0)//如果系数大于0

{

if(h->coef==1)//如果系数等于1

{

cout<<"x"<<h->exp

}

else

{

cout<<h->coef<<"*x"<<h->exp

}

}

else

{

if(h->coef==-1)//否则,如果系数等于-1

{

cout<<"\b"<<"-x"<<h->exp

}

else

{

cout<<"\b"<<h->coef<<"*x"<<h->exp

}

}

}

}

}

void prints(node * p1,node * p2,node * r)//输出相加结果,形如p1+p2=r

{

print(p1)

cout<<endl<<"+"<<endl

print(p2)

cout<<endl<<"="<<endl

print(r)

cout<<endl

}

char compare(node * n1,node * n2)//比较两个结点的指数大小

{

if(n1->exp==n2->exp)

{

return '='

}

else if(n1->exp>n2->exp)

{

return '>'

}

else

{

return '<'

}

}

node * add(node * p1,node * p2)//计算两个多项式相加,返回结果链表首地址

{

node * fr

//如果有一个为空,就把另外一个链表其后的部分复制到结果链表的尾部

if(p1==NULL)

{

node * x=copy(p2)

node * temp=x

while(p2!=NULL)

{

x->next=copy(p2->next)

x=x->next

p2=p2->next

}

return temp

}

else if(p2==NULL)

{

node * x=copy(p1)

node * temp=x

while(p1!=NULL)

{

x->next=copy(p1->next)

x=x->next

p1=p1->next

}

return temp

}

//如果都不为空

else

{

switch(compare(p1,p2))//比较两个结点的指数大小

{

case '='://相等

if(p1->coef+p2->coef!=0)//如果系数和不为0

{

fr=insert(p1->coef+p2->coef,p1->exp)//新结点的系数为两个结点的系数和,指数为这两个结点的指数

fr->next=add(p1->next,p2->next)

return fr

}

else

{

fr=add(p1->next,p2->next)//否则,新结点地址为这两个结点之后的部分链表的和链表的首地址

return fr

}

case '>'://大于

fr=copy(p1)//新结点的内容与p1相同

fr->next=add(p1->next,p2)//以p1->next为新的p1,递归调用add,创建链表余下的部分

return fr

case '<'://小于

fr=copy(p2)//新结点的内容与p2相同

fr->next=add(p1,p2->next)//以p2->next为新的p2,递归调用add,创建链表余下的部分

return fr

default:

return NULL

}

}

}

void main(void)

{

cout<<"先建立第一个多项式:"<<endl

h1=create(h1)

cout<<"再建立第二个多项式:"<<endl

h2=create(h2)

cout<<"和:"<<endl

prints(h1,h2,add(h1,h2))

}

至少这里面有逻辑错误,也即next=new之后,你不能立即netxt=p1,否则就没有必要new了

if(p1->index>p2->index)

{

polynomial *next=new polynomial

next=p1

。。。。。

}

if(p1->index<p2->index)

{

polynomial *next=new polynomial

next=p2

。。。。。

}

if(p1->index==p2->index)

{

polynomial *next=new polynomial


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11466026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存