回归循环中表格的新对象

时间:2019-01-11 19:49:12

标签: r loops

我是R的新手,正在尝试按组循环进行回归。对于我的数据,我有13个组,并希望创建13个对象-每个组的回归结果,因此我可以将所有回归结果放在表中。 这是我尝试过的:

for (i in 1:13) {groupi = lm(Yvariable ~ Xvariables,
           data = dataset,
           subset = dataset$group== i )}

这样我将有13个group'i'对象,每个对象都是要放入表中的回归结果。 谢谢!

2 个答案:

答案 0 :(得分:1)

如果我正确解决了您的问题,那么可以使用专门的命令:nlme软件包中的lmList。 试试这个:

import sys
import matplotlib
# Make sure that we are using QT5
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
from PyQt5 import QtWidgets, QtCore
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import numpy as np

class ScrollableWindow(QtWidgets.QMainWindow):
    def __init__(self, fig, ax, step=0.1):
        plt.close("all")
        if not QtWidgets.QApplication.instance():
            self.app = QtWidgets.QApplication(sys.argv)
        else:
            self.app = QtWidgets.QApplication.instance() 

        QtWidgets.QMainWindow.__init__(self)
        self.widget = QtWidgets.QWidget()
        self.setCentralWidget(self.widget)
        self.widget.setLayout(QtWidgets.QVBoxLayout())
        self.widget.layout().setContentsMargins(0,0,0,0)
        self.widget.layout().setSpacing(0)

        self.fig = fig
        self.ax = ax
        self.canvas = FigureCanvas(self.fig)
        self.canvas.draw()
        self.scroll = QtWidgets.QScrollBar(QtCore.Qt.Horizontal)
        self.step = step
        self.setupSlider()
        self.nav = NavigationToolbar(self.canvas, self.widget)
        self.widget.layout().addWidget(self.nav)
        self.widget.layout().addWidget(self.canvas)
        self.widget.layout().addWidget(self.scroll)

        self.canvas.draw()
        self.show()
        self.qapp.exec_()

    def setupSlider(self):
        self.lims = np.array(self.ax.get_xlim())
        self.scroll.setPageStep(self.step*100)
        self.scroll.actionTriggered.connect(self.update)
        self.update()

    def update(self, evt=None):
        r = self.scroll.value()/((1+self.step)*100)
        l1 = self.lims[0]+r*np.diff(self.lims)
        l2 = l1 +  np.diff(self.lims)*self.step
        self.ax.set_xlim(l1,l2)
        print(self.scroll.value(), l1,l2)
        self.fig.canvas.draw_idle()


# create a figure and some subplots
fig, ax = plt.subplots()
t = np.linspace(0,3000,101)
x = np.cumsum(np.random.randn(len(t)))
ax.plot(t,x, marker="o")

# pass the figure to the custom window
a = ScrollableWindow(fig,ax)

对象 library(nlme) your.result.list <- lmList(Yvariable ~ Xvariables | group, data = dataset) your.result.list 属于类your.result.list,因此它是一个列表,其中包含您希望作为单个对象包含的13个元素。它具有通用的打印选项,可将系数表打印到控制台中。所以也许这已经是您想要的?

答案 1 :(得分:0)

考虑bytapply的面向对象的包装器,旨在按因子对数据帧进行子集化并在子集上运行操作。通常,它可以代替split + lapply来简化通话:

reg_list <- by(dataset, dataset$group, function(sub)
                summary(lm(Yvariable ~ Xvariables,
                           data = sub)
                       )
              )

请注意,以上内容仅生成回归结果摘要的命名列表。通过扩展function,需要进一步的工作来提取每个模型的估算值。