我是R的新手,正在尝试按组循环进行回归。对于我的数据,我有13个组,并希望创建13个对象-每个组的回归结果,因此我可以将所有回归结果放在表中。 这是我尝试过的:
for (i in 1:13) {groupi = lm(Yvariable ~ Xvariables,
data = dataset,
subset = dataset$group== i )}
这样我将有13个group'i'对象,每个对象都是要放入表中的回归结果。 谢谢!
答案 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)
考虑by
,tapply
的面向对象的包装器,旨在按因子对数据帧进行子集化并在子集上运行操作。通常,它可以代替split
+ lapply
来简化通话:
reg_list <- by(dataset, dataset$group, function(sub)
summary(lm(Yvariable ~ Xvariables,
data = sub)
)
)
请注意,以上内容仅生成回归结果摘要的命名列表。通过扩展function
,需要进一步的工作来提取每个模型的估算值。