我正在尝试绘制我的值并使用 nls 模型将它们与曲线拟合。但我收到一条错误消息,说我的变量没有起始值。
conc <- c(1.83, 3.66, 7.32, 14.65, 29.30, 58.59, 117.19, 468.75, 937.5, 1875, 3750)
avg <- c(0.02, 0.03, 0.05, 0.09, 0.23, 0.40, 0.60, 0.79, 0.98, 0.82, 1)
DataSet <- data.frame(conc, avg)
ggplot(DataSet, aes(x = conc, y = avg)) +
geom_point() +
scale_x_log10() +
stat_smooth(aes(x=conc, y = avg), method = "nls",
formula = "avg~Emax*(conc^Hill)/((EC50^Hill)+(conc^Hill))",
method.args=list(start=c(Emax = 1, EC50 = 100, Hill = 2)),
se = FALSE)
# Warning message:
# Computation failed in `stat_smooth()`:
# parameters without starting value …Run Code Online (Sandbox Code Playgroud) 继我之前的两篇文章(post1,post 2scipy )之后,我现在已经达到了我用来寻找曲线拟合的地步。但是,我的代码产生了错误。
我正在使用的文件示例.csv位于 post1 中。我尝试复制并替换互联网上的示例,但似乎不起作用。
这是我所拥有的(文件.py)
import pandas as pd
import numpy as np
from scipy import optimize
df = pd.read_csv("~/Truncated raw data hcl.csv", usecols=['time' , '1mnaoh trial 1']).dropna()
data1 = df
array1 = np.asarray(data1)
x , y = np.split(array1,[-1],axis=1)
def func(x, a , b , c , d , e):
return a + (b - a)/((1 + c*np.exp(-d*x))**(1/e))
popt, pcov = optimize.curve_fit(func, x , y , p0=[23.2, 30.1 , 1 …Run Code Online (Sandbox Code Playgroud) 我正在使用PopulationGrowth.csv编写以下脚本:
dat <-read.csv("/Path/PopulationGrowth.csv")
class = "data.frame", row.names=c(NA,-16L)
m1 <- nls(pop~SSlogis(Year,asym,xmid,scal),data=dat)
par(las=1,bty="l",mar=c(5,6,2,2)+0.1) ## graphics tweaks
with(dat,plot(CentralOakland~Year,ylab=""))
mtext("Population",side=2,las=0,line=4)
yearvec <- 1940:2010
lines(yearvec,predict(m1,newdata=data.frame(Year=yearvec)))
Run Code Online (Sandbox Code Playgroud)
在最后一行之后,我收到以下错误:
Error in predict(m1, newdata = data.frame(Year = yearvec)) : object 'm1' not found
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的数据:
Year CentralOakland
1940 7852
1950 8452
1960 6701
1970 6135
1980 5872
1990 5406
2000 5281
2010 6086
Run Code Online (Sandbox Code Playgroud)
我还试图预测未来30年的人口趋势.有理由相信人口将在未来30年内增加.预测这个有什么功能?
忍受我,我是R的新手.
有几天我一直在研究这个问题而且我被困了......
我在R中执行了许多蒙特卡罗模拟,它给出了每个输入x的输出y,并且在x和y之间显然有一些简单的关系,所以我想确定公式及其参数.但我似乎无法在'低x'和'高x'系列中获得良好的整体适应性,例如使用这样的对数:
dat = data.frame(x=x, y=y)
fit = nls(y~a*log10(x)+b, data=dat, start=list(a=-0.8,b=-2), trace=TRUE)
Run Code Online (Sandbox Code Playgroud)
我也尝试拟合(log10(x),10 ^ y),这给出了一个很好的拟合但反向变换不适合(x,y).
谁能解决这个问题?
请解释您是如何找到解决方案的.
谢谢!
编辑:
感谢所有快速反馈!
我不知道我正在模拟的理论模型,所以我没有比较的基础.我根本不知道x和y之间的真实关系.顺便说一下,我不是统计学家.
基础模型是一种随机反馈增长模型.我的目标是在给定输入x> 0的情况下确定长期增长率g,因此系统的输出在每次迭代中以1 + g的速率指数增长.系统在每次迭代中根据系统的大小进行随机生产,输出一部分产量,其余部分保留在系统中,由另一个随机变量确定.从MC模拟我发现系统输出的增长率对于每个测试过的x而言是对数正态分布的,而数据系列中的y是增长率g的对数.当x走向无穷大时,g趋向于零.随着x走向零,g走向无穷大.
我想要一个可以从x计算y的函数.我实际上只需要一个低x的函数,比如说,在0到10的范围内.我能够很好地拟合y = 1.556*x ^ -0.4 -3.58,但它不适合大x.我想要一个通用的所有x> 0的函数.我也尝试过Spacedman的poly fit(谢谢!)但是它在x = 1到6的关键范围内并不合适.
有任何想法吗?
编辑2:
我已经尝试了一些,还有Grothendieck的详细建议(谢谢!)经过一些考虑我决定,因为我没有理论基础来选择一个函数而不是另一个函数,而且我很可能只对x-感兴趣在1和6之间的值,我应该使用一个非常适合的简单函数.所以我只使用y~a*x ^ b + c并记下它不适合高x.在论文的第一稿完成后,我可以再次寻求社区的帮助.一旦你看到蒙特卡洛模型,也许你们中的一个人可以发现x和y之间的理论关系.
再次感谢!
低x系列:
x y
1 0.2 -0.7031864
2 0.3 -1.0533648
3 0.4 -1.3019655
4 0.5 -1.4919278
5 0.6 -1.6369545
6 0.7 -1.7477481
7 0.8 -1.8497117
8 0.9 -1.9300209
9 1.0 -2.0036842
10 1.1 -2.0659970
11 1.2 -2.1224324
12 …Run Code Online (Sandbox Code Playgroud) 我正在做生物信息学,我们在mRNA上绘制小RNA.我们在每个mRNA上具有蛋白质的作图坐标,并且我们计算蛋白质结合mRNA的位置与由小RNA结合的位点之间的相对距离.
我获得以下数据集:
dist eff
-69 3
-68 2
-67 1
-66 1
-60 1
-59 1
-58 1
-57 2
-56 1
-55 1
-54 1
-52 1
-50 2
-48 3
-47 1
-46 3
-45 1
-43 1
0 1
1 2
2 12
3 18
4 18
5 13
6 9
7 7
8 5
9 3
10 1
13 2
14 3
15 2
16 2
17 2
18 2
19 2
20 2
21 3 …Run Code Online (Sandbox Code Playgroud) 我正在研究在scipy中拟合3d分布函数.我有一个numpy数组,其中有x和y-bin的计数,我试图将其与一个相当复杂的三维分布函数相匹配.数据适合26(!)参数,这些参数描述了其两个成分群体的形状.
我在这里学到了当我调用leastsq时,我必须将我的x和y坐标作为'args'传递.unutbu提供的代码是为我编写的,但当我尝试将其应用于我的特定情况时,我收到错误"TypeError:leastsq()得到关键字参数'args'的多个值"
这是我的代码(抱歉长度):
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as spopt
from textwrap import wrap
import collections
cl = 0.5
ch = 3.5
rl = -23.5
rh = -18.5
mbins = 10
cbins = 10
def hist_data(mixed_data, mbins, cbins):
import numpy as np
H, xedges, yedges = np.histogram2d(mixed_data[:,1], mixed_data[:,2], bins = (mbins, cbins), weights = mixed_data[:,3])
x, y = 0.5 * (xedges[:-1] + xedges[1:]), 0.5 * (yedges[:-1] + yedges[1:])
return H.T, x, y
def gauss(x, s, …Run Code Online (Sandbox Code Playgroud) 我有2个数组说X和Y.每个都有5个元素.现在对于(X,Y)的每个可能组合,我有一个Z值,所以Z是一个5x5矩阵.
我希望找到一个公式,例如z = f(x,y).关于如何做到这一点的任何想法.
我尝试了MS Excel曲面图,但它没有在曲面图上给出任何方程或曲线拟合.
我知道numpy和scipy都具有polyfit功能,并在这里访问过:http ://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html
为什么scipy.org上有一个有关numpy.polyfit的页面?numpy.polyfit和scipy.polyfit是否相同?如果没有,我应该使用哪一个?
我试图用ggplot2将曲线拟合到下面的散点图.
我找到了geom_smooth功能,但尝试不同的方法和跨度,我似乎从来没有得到正确的曲线...
任何人都可以得到更好的曲线,正确适合,看起来不那么摇摆?谢谢!
在下面找到MWE:
my.df <- data.frame(sample=paste("samp",1:60,sep=""),
reads=c(523, 536, 1046, 1071, 2092, 2142, 4184, 4283, 8367, 8566, 16734, 17132, 33467, 34264, 66934, 68528, 133867, 137056, 267733, 274112, 409, 439, 818, 877, 1635, 1754, 3269, 3508, 6538, 7015, 13075, 14030, 26149, 28060, 52297, 56120, 104594, 112240, 209188, 224479, 374, 463, 748, 925, 1496, 1850, 2991, 3699, 5982, 7397, 11963, 14794, 23925, 29587, 47850, 59174, 95699, 118347, 191397, 236694),
number=c(17, 14, 51, 45, 136, 130, 326, 333, 742, 738, 1637, …Run Code Online (Sandbox Code Playgroud) 我有以下剂量反应数据,并希望绘制剂量反应模型和全局拟合曲线.[xdata =药物浓度; ydata(0-5)=不同浓度药物的反应值].我没有问题地绘制了Std曲线.
标准曲线数据拟合:
df <- data.frame(xdata = c(1000.00,300.00,100.00,30.00,10.00,3.00,1.00,0.30,
0.10,0.03,0.01,0.00),
ydata = c(91.8,95.3,100,123,203,620,1210,1520,1510,1520,1590,
1620))
nls.fit <- nls(ydata ~ (ymax*xdata / (ec50 + xdata)) + Ns*xdata + ymin, data=df,
start=list(ymax=1624.75, ymin = 91.85, ec50 = 3, Ns = 0.2045514))
Run Code Online (Sandbox Code Playgroud)
剂量响应曲线数据拟合:
df <- data.frame(
xdata = c(10000,5000,2500,1250,625,312.5,156.25,78.125,39.063,19.531,9.766,4.883,
2.441,1.221,0.610,0.305,0.153,0.076,0.038,0.019,0.010,0.005),
ydata1 = c(97.147, 98.438, 96.471, 73.669, 60.942, 45.106, 1.260, 18.336, 9.951, 2.060,
0.192, 0.492, -0.310, 0.591, 0.789, 0.075, 0.474, 0.278, 0.399, 0.217, 1.021, -1.263),
ydata2 = c(116.127, 124.104, 110.091, 111.819, 118.274, 78.069, 52.807, 40.182, …Run Code Online (Sandbox Code Playgroud) curve-fitting ×10
r ×5
python ×4
scipy ×4
ggplot2 ×2
numpy ×2
excel-charts ×1
nls ×1
regression ×1